Skip to content

势能法

Potential method

用数据结构状态势能的变化修正实际成本以界定均摊成本。

条目类型
原则

形式陈述

势能法为数据结构状态 Di 选取非负势函数 Φ(Di),定义第 i 次操作的摊还成本 c^i=ci+Φ(Di)Φ(Di1)。求和后势能项望远镜消去:ci=c^iΦ(Dm)+Φ(D0)c^i+Φ(D0)。若令初始势为零,则摊还总成本上界直接控制真实总成本。势函数可看作过去便宜操作预存的“信用”。

直觉

势能法给数据结构状态赋一个非负“储蓄账户” Φ,把便宜操作积累的结构复杂度、即尚未支付的未来工作量,预付给昂贵操作,使每步“真实成本加势能变化”保持平稳。摊还成本定义为实际成本加势能变化;一串操作中间项望远镜消去,只剩初末势差。势函数不是物理能量,选择标准是让每类操作的摊还成本容易统一上界。

势能变化平滑实际操作成本
例子与边界

动态数组可令势与长度、容量的差额相关,让普通追加积累的势支付下一次整体复制;具体扩缩阈值和常数摊还界集中在对应条目。二进制计数器可令势为 1 的位数:翻转许多 10 的昂贵递增同时大幅降低势。栈的 multipop(k) 则取势为当前元素数,弹出每个元素的实际成本由势能下降抵消。

若初始势能不为零或最终势能可能为负,必须在总成本不等式中保留边界项;随意挑一个会剧烈负降的函数可能得到虚假的低摊还成本。摊还界是任意操作序列上的确定总界,不等于随机输入期望。

推论与应用

势能法建立在摊还分析与状态上的势函数之上。先让势函数表达需要长期维护的不变量,再逐类核对操作如何改变它,便能系统地设计证明并界定任意长操作序列的总成本,而不是只解释某一个昂贵步骤。

伸展树把辅助树形状编码进势,Fibonacci 堆用根数与标记节点数为延迟合并和级联切断记账;两页分别给出具体势函数,本页不重复其旋转或堆操作。栈的批量弹出、动态数组和并查集也使用同一望远镜机制,会计法则可视为把总势拆成存放在各对象上的 credits。这样的摊还结论控制操作序列总成本,却不承诺每次操作的尾延迟。

算法分析中的“势”还有别的量词。竞争分析常令势比较在线算法与离线最优的两个状态,用单步不等式累积竞争比;乘法权重更新Hedge跟踪总权重或对数配分函数,以界定累计 regret。它们都利用势的增量,却不把真实数据结构操作成本重新分摊,不能因此统称为摊还时间复杂度。

参考资料
  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein, Introduction to Algorithms, 4th ed., MIT Press, 2022,Parts I–VI。
  • Rajeev Motwani and Prabhakar Raghavan, Randomized Algorithms, Cambridge University Press, 1995,Chs. 1–7。
关系图谱11 个相邻概念 · 3 类关系

拖动节点调整位置。

显示关系

显示:依赖

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

上位 / 更一般

下位 / 直接特例

暂未标注直接特例。

类型化关系