“摊还分析是许多经典结论的语言:动态数组的常数追加、并查集近乎常数的合并与查询、伸展树的对数摊还访问界、Fibonacci 堆各类操作的摊还界,以及垃圾回收、扫描线里“每个元素至多进出一次”式…”
形式陈述
定理与约定
对并查集(DSU),考虑
常简写为
证明骨架
rank 沿父指针严格增加;某个根达到 rank
逆 Ackermann 分析把父子秩关系按增长极快的阈值划成层级,并将 Find 的工作分摊到操作和节点。压缩让节点改指秩更大的祖先,可推进相应的层级或层内进度;每次 Find 的层级边界访问单独计入该操作,其余访问消耗节点的层内额度。额度依赖节点的秩,再结合各秩节点数的几何衰减求和,得到总访问界。总界同时利用了每次操作经过的层级数和各秩节点能承担的累计费用。
直觉
组合为何必要
只用按秩合并而不压缩,树高最坏
图中数字是查找路径上的 rank,其他节点省略;分层只表示分析思路,不是完整的 Ackermann 阈值表。底部的界是每操作的摊还界,节点累计费用还要结合其 rank 及各秩节点数求和。
例子与边界
Rollback 边界
保证类型与下界
总界对任意操作序列确定成立,不是随机输入期望;除以
在 pointer-machine/链接模型的相应操作集合中,逆 Ackermann 量级有匹配下界,说明“近似常数”不是证明松弛。若允许更强批处理、不同操作或离线知识,模型改变后需重新比较。
推论与应用
把并查集用于上层算法时,先统计建集、合并与查找的总次数,再应用这一摊还分析界。定理中的
父指针和 rank 数组共占
参考资料
- Robert Tarjan, Efficiency of a Good But Not Linear Set Union Algorithm, JACM, 1975.
- Robert Tarjan, Jan van Leeuwen, Worst-Case Analysis of Set Union Algorithms, JACM, 1984.
- Jeff Erickson, Disjoint Sets, 2013,§16.3–16.5:秩计数与路径压缩分析。