【问题标题】:Dequeue a Priority Queue出列优先级队列
【发布时间】:2011-06-14 13:19:47
【问题描述】:

从优先级队列中出列的元素遵循以下规则:

优先级[i] >= 优先级[i - 1]

但是如果许多元素具有相同的优先级,它们应该以什么顺序出队? 首先入队的元素应该先出队还是无关紧要? 我知道这很可能取决于实现和使用,但我正在寻找教科书优先级队列的答案。

【问题讨论】:

    标签: priority-queue


    【解决方案1】:

    队列绝对应该是先进先出的,这就是它的本质。优先级队列稍微改变了队列方面,它允许较高优先级的项目优先通过较低的项目,但这不应该改变队列的基本性质。

    我见过自称是队列但不遵循 FIFO 规则的实现。我更喜欢它们的不同名称以更好地指定行为(例如优先包)。

    在一个队列中(即使是一个优先级),具有相同优先级的项目应该按照它们插入的顺序被提取。

    换句话说,插入A2 B2 C2 D1(数字优先)应该导致处理为D1 A2 B2 C2

    【讨论】:

    • 谢谢。这正是我一直以来的想法。我有点困惑,因为我在浏览网络时发现的大多数 C# 实现并不关心元素的返回顺序,只要优先级规则正确。
    • 我忘了,优先级队列的堆实现是否默认具有这种性质?
    • JAB:不,我很确定他们没有。
    • 使用 HeapBased PriorityQueue 通常不能保证相同优先级的对象的插入顺序。
    【解决方案2】:

    没有教科书的答案。在没有任何其他信息的情况下,它可以作为直接 FIFO(在相同优先级的项目内)、未定义或其他行为来完成。

    其他实现为入队提供了指定额外信息的能力,这些信息可以在出队期间用于打破联系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-20
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      • 2022-01-07
      • 2016-04-13
      • 1970-01-01
      相关资源
      最近更新 更多