Skip to content

Latest commit

 

History

History
47 lines (33 loc) · 2.34 KB

File metadata and controls

47 lines (33 loc) · 2.34 KB

6.16.AVL平衡二叉搜索树

在我们继续之前,我们来看看执行这个新的平衡因子要求的结果。我们的主张是,通过确保树总是具有 -1,0或1 的平衡因子,我们可以获得更好的操作性能的关键操作。 让我们开始思考这种平衡条件如何改变最坏情况的树。有两种可能性,一个左重树和一个右重树。 如果我们考虑高度0,1,2和3的树,Figure 2 展示了在新规则下可能的最不平衡的左重树。

6.16.AVL平衡二叉搜索树.figure1

Figure 2

看树中节点的总数,我们看到对于高度为0的树,有1个节点,对于高度为1的树,有1 + 1 = 2个节点,对于高度为2的树 是1 + 1 + 2 = 4,对于高度为3的树,有1 + 2 + 4 = 7。 更一般地,我们看到的高度h(Nh) 的树中的节点数量的模式是:

$$ N_h = 1 + N_{h-1} + N_{h-2} $$

这种可能看起来很熟悉,因为它非常类似于斐波纳契序列。 给定树中节点的数量,我们可以使用这个事实来导出AVL树的高度的公式。 回想一下,对于斐波纳契数列,第i个斐波纳契数字由下式给出:

$$ \begin{aligned} F_0 = 0 \\ F_1 = 1 \\ F_i = F_{i-1} + F_{i-2} \text{ for all } i \ge 2 \end{aligned} $$

一个重要的数学结果是,随着斐波纳契数列越来越大,$$F_i/F_{i-1}$$ 的比率越来越接近黄金比率 $$\Phi = \frac{(1 +\sqrt{5})}{2}$$。 如果要查看上一个方程的导数,可以查阅数学文本。 我们将简单地使用该方程来近似 Fi,如 $$Fi =\Phi^i / 5$$。 如果我们利用这个近似,我们可以重写 Nh 的方程为:

$$ N_h = F_{h+2} - 1, h \ge 1 $$

通过用其黄金比例近似替换斐波那契参考,我们得到:

$$ N_h = \frac{\Phi^{h+2}}{\sqrt{5}} - 1 $$

如果我们重新排列这些项,并取两边的底数为2的对数,然后求解 h,我们得到以下推导:

$$ \begin{aligned} \log{N_h+1} = (H+2)\log{\Phi} - \frac{1}{2} \log{5} \\ h = \frac{\log{N_h+1} - 2 \log{\Phi} + \frac{1}{2} \log{5}}{\log{\Phi}} \\ h = 1.44 \log{N_h} \end{aligned} $$

这个推导告诉我们,在任何时候,我们的AVL树的高度等于树中节点数目的对数的常数(1.44)倍。 这是搜索我们的AVL树的好消息,因为它将搜索限制为 $$O(logN)$$