当前位置:   article > 正文

AVL树的树高上下界极清晰推导_avl数的高度推导

avl数的高度推导

定义与设定

树上某点的高度是这个点到它子树上叶子节点所经过的最大边数,树的高度定义为根节点的高度。
以下的思路均是设树高为h,求树的最大(树高下界)和最小叶子数(树高上界)。

最小树高

当树高为h是,最大点数当然是把能填的都填满,成满二叉树。这样点数 n = 2 h + 1 − 1 n=2^{h+1}-1 n=2h+11导出h就是 h = l o g 2 ( n + 1 ) − 1 h=log_2(n+1)-1 h=log2(n+1)1这个结果就是树高的下界。

最大树高

树高一定时,每个点的左右子树高低都差1时树的点数最少。高度为h是点数最小的话,左右子树高度分别是h-1和h-2,那总点数为 n ( h ) = n ( h − 1 ) + n ( h − 2 ) + 1 , n ( 0 ) = 1 , n ( 1 ) = 2 n(h)=n(h-1)+n(h-2)+1,\\n(0)=1,n(1)=2 n(h)=n(h1)+n(h2)+1n(0)=1,n(1)=2

通项公式

这个递推式通项公式比较经典。有多种方法。

矩阵法,简单粗暴

比如直接写成3*3矩阵连乘的形式,求出3个特征值把底数矩阵对角化了,直接就导出通项公式,非常暴力。

斐波那契法,方便巧妙

也可以变换以下得出这个递推和斐波那契数列的关系:
左右同时+1得到 n ( h ) + 1 = ( n ( h − 2 ) + 1 ) + ( n ( h − 1 ) + 1 ) n(h)+1=(n(h-2)+1)+(n(h-1)+1) n(h)+1=(n(h2)+1)+(n(h1)+1)
看看首项的关系就会推出: n ( h ) = f ( h + 3 ) − 1 n(h)=f(h+3)-1 n(h)=f(h+3)1
斐波那契数列的通项公式求法更多了,其中最简单的是google一下抄过来,所以 n ( h ) = 1 5 [ ( 1 + 5 2 ) h + 3 − ( 1 − 5 2 ) h + 3 ] − 1 > 1 5 ( 1 + 5 2 ) h + 3 − 2 n(h)=\frac{1}{\sqrt{5}}\left[\left(\frac{1+\sqrt{5}}{2}\right)^{h+3}-\left(\frac{1-\sqrt{5}}{2}\right)^{h+3}\right]-1>\frac{1}{\sqrt{5}}\left(\frac{1+\sqrt{5}}{2}\right)^{h+3}-2 n(h)=5 1(21+5 )h+3(215 )h+31>5 1(21+5 )h+32这里用了放缩,不放缩的话h不好解出来,所以放缩了: 1 5 ( 1 − 5 2 ) h + 3 < 1 \frac{1}{\sqrt{5}}\left(\frac{1-\sqrt{5}}{2}\right)^{h+3}<1 5 1(215 )h+3<1
把h解出来:
h < [ l o g 1 + 5 2 5 ( n ( h ) + 2 ) ] − 3 \Large h<[log_{\frac{1+\sqrt{5}}{2}}\sqrt{5}(n(h)+2)]-3 h<[log21+5 5 (n(h)+2)]3
把对数形式用换底公式统一成以2为底的对数变成:
h < log ⁡ 2 ( n ( h ) + 2 ) log ⁡ 2 ( 1 + 5 2 ) + log ⁡ 2 5 log ⁡ 2 ( 1 + 5 2 ) − 3 h<\frac{\log _{2}\left(n(h)+2\right)}{\log _{2}\left(\frac{1+\sqrt{5}}{2}\right)}+\frac{\log _{2} \sqrt{5}}{\log _{2}\left(\frac{1+\sqrt{5}}{2}\right)}-3 h<log2(21+5 )log2(n(h)+2)+log2(21+5 )log25 3

h < 1.44042 log ⁡ 2 ( n + 2 ) − 1.32772 h<1.44042 \log _{2}\left(n+2\right)-1.32772 h<1.44042log2(n+2)1.32772
这就是高度的上界。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/492155
推荐阅读
相关标签
  

闽ICP备14008679号