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)