我正在处理我在网上找到的教程表,并遇到了一个我无法弄清楚如何解决的问题。
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)。有人可以帮忙吗?
答案 0 :(得分:1)
我认为你能做的是,
首先证明init(s),pop(S)和destroy()确实需要O(1)时间(而且他们确实需要。)
然后对于push(S,x)函数来说,假设将复杂性增加到O(n),推论push()将以O(1)时间开始并继续给出相同的复杂度,直到除非数字更小比推顶的堆栈顶部。可以计算出这种情况发生的概率以支持你的论点。
(如果不正确则做评论)