数据结构-高度为h的m叉树至多结点/n个结点的m叉树的最小高度(公式推导)
(详细公式推导)高度为h的m叉树至多结点 以及 n个结点的m叉树的最小高度
在学习数据结构中的树时,会遇到如下两个结论:
① 高度为h
的m
叉树至多结点数为
(
m
h
−
1
)
/
(
m
−
1
)
.
.
.
.
.
.
.
.
.
.
.
.
①
(m^h-1)/(m-1)............①
(mh−1)/(m−1)............①
② 具有n
个结点的m
叉树的最小高度为
⌈
l
o
g
m
(
n
(
m
−
1
)
+
1
)
⌉
.
.
.
.
.
.
.
.
.
.
.
.
②
\left \lceil log_m(n(m-1)+1) \right \rceil ............②
⌈logm(n(m−1)+1)⌉............②
许多初学者并不知道是怎么推出来的,死记又费时间
本篇文章来具体推导一下公式
高度为h的m叉树至多结点数
由结论,度为 m m m 的树中,第 i i i 层上至多有 m i − 1 m^{i-1} mi−1 个结点
于是可得如下表格:
高度 | 结点总数 |
---|---|
1 | 1 1 1 |
2 | 1 + m 1+m 1+m |
3 | 1 + m + m 2 1+m+m^2 1+m+m2 |
4 | 1 + m + m 2 + m 3 1+m+m^2+m^3 1+m+m2+m3 |
5 | 1 + m + m 2 + m 3 + m 4 1+m+m^2+m^3+m^4 1+m+m2+m3+m4 |
··· | ⋅ ⋅ ⋅ ··· ⋅⋅⋅ |
i | 1 + m + m 2 + ⋅ ⋅ ⋅ + m i − 1 1+m+m^2+···+m^{i-1} 1+m+m2+⋅⋅⋅+mi−1 |
现在,设高度为h
的m叉树至多所需结点数为n
,
那么结合上述表格,可得:
n
=
1
+
m
+
m
2
+
⋅
⋅
⋅
+
m
h
−
1
n=1+m+m^2+···+m^{h-1}
n=1+m+m2+⋅⋅⋅+mh−1
由等比数列求和公式
S
=
a
1
1
−
q
n
1
−
q
S = a_1\frac{1 - q^n}{1 - q}
S=a11−q1−qn
其中,a1
为首项,q
为公比,n
为项数,S
为等比数列前n项和。
于是原式可以化为
n
=
(
m
h
−
1
)
/
(
m
−
1
)
n=(m^h-1)/(m-1)
n=(mh−1)/(m−1)
由于n一定是整数,所以
n
≤
(
m
h
−
1
)
/
(
m
−
1
)
n≤(m^h-1)/(m-1)
n≤(mh−1)/(m−1) ,
即高度为h的m叉树至多结点数为
(
m
h
−
1
)
/
(
m
−
1
)
.
.
.
.
.
.
.
.
.
.
.
.
①
(m^h-1)/(m-1)............①
(mh−1)/(m−1)............①
具有n个结点的m叉树的最小高度
现在开始推导具有n
个结点的m
叉树的最小高度。
首先由上面刚推出来的①式
n
=
(
m
h
−
1
)
/
(
m
−
1
)
.
.
.
.
.
.
.
.
.
.
.
.
①
n=(m^h-1)/(m-1)............①
n=(mh−1)/(m−1)............①
化出关于h
的表达式
n ( m − 1 ) = m h − 1 n(m-1)=m^h-1 n(m−1)=mh−1 m h = n ( m − 1 ) + 1 m^h=n(m-1)+1 mh=n(m−1)+1 l o g m m h = l o g m ( n ( m − 1 ) + 1 ) log_mm^h=log_m(n(m-1)+1) logmmh=logm(n(m−1)+1) h = l o g m ( n ( m − 1 ) + 1 ) h=log_m(n(m-1)+1) h=logm(n(m−1)+1)
因为h只能是正整数,所以向上取整原式。最终表达式
即具有n个结点的m叉树的最小高度:
h
=
⌈
l
o
g
m
(
n
(
m
−
1
)
+
1
)
⌉
.
.
.
.
.
.
.
.
.
.
.
.
②
h=\left \lceil log_m(n(m-1)+1) \right \rceil............②
h=⌈logm(n(m−1)+1)⌉............②
综上,本篇文章推导了以下两个式子:
① 高度为h
的m
叉树至多结点数为
(
m
h
−
1
)
/
(
m
−
1
)
.
.
.
.
.
.
.
.
.
.
.
.
①
(m^h-1)/(m-1)............①
(mh−1)/(m−1)............①
② 具有n
个结点的m
叉树的最小高度为
⌈
l
o
g
m
(
n
(
m
−
1
)
+
1
)
⌉
.
.
.
.
.
.
.
.
.
.
.
.
②
\left \lceil log_m(n(m-1)+1) \right \rceil ............②
⌈logm(n(m−1)+1)⌉............②
有帮助的话,点个赞让更多人看到吧ヽ(^ー^)人(^ー^)ノ
如有错误请指出,尽量马上修改,Thanks♪(・ω・)ノ !
附送一张壁纸:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)