“MTF 是自调整数据结构和竞争分析的早期范例。证明中的势同时依赖在线算法与比较算法,展示了势能法不仅能分析单个数据结构的摊还操作,也能追踪两个动态状态之间的距离。”
形式陈述 ​
势能法为数据结构状态
直觉
势能法给数据结构状态赋一个非负“储蓄账户”
例子与边界
动态数组可令势与长度、容量的差额相关,让普通追加积累的势支付下一次整体复制;具体扩缩阈值和常数摊还界集中在对应条目。二进制计数器可令势为 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。