Skip to content

摊还分析

Amortized analysis

对操作序列的总成本作上界,而非逐次最坏成本。

条目类型
原则

形式陈述

摊还分析对每一个合法操作序列 σ=(o1,,on) 的实际总成本给出确定性上界。若为各步指定摊还成本 c^i(σ),典型保证是

σ,i=1nci(σ)i=1nc^i(σ)+K,

其中 K 是对全部合法操作序列统一成立的常数,既不依赖序列长度,也不能随初态或序列内容任意变化。它不假设操作分布,也不对随机性取期望。聚合法直接估计总成本,记账法让便宜操作预付信用,势能法则为数据结构状态 Di 选取势函数 Φ,定义

c^i=ci+Φ(Di)Φ(Di1),

i 求和后中间项相消,得

i=1nci=i=1nc^iΦ(Dn)+Φ(D0).

初态不统一或不是空结构时,Φ(D0)Φ(Dn) 必须保留。若已证明 Φ(Dn)Φ(D0),该项非正;更一般地,只有存在统一常数 K 使

supσ(Φ(D0)Φ(Dn))K

时,才能把差额吸收进总成本上界。对每条序列事后选择不同的 K 不构成摊还保证。

直觉

许多数据结构的操作成本高度不均:绝大多数操作便宜,偶尔一次重组极贵。逐次按最坏情形计费,会把整段序列的估计抬到不真实的量级;摊还分析的观点是让便宜操作“预存”一点成本——记账法里是显式的信用,势能法里是状态中蓄积的势——昂贵操作发生时恰好由存款支付。势能的物理类比颇为贴切:结构越“紧绷”(如数组越接近装满),势越高,重组释放势能;但类比在一处失效——信用与势纯属分析中的记账,数据结构里并不真的存着这笔钱,运行时也无须任何额外维护。它与平均情形分析的区别是根本性的:摊还界对每一个操作序列都成立,包括对抗性构造的序列。

势能法的数值守恒
例子与边界

考虑容量满时翻倍的动态数组。从容量 1 开始连续追加 n 个元素,新元素本身共写入 n 次,各次扩容搬迁的元素数至多为

1+2+4++2log2n<2n.

因此任意这样的前缀总成本小于 3n,尽管某次追加可能单独搬迁 Θ(n) 个元素,每次追加的摊还成本仍为 O(1)。二进制计数器可取 Φ1 位数;带 multipop可让每个元素入栈时预付唯一一次出栈费用。

边界在于摊还界的“总量”性质。摊还 O(1) 不承诺任何单次操作快——动态数组的某次追加就是 Θ(n);它也不是概率语句,不提供尾界。需要逐操作延迟时,去摊还化会把一次大工作拆到后续操作,但还必须证明后台预算追得上新增工作。若允许的初态使势能欠账没有统一下界,常数 K 就不存在。持久化结构还能从同一旧版本多次分叉,单线版本链上存下的“信用”可能被重复使用,原摊还证明必须重新审计。

推论与应用

摊还分析是许多经典结论的语言:动态数组的常数追加、并查集近乎常数的合并与查询、伸展树与 Fibonacci 堆的对数摊还界,以及垃圾回收、扫描线里“每个元素至多进出一次”式的论证。全局重建把昂贵重构记到账上,自调整结构让访问序列决定结构形状,并查集摊还界则展示多种启发式怎样共同产生反 Ackermann 总界;这些页面各自证明具体账本,本页不替它们展开。最具一般性的势能法见势能法条目,选择势函数的本质,是为“未来必然发生的工作”找到一个可守恒的量。

参考资料
  • 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。
关系图谱18 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
分类位置

上位 / 更一般

暂未标注直接上位概念。

下位 / 直接特例

类型化关系