【问题标题】:Priority Queues VS Queues优先队列 VS 队列
【发布时间】:2017-04-11 20:05:35
【问题描述】:

如何优先队列队列数据结构。由于它不遵循 FIFO,所以不应该将其命名为 Priority Array 或 Priority Linked LIst 主要是因为 Priority Queues 不遵循 FIFO 队列之类的方式

【问题讨论】:

    标签: data-structures queue priority-queue


    【解决方案1】:

    在优先级队列中,优先级高的元素先于低优先级的元素提供服务。 '如果两个元素具有相同的优先级,则按照它们在队列中的顺序提供服务' 我想这会回答你的问题

    【讨论】:

      【解决方案2】:

      如果您查看大多数使用的实现,优先级队列本质上是堆 - 它们根据程序员定义的优先级以特定方式排列 - 在一个简单的示例中,整数的升序或降序。

      将优先级队列想象成一个队列,它不是根据添加元素的时间来检索元素,而是根据它们相互比较的方式来检索它们。在您的教科书示例中,这种比较可以简单地按升序或降序排列。您可以通过另一个 StackOverflow 答案的类比来理解 ADT:

      你正在经营一家医院,病人进来了。只有一个 工作人员的医生。第一个男人走进来——他马上就上菜了。 接下来,一个感冒的人进来并需要帮助。你加他 到队列中,他排队等候医生有空。 接着,一个头上插着斧头的人从门里走了进来。他是 分配更高的优先级,因为他是更高的医疗责任。 所以感冒的人被排成一排。接下来有人来了 有呼吸问题。所以,再一次,感冒的人是 优先级下降。这在现实世界中称为trigaing - 但在这种情况下,它是一条医疗线。

      在代码中实现这一点将使用优先级队列和工作器 线程(医生)对消耗品/工作单元执行工作 (患者)。

      在实际场景中,您可能有等待 CPU 处理的进程,而不是患者。

      阅读: When would I use a priority queue?

      【讨论】:

        【解决方案3】:

        在队列中,自然 根据元素在一行中等待的时间给出的排序可以被认为是最公平的。当您排队等候时,先到先得。

        然而,有时,某些元素有一些特别之处 可能会建议他们应该比等待更长时间的其他人更快地送达。例如,我们并不总是按照收到邮件的顺序阅读电子邮件,但通常 你跳过时事通讯或朋友的“有趣”笑话,先阅读与工作相关的消息。

        同样,当您设计应用或测试应用时,如果存在一些错误,则会优先处理这些错误,并且团队会根据错误的严重程度处理这些错误。首先,新的错误被发现所有 时间,因此新项目将添加到列表中。假设发现了一个令人讨厌的身份验证错误—— 你需要在昨天之前解决它!此外,错误的优先级可以改变 时间。例如,你的 CEO 可能决定你要追求市场份额 这主要是使用浏览器 X,而且下周五你将推出一个大功能,所以你真的需要在几天内解决底部的那个错误。

        当我们需要从动态变化的列表(例如要在 CPU 上运行的任务列表)中按一定顺序消费元素时,优先级队列特别有用,这样我们随时都可以获取下一个元素(根据到某个标准),将其从列表中删除,并且(通常)不再担心修复任何问题 其他元素。

        这就是优先级队列背后的理念:它们的行为类似于普通的普通队列,只是队列的前端是根据某种优先级动态确定的。引入优先级给实现带来的差异是巨大的,足以值得一种特殊的数据结构。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-01-19
          • 1970-01-01
          • 2010-12-28
          • 2012-03-28
          • 2011-08-21
          • 2016-07-11
          • 1970-01-01
          相关资源
          最近更新 更多