7.3 平衡二叉搜索树
树高与性能
-
树高与性能
若不能有效控制树高,则就实际的性能而言,较之此前的向量和列表,二叉搜索树将无法体现出明显优势。
-
随机生成
n个互异关键码随机生成一颗二叉搜索树。(randomly generated)
在随机意义下,二叉搜索树的平均高度为Θ(logn)。
-
随机组成
另一随机策略是,假定n个互异节点同时给定,然后在遵守顺序性的前提下,随机确定它们之间的拓扑联接。如此,称二叉搜索树由这组节点“随机组成”(randomly composed)。
平均查找长度为Θ\sqrt{n}
-
比较
为例,排列(2, 1, 3)与(2, 3, 1)生成的,实际上就是同一棵二叉搜索树。而在按照前一口径估计平均树高时,这棵树被统计了两次。实际上一般而言,越是平衡的树,被统计的次数亦越多。从这个角度讲,前一种平均的方式,在无形中高估了二叉搜索树的平均性能。因此相对而言,按照后一口径所得的估计值更加可信。
-
树高与平均树高
实际中,理想的随机不常见,一组关键码往往会按照(接近)单调次序出现,因此频繁出现极高的搜索树也不奇怪。
理想平衡与适度平衡
-
理想平衡
-
适度平衡
在渐进意义下适当放松标准之后的平衡性,称作适度平衡。
幸运的是,适度平衡的标准的确存在。比如,若将树高限制为“渐进地不超过O(logn)”,则下节将要介绍的AVL树,以及下一章将要介绍的伸展树、红黑树、kd-树等,都属于适度平衡这些变种,因此也都可归入平衡二叉搜索树(balanced binary search tree, BBST)之列。
等价变换:
-
等价二叉搜索树
若两颗二叉搜索树的中序遍历序列相同,则称它们彼此等价;反之亦然。
特点:上下可变,左右不乱
-
局部性
平衡二叉搜索树的适度平衡性,都是通过对树中每一局部增加某种限制条件来保证的。比如,在红黑树中,从树根到叶节点的通路,总是包含一样多的黑节点;在AVL树中,兄弟节点的高度相差不过1。事实上,这些限制条件设定得非常精妙,除了适度平衡性,还具有如下局部性:
1)经过单次动态修改操作后,至多只有O(logn)处局部不再满足限制条件
2)总可在O(logn)时间内,使这O(logn)处局部(以至全树)重新满足限制条件
这就意味着:刚刚失去平衡的二叉搜索树,必然可以迅速转换为一棵等价的平衡二叉搜索树。等价二叉搜索树之间的上述转换过程,也称作等价变换。
那么,此类局部性的失衡,具体地可以如何修复?如何保证修复的速度?
旋转调整
(最基本的修复手段,就是通过围绕特定节点的旋转,实现等价前提下的局部拓扑调整。)
-
zig和zag
-
效率与效果
zig和zag旋转均属局部操作,仅涉及常数个节点及其之间的联接关系,故均可在常数时间内完成。正因如此,在后面实现各种二叉搜索树平衡化算法时,它们都是支撑性的基本操作。
就与树相关的指标而言,经一次zig或zag旋转之后,节点v的深度加一,节点c的深度减一;这一局部子树(乃至全树)的高度可能发生变化,但上、下幅度均不超过一层。
“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 14 天,点击查看活动详情”