“把并查集用于上层算法时,先统计建集、合并与查找的总次数,再应用这一摊还分析界。定理中的 $m$ 已包含 $n$ 次建集,因而初始化的 $O(n)$ 时间也已计入。”
“对并查集(DSU),考虑 $n\ge1$ 及共 $m\ge n$ 次 Make Set、Union、Find,其中 $n$ 次 Make Set 创建 $n$ 个元素。若 Union 总把较…”
方法Method
施工中 · 内容逐步修订
Amortized analysis
对操作序列的总成本作上界,而非逐次最坏成本。
摊还分析对每一个合法操作序列
这里先固定允许的初态,例如空结构。
对
初态不统一或不是空结构时,
时,才能把差额吸收进总成本上界。对每条序列事后选择不同的
许多数据结构的操作成本高度不均:绝大多数操作便宜,偶尔一次重组极贵。逐次最坏界仍是合法上界,却可能过松,因为每次最坏状态无法连续发生。例如扩容一次后数组留下大量空位,下一次昂贵扩容必须等待许多追加。摊还分析利用的正是操作之间的这种约束。
记账法让便宜操作预付信用,势能法把尚可支付的工作量写成当前状态的函数。两者都必须保证不能透支:否则任意昂贵操作都能靠任意负余额伪装成便宜操作。信用与势只是证明中的量,实现无须真的维护一笔钱。整个论证对每一个合法序列成立,包括对抗性序列,不需要假定哪些操作更可能出现。
考虑容量满时翻倍的动态数组。从容量
例如追加到第 5 个元素时,搬迁发生在第 2、3、5 次追加,分别搬 1、2、4 个元素;加上五次新写入,总成本为 12。
若扩容每次只增加固定的一个位置,第
从全零开始递增一个固定宽度的二进制计数器,以翻转一位计一个单位,取
例如 0111 → 1000 实际翻转四位,势从
带 multipop 的栈也可按同一原则计费:每个元素入栈时预付它唯一一次出栈的费用。关键不是某次能弹出多少元素,而是同一个已入栈元素不能在这条操作历史里被弹出两次。
边界在于摊还界的“总量”性质。摊还
摊还分析是许多经典结论的语言:动态数组的常数追加、并查集近乎常数的合并与查询、伸展树的对数摊还访问界、Fibonacci 堆各类操作的摊还界,以及垃圾回收、扫描线里“每个元素至多进出一次”式的论证。全局重建把昂贵重构记到账上,自调整结构让访问序列决定结构形状,并查集摊还界则展示多种启发式怎样共同产生反 Ackermann 总界;这些页面各自证明具体账本,本页不替它们展开。最具一般性的势能法见势能法条目,选择势函数的本质,是为“未来必然发生的工作”找到一个可守恒的量。
字典与迁移的成本账本把一条历史的实际费用、对所有历史的维护摊还界、随机查找期望和单次最坏成本分开。可以先复算数值,再指出每一项推广需要哪条额外假设。
Cornell University, CS 3110 Lecture 20: Amortized Analysis, Fall 2010,“Aggregate Method”与“Potential (Physicist’s) Method”:动态表的几何扩容及总成本账本。
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,Ch. 16, aggregate, accounting, and potential methods。
Robert Sedgewick and Kevin Wayne, Algorithms, 4th ed., Addison-Wesley, 2011,§1.4, amortized cost in dynamic data structures。
正在载入交互图谱…
上位 / 更一般
暂未标注直接上位概念。
下位 / 直接特例