摊还分析
概述
摊还分析(Amortized Analysis)是一种分析数据结构上操作序列总代价的技术,将总代价平均分摊到每个操作上,得到单个操作的摊还代价(amortized cost)。与平均情况分析不同,摊还分析不涉及概率假设,能够保证在最坏情况下每个操作的平均性能。
定义
摊还分析
给定一个数据结构 及其上的 个操作序列,设第 个操作的实际代价为 ,则 个操作的总代价为 。摊还分析的目标是证明: 其中 为第 个操作的摊还代价。当所有 均为常数或某个简单函数时,我们就得到了每个操作的摊还上界。
核心性质
- 不依赖概率:摊还分析不假设操作的输入分布,不涉及概率模型。它分析的是最坏情况下的操作序列,而非平均输入。
- 序列整体保证:摊还分析保证的是操作序列的总代价上界,而非单个操作的上界。序列中某些操作的代价可能很高,但被其他低代价操作”补贴”了。
- 三种经典方法:
- 与平均情况分析的本质区别:平均情况分析需要假设输入的概率分布,且结论依赖于分布假设的正确性;摊还分析无需任何概率假设,结论对任意操作序列都成立。
- 与竞争分析的关系:摊还分析是竞争分析(competitive analysis)在在线算法中的特例,常用于评估在线算法相对于最优离线算法的性能比。
章节扩展
| 方法 | 核心思想 | 适用特点 |
|---|---|---|
| 16.1 聚合分析 | 求总代价 ,均摊为 | 所有操作同类型或同代价 |
| 16.2 记账方法 | 超额收费存为信用,不足时消费信用 | 需要区分不同操作的代价 |
| 16.3 势能方法 | 定义势能函数 ,用势能变化调节实际代价 | 需要全局视角,最灵活 |
典型应用场景
- Splay Tree:单次操作最坏 ,但摊还
- Union-Find(并查集):使用路径压缩和按秩合并,摊还
- 斐波那契堆:Decrease-Key 摊还 ,Delete 摊还
- 动态数组(16.4 动态表):插入摊还 ,尽管偶尔需要 的扩容操作