“活动边使用支持最坏对数时间更新的平衡搜索树,例如 AVL 树或红黑树。每次事件只做常数次插入、删除、左邻查询;顶点先经比较排序排列,排序及总维护时间为 $O(n\log n)$,空间 $O(…”
形式陈述
平衡搜索树(本页聚焦其二叉形态)是在二叉搜索树的有序不变量之上,再维护一条结构不变量的树族。用渐近记号表述,该不变量保证含
在常数时间比较与指针操作模型中,对数高度直接给出最坏
直觉
普通二叉搜索树的形状由插入顺序决定,有序到来的键会把它拉成一条链。平衡约束首先保证的是整条搜索路径足够短,并不要求每次比较都排除固定比例的节点:高度相近的两棵子树,节点数仍可能相差很大。
以 AVL 树为例,令
插入或删除只改变一条祖先路径上的高度或颜色信息,修复因而沿这条路径推进。一次旋转只涉及常数个链接,但整次更新可能要向上检查
例子与边界
向空树依次插入
前三次插入已能看见修复机制:
“平衡”一词必须点明保证类型。AVL 与红黑树给出最坏情形界;随机顺序插入下普通 BST 的期望高度是
推论与应用
平衡搜索树实现有序字典,支持查找、更新、前驱后继与范围查询。扫描线还可用它维护与当前横截线相交对象的动态次序,使“找几何相邻对象”落到前驱、后继与局部更新。若节点再维护子树摘要,旋转时必须同步重算;这套通用方法由搜索树增强说明,维护子树大小的具体接口则形成顺序统计树。增强字段不自动继承复杂度,只有字段能由孩子在
若需保留旧版本,可用路径复制共享未改子树,但这属于持久化数据结构的额外设计。树高界只控制一次更新涉及多少层,还须检查旋转、父指针与共享节点能否兼容,并分别计算复制节点数和总空间。
参考资料
-
Pat Morin,Open Data Structures,2013,Chapter 9: Red-Black Trees:平衡不变量与对数高度。
-
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,Parts I–VI。
-
Robert E. Tarjan, Data Structures and Network Algorithms, SIAM, 1983,Chs. 1–6。