有序堆栈的摊销分析

时间:2014-09-11 06:16:27

标签: algorithm complexity-theory

我正在处理我在网上找到的教程表,并遇到了一个我无法弄清楚如何解决的问题。

http://www.bowdoin.edu/~ltoma/teaching/cs231/fall08/Problems/amortized.pdf

有序堆栈S是一个堆栈,其中元素按递增顺序出现。它支持以下操作:

Init(S):创建一个空的有序堆栈。

Pop(S):删除并返回有序堆栈中的顶部元素。

推(S,x):在有序堆栈的顶部插入x并重新建立增量 通过重复删除x下面的元素直到x为 堆栈中最大的元素。

Destroy(S):删除有序堆栈上的所有元素。

认为所有操作的摊销运行时间为O(1)。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

我认为你能做的是,

首先证明init(s),pop(S)和destroy()确实需要O(1)时间(而且他们确实需要。)

然后对于push(S,x)函数来说,假设将复杂性增加到O(n),推论push()将以O(1)时间开始并继续给出相同的复杂度,直到除非数字更小比推顶的堆栈顶部。可以计算出这种情况发生的概率以支持你的论点。

(如果不正确则做评论)