【发布时间】:2011-06-14 13:19:47
【问题描述】:
从优先级队列中出列的元素遵循以下规则:
优先级[i] >= 优先级[i - 1]
但是如果许多元素具有相同的优先级,它们应该以什么顺序出队? 首先入队的元素应该先出队还是无关紧要? 我知道这很可能取决于实现和使用,但我正在寻找教科书优先级队列的答案。
【问题讨论】:
标签: priority-queue
从优先级队列中出列的元素遵循以下规则:
优先级[i] >= 优先级[i - 1]
但是如果许多元素具有相同的优先级,它们应该以什么顺序出队? 首先入队的元素应该先出队还是无关紧要? 我知道这很可能取决于实现和使用,但我正在寻找教科书优先级队列的答案。
【问题讨论】:
标签: priority-queue
队列绝对应该是先进先出的,这就是它的本质。优先级队列稍微改变了队列方面,它允许较高优先级的项目优先通过较低的项目,但这不应该改变队列的基本性质。
我见过自称是队列但不遵循 FIFO 规则的实现。我更喜欢它们的不同名称以更好地指定行为(例如优先包)。
在一个队列中(即使是一个优先级),具有相同优先级的项目应该按照它们插入的顺序被提取。
换句话说,插入A2 B2 C2 D1(数字优先)应该导致处理为D1 A2 B2 C2。
【讨论】:
没有教科书的答案。在没有任何其他信息的情况下,它可以作为直接 FIFO(在相同优先级的项目内)、未定义或其他行为来完成。
其他实现为入队提供了指定额外信息的能力,这些信息可以在出队期间用于打破联系。
【讨论】: