“因此修改一条 represented edge 只需沿 $O(\log n)$ 个祖先重算摘要,正是局部增强在 cluster 层级上的版本。”
局部条件 ​
若每个节点满足
且
摘要若位于幺半群
真例与反例 ​
维护
节点深度不是局部增强:一次根旋转改变整棵子树内许多节点的深度,更新常数节点无法恢复。依赖全局中序编号的字段也须改写为相对可组合量。
正确性清单 ​
须分别验证空孩子的单位元、重复键约定、插入路径、每种旋转、删除替换与查询循环不变量。查询公式正确不代表维护过程正确,旋转次数和报告型查询的输出量也要计入总成本。
可执行检查可在每次修改后递归重算一份慢摘要,与节点缓存值逐项比较;它适合测试维护代码,但生产算法的复杂度仍来自局部更新证明。
插入、旋转与删除的维护次序 ​
插入叶
删除有两种身份:逻辑上删除键
顺序统计实例全程 ​
树中序键为
插入 6 后,路径
可增强与不可增强的判据 ​
子树和、最大值、哈希摘要由孩子常数合并,符合定理;绝对深度、全树中节点的全局排名依祖先上下文,一次旋转可改变线性多个值。可以改存相对偏移或使用 lazy tag,但那是新不变量,不能说原字段天然局部。
参考资料
- Cormen et al., Introduction to Algorithms, 4th ed., Ch. 17.
- Robert Tarjan, Data Structures and Network Algorithms, SIAM, 1983.