见知乎专栏https://zhuanlan.zhihu.com/p/87355970
摊还分析用来评价某个数据结构的一系列操作的平均代价,有时可能某个操作的代价特别高,但总体上来看也并非那么糟糕,可以形象的理解为把高代价的操作“分摊”到其他操作上去了,要求的就是均摊后的平均代价。
摊还分析有三种常用的技术:聚合分析,核算法,势能法。
1.聚合分析
利用聚合分析,我们可以证明对于任意的 [公式] ,一个包含 [公式] 个操作的序列花费的总时间为 [公式] 。因此,在最坏情况下,每个操作的平均代价,或称为摊还代价为 [公式] ,即每个操作的时间复杂度为 [公式] 。
下面讲两个简单的例子来说明。
栈操作
考虑一个空栈 [公式] ,有三种操作:
PUSH(S,x):将对象x压入栈S中。
POP(S):将栈S的栈顶对象弹出,并返回该对象。对空栈调用POP会产生一个错误。
MULTIPOP(S,k):循环调用POP(S),弹出栈顶的k个元素(k<n,n为栈的最大容量)。
其中,第三种操作的伪代码如下:
MULTIPOP(S,k)
while not STACK-EMPTY(S) and k>0
POP(S)
k=k-1
那么,现在需要分析:执行n次栈操作最坏情况下的时间复杂度是多少?
分析:
单独看三个操作,前两个都是 [公式] 的,第三个是 [公式] 的。这样直观的看,最