【发布时间】:2017-04-11 20:05:35
【问题描述】:
如何优先队列队列数据结构。由于它不遵循 FIFO,所以不应该将其命名为 Priority Array 或 Priority Linked LIst 主要是因为 Priority Queues 不遵循 FIFO 队列之类的方式
【问题讨论】:
标签: data-structures queue priority-queue
如何优先队列队列数据结构。由于它不遵循 FIFO,所以不应该将其命名为 Priority Array 或 Priority Linked LIst 主要是因为 Priority Queues 不遵循 FIFO 队列之类的方式
【问题讨论】:
标签: data-structures queue priority-queue
在优先级队列中,优先级高的元素先于低优先级的元素提供服务。 '如果两个元素具有相同的优先级,则按照它们在队列中的顺序提供服务' 我想这会回答你的问题
【讨论】:
如果您查看大多数使用的实现,优先级队列本质上是堆 - 它们根据程序员定义的优先级以特定方式排列 - 在一个简单的示例中,整数的升序或降序。
将优先级队列想象成一个队列,它不是根据添加元素的时间来检索元素,而是根据它们相互比较的方式来检索它们。在您的教科书示例中,这种比较可以简单地按升序或降序排列。您可以通过另一个 StackOverflow 答案的类比来理解 ADT:
你正在经营一家医院,病人进来了。只有一个 工作人员的医生。第一个男人走进来——他马上就上菜了。 接下来,一个感冒的人进来并需要帮助。你加他 到队列中,他排队等候医生有空。 接着,一个头上插着斧头的人从门里走了进来。他是 分配更高的优先级,因为他是更高的医疗责任。 所以感冒的人被排成一排。接下来有人来了 有呼吸问题。所以,再一次,感冒的人是 优先级下降。这在现实世界中称为trigaing - 但在这种情况下,它是一条医疗线。
在代码中实现这一点将使用优先级队列和工作器 线程(医生)对消耗品/工作单元执行工作 (患者)。
在实际场景中,您可能有等待 CPU 处理的进程,而不是患者。
【讨论】:
在队列中,自然 根据元素在一行中等待的时间给出的排序可以被认为是最公平的。当您排队等候时,先到先得。
然而,有时,某些元素有一些特别之处 可能会建议他们应该比等待更长时间的其他人更快地送达。例如,我们并不总是按照收到邮件的顺序阅读电子邮件,但通常 你跳过时事通讯或朋友的“有趣”笑话,先阅读与工作相关的消息。
同样,当您设计应用或测试应用时,如果存在一些错误,则会优先处理这些错误,并且团队会根据错误的严重程度处理这些错误。首先,新的错误被发现所有 时间,因此新项目将添加到列表中。假设发现了一个令人讨厌的身份验证错误—— 你需要在昨天之前解决它!此外,错误的优先级可以改变 时间。例如,你的 CEO 可能决定你要追求市场份额 这主要是使用浏览器 X,而且下周五你将推出一个大功能,所以你真的需要在几天内解决底部的那个错误。
当我们需要从动态变化的列表(例如要在 CPU 上运行的任务列表)中按一定顺序消费元素时,优先级队列特别有用,这样我们随时都可以获取下一个元素(根据到某个标准),将其从列表中删除,并且(通常)不再担心修复任何问题 其他元素。
这就是优先级队列背后的理念:它们的行为类似于普通的普通队列,只是队列的前端是根据某种优先级动态确定的。引入优先级给实现带来的差异是巨大的,足以值得一种特殊的数据结构。
【讨论】: