将优先级队列存储为双链表的时间复杂度

时间:2018-12-02 02:01:20

标签: big-o priority-queue doubly-linked-list

如果我想将优先级队列存储为经排序的双向链接列表,那么以下时间复杂度是否正确?

  • 插入新条目:O(n)

      

    因为我必须遍历链表的每个元素,才能找到应将其插入的位置,以便始终对我的列表进行排序。

  • 获取具有最高优先级的元素:O(1)

      

    我可以按优先级的升/降顺序对列表进行排序,并保存列表的首尾。如果是这样,则获得最大优先级的元素应该是O(1),因为我们知道它的位置。

  • 删除具有最大优先级的元素:O(1)

      

    与上述逻辑相同

1 个答案:

答案 0 :(得分:1)

除了事实之外,使用链接列表的优先级队列的想法效率不高(您可以编写最差的运行时复杂度日志(n()),数字是正确的。)

尽管如此,您可以在这里进行描述: “插入新条目:O(n)”

从技术上讲,插入为O(1),找到正确的位置就是需要O(n)的原因。因此,基本上,当您添加7个相同的项目时,它不会花费您7倍的时间,因为您只需要查找一次。