微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AVL树中“空”节点数的O复杂度是多少?

如何解决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 举报,一经查实,本站将立刻删除。