摊还分析
摊还分析(Amortized analysis)通过对一系列最坏情况操作的平均每次操作成本进行界定,表明当成本分摊到许多廉价操作中时,偶尔昂贵的操作也可以变得廉价。
用 PaperMind 寻找选题即将推出Find papers & topics
Tools & resources
Learn & explore
视频即将推出
Definition
摊还分析是一种用于界定数据结构上一系列操作的总成本,并将其除以操作次数的方法,从而得出每次操作的摊还成本。即使单个操作的成本差异很大,这种摊还成本在整个序列的最坏情况下也成立。
Scope
本主题涵盖了摊还分析的三种标准技术——聚合分析法(aggregate method)、核算法(accounting (banker's) method)和势能法(potential method)——以及它们在操作成本各异的数据结构中的应用,例如动态数组、二进制计数器、伸展树(splay trees)和不相交集(union-find)结构。它区分了摊还成本与平均情况成本以及每次操作的最坏情况成本。
Core questions
- 摊还成本与每次操作的最坏情况成本和平均情况成本有何不同?
- 聚合分析法如何界定操作序列的总成本?
- 核算法如何分配信用点(credits)以支付后续昂贵操作的费用?
- 势能法如何利用势函数(potential function)来平滑成本?
- 哪些数据结构依赖于摊还保证而非每次操作的界限?
Key concepts
- 摊还成本
- 聚合分析法
- 核算法(银行家法)
- 势能法
- 势函数
- 动态数组加倍
- 二进制计数器增量
- 带路径压缩的并查集
Key theories
- 势能法
- 势能法为数据结构的状态分配一个非负势能;操作的摊还成本是其实际成本加上势能的变化,因此廉价操作会积累势能,用于支付后续昂贵操作的费用。
- 核算法(银行家法)
- 核算法对某些操作收取高于其实际成本的费用,将盈余作为信用点存储在数据结构元素上,以支付未来昂贵操作的费用,确保信用点永不为负。
Clinical relevance
摊还分析解释了为什么许多广泛使用的数据结构在实践中是高效的,尽管偶尔会有昂贵的操作:动态数组(可变大小列表)、进行再散列的哈希表、用于连通性和最小生成树算法的并查集(union-find),以及伸展树(splay trees)等自调整结构都依赖于摊还保证而非每次操作的保证。
History
摊还分析的术语和系统框架由Robert Tarjan于1985年提出,借鉴了早期的特设论证。该技术对于分析Tarjan和Sleator在1980年代开发的自调整数据结构(伸展树、斐波那契堆)至关重要。
Key figures
- Robert Tarjan
- Daniel Sleator
Related topics
Seminal works
- tarjan1985amortized
- cormen2009
Frequently asked questions
- 摊还成本与平均情况成本相同吗?
- 不。平均情况成本是基于输入概率分布的期望值,可能因不走运的输入而失效。摊还成本是对一系列操作的最坏情况保证,不假设随机性:任何此类序列的总成本都是有界的,因此每次操作的平均值始终成立。
- 为什么动态数组的追加操作在调整大小时是O(n)的情况下,摊还成本却是O(1)?
- 因为数组通常会将其容量加倍,所以相对于追加操作,调整大小的操作很少发生,并且在一系列n次追加操作中,总的复制工作量与n成比例。将这些工作量分摊到所有追加操作中,即使单次调整大小是线性的,也能得到常数级的摊还成本。