【发布时间】:2020-09-29 01:22:27
【问题描述】:
考虑一个名为 MaxQueue,Q 的队列的变体,它具有以下操作:
dequeue(Q):移除并返回Q的第一个元素
enqueue(Q, s):将整数 s 追加到 Q 的末尾
maximum(Q):返回Q中最大的整数(但不删除)
MaxQueue 数据结构还包含一个称为“后缀最大值”的序列。如果 x 之后出现的所有元素的值都较小,则元素 x 是序列中的“后缀最大值”。
MaxQueue 使用单链表来表示序列,并带有指向队列前后的附加指针,并具有后缀最大值的双向链表(它们的排列顺序与它们在队列中的顺序相同)序列)。
有关示例,请参见此链接:https://ibb.co/f2KBtHN
问题:证明这三个操作的摊销时间复杂度都是O(1)。 (根据序列中后缀最大值的个数定义一个势函数。
我真的不知道如何开始这个问题。我知道潜在的函数往往是 an + bm 的形式,其中 a 和 b 是常数,n 和 m 是您根据问题设置的变量。提示建议基于序列中后缀最大值的数量,我认为这些数量应该反映在这些变量中,但我不确定如何。
【问题讨论】:
标签: algorithm data-structures queue time-complexity amortized-analysis