跳转至

6.17. AVL树性能

6.17. AVL Tree Performance

在我们继续之前,让我们看看强制执行这个新平衡因子要求的结果。我们的观点是,通过确保树始终保持平衡因子在 -1、0 或 1 范围内,我们可以获得更好的 Big-O 性能。让我们首先考虑这种平衡条件如何改变最坏情况的树。我们需要考虑两种可能性:左重树和右重树。如果我们考虑高度为 0、1、2 和 3 的树,Figure 2 展示了在新规则下最不平衡的左重树。

Image title
Figure 2: 最坏情况下的左重 AVL 树

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

Nh=1+Nh1+Nh2

这个递推公式可能对你来说很熟悉,因为它与斐波那契数列非常相似。我们可以利用这个事实推导出一个公式,用于根据树中节点的数量来计算 AVL 树的高度。回忆一下,对于斐波那契数列,第 i 个斐波那契数由以下公式给出:

F0=0F1=1Fi=Fi1+Fi2 for all i2

一个重要的数学结果是,当斐波那契数变得越来越大时,Fi/Fi1 的比例越来越接近黄金比例 Φ,其定义为 Φ=1+52。如果你想查看前述方程的推导,可以参考数学教材。我们将简单地使用这个方程来近似 FiFi=Φi/5。如果我们利用这个近似值,可以将 Nh 的方程重写为:

Nh=Fh+31,h1

通过将斐波那契数列的引用替换为其黄金比例近似值,我们得到:

Nh=Φh+251

如果我们重新排列项,对两边取对数,并解出 h,我们得到以下推导:

logNh+1=(h+2)logΦ12log5h=log(Nh+1)2logΦ+12log5logΦh=1.44logNh

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

Before we proceed any further let's look at the result of enforcing this new balance factor requirement. Our claim is that by ensuring that a tree always has a balance factor of -1, 0, or 1 we can get better Big-O performance of key operations. Let us start by thinking about how this balance condition changes the worst-case tree. There are two possibilities to consider, a left-heavy tree and a right-heavy tree. If we consider trees of heights 0, 1, 2, and 3, Figure 2 illustrates the most unbalanced left-heavy tree possible under the new rules.

Image title
Figure 2: Worst-Case Left-Heavy AVL Trees

Looking at the total number of nodes in the tree we see that for a tree of height 0 there is 1 node, for a tree of height 1 there is 1+1=2 nodes, for a tree of height 2 there are 1+1+2=4, and for a tree of height 3 there are 1+2+4=7. More generally the pattern we see for the number of nodes in a tree of height h (Nh) is:

Nh=1+Nh1+Nh2

This recurrence may look familiar to you because it is very similar to the Fibonacci sequence. We can use this fact to derive a formula for the height of an AVL tree given the number of nodes in the tree. Recall that for the Fibonacci sequence the ith Fibonacci number is given by:

Misplaced &

An important mathematical result is that as the numbers of the Fibonacci sequence get larger and larger the ratio of Fi/Fi1 becomes closer and closer to approximating the golden ratio Φ which is defined as Φ=1+52. You can consult a math text if you want to see a derivation of the previous equation. We will simply use this equation to approximate Fi as Fi=Φi/5. If we make use of this approximation we can rewrite the equation for Nh as:

Nh=Fh+31,h1

By replacing the Fibonacci reference with its golden ratio approximation we get:

Nh=Φh+251

If we rearrange the terms, take the base 2 log of both sides, and then solve for h, we get the following derivation:

Misplaced &

This derivation shows us that at any time the height of our AVL tree is equal to a constant (1.44) times the log of the number of nodes in the tree. This is great news for searching our AVL tree because it limits the search to O(logn).


最后更新: 2024年9月13日
创建日期: 2024年9月9日