【问题标题】:Create a potential function for an abstract queue data structure to show constant amortized-time complexity为抽象队列数据结构创建潜在函数以显示恒定摊销时间复杂度
【发布时间】:2020-09-29 01:22:27
【问题描述】:

考虑一个名为 MaxQueue,Q 的队列的变体,它具有以下操作:

dequeue(Q):移除并返回Q的第一个元素

enqueue(Q, s):将整数 s 追加到 Q 的末尾

ma​​ximum(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


    【解决方案1】:

    潜在函数是根据数据结构的状态计算出来的函数,该函数从有界开始且永远不会变为负数。

    对于任何此类函数,对于每个操作,对于任何常数 K,amortized_cost = O(real_cost + K*change_in_potential)

    之所以有效,是因为势函数不能为负数,其初始值的界限限制了势能所有变化之和的负数。最终,在许多操作中,实际成本将占主导地位。

    因此,如果您想证明所有操作的 O(1) 界限,您的潜在功能必须:

    1. 在成本不变的操作过程中最多增加一个不变的数量;和
    2. 在成本 c > O(1) 的任何操作期​​间减少 Ω(c)。

    因此,请查看您的操作,并找到状态的某些函数,该函数不能为负数,在恒定时间之外随着您所做的每个工作单元减少,否则在每个操作中仅以恒定量增加。

    我想您会发现,您所做的每个“额外工作”单元都会减少后缀最大值序列的长度,并且每次操作只能增加一项。因此后缀最大值序列的长度是一个可行的势函数。

    【讨论】:

      猜你喜欢
      • 2010-09-17
      • 1970-01-01
      • 2016-10-14
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      相关资源
      最近更新 更多