如何解决AVL树中“空”节点数的O复杂度是多少?
我们知道,AVL树通常非常接近于平衡。假设我们将一棵AVL树放入一个数组中(非常类似于堆,其中父级是索引i,左子级是2i,右子级是2i + 1),您将获得多少个空索引O的复杂性?
因此,我知道高度为h的树中的最小节点数= Fibonacci(h + 2)-1。因此,空索引的数量= 2 ^ h-1-(Fibonacci(h + 2)-1) = 2 ^ h-斐波那契(h + 2)。但是我不知道下一步该怎么证明它的复杂性。我认为它是O(log(n)),但我不确定。
解决方法
如果h
是基于0的(按照通常的惯例),则高度为h
的AVL树中的最小节点数为F(h+3) - 1
。
让n = F(h+3) - 1
并尝试解决h
来找到具有n
个节点的AVL树的最大高度。
F(x)的闭合形式由Binet的公式给出(有关详细信息,请参见here)
F(x) = (phi^n - psi^n)/sqrt(5)
因此
n = (phi^(h+3) - psi^(h+3))/sqrt(5) - 1
>= (phi^(h+3) - 1)/sqrt(5) - 1 since |psi| < 1
求h
收益
h <= log_phi(sqrt(5)(n + 1) + 1) - 3
<= 1.4405 log2(n)
高度为h
的完整树具有2^(h+1) - 1
个节点。或就n
而言:
2^(h+1) - 1
<= 2^(1.4405 log2(n) + 1) - 1
= 2 * (2^log(n))^1.4405 - 1
= 2n^1.4405 - 1
因此,空节点的数量由
限定2n^1.4405 - 1 - n = O(n^1.4405)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。