【问题标题】:When would I use a priority queue? [closed]我什么时候使用优先队列? [关闭]
【发布时间】:2013-08-05 16:03:48
【问题描述】:

我所知道的使用优先级队列的唯一例子是 Dijkstra 算法(用于计算最小成本)

在其他什么情况下它会有用?

【问题讨论】:

  • 当你有优先级并且你想将它们排队时......来吧你期待什么?!?
  • 几乎所有启发式搜索(不仅仅是 Dijkstra);生产者-消费者优先;很多其他的东西。
  • 如何将它与堆排序一起使用?每个人都可以使用答案吗?您是在回答我的问题,而不是对此发表评论。
  • 路由器在管理数据包流量时使用优先级队列cisco.com/c/en/us/td/docs/ios/12_2/qos/configuration/guide/…

标签: algorithm queue priority-queue


【解决方案1】:

这是一个实际示例 - 用于业务应用程序:

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

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

【讨论】:

    【解决方案2】:

    扫描大量统计数据以报告前 N 个项目 - N 个最繁忙的网络连接、N 个最有价值的客户、N 个最大的磁盘用户...

    【讨论】:

      【解决方案3】:

      优先队列(最小/最大堆)有很多应用。但是,如果您正在寻找经典和著名的算法Prim's algorithm 来为加权无向图找到最小生成树,例如,使用优先级队列。

      【讨论】:

        【解决方案4】:

        基于堆的优先级队列正在对输入序列进行部分排序。当您不需要整个序列时,这比直接对其进行排序具有优势,因为 mcdowella 给出了一些示例。特别是,如果您只需要 n 个元素中的 m 个,则复杂度为 O(m log n)。第二个优点是当您动态添加元素时,即当您事先不知道整个序列时。使用堆作为后备存储,添加另一个元素比将其插入到排序序列中更快。

        此外,当您按排序顺序弹出单个元素然后丢弃它们时(即您之后不需要排序顺序),使用优先级队列可以为读者提供正确的信息。它还使得交换不同的实现变得相当容易,例如一种是基于堆的,一种是预先对输入序列进行排序的。这是一个品味问题,您始终可以使用任何序列来实现相同的效果,然后相应地使用,但这只会使代码更难阅读。

        【讨论】:

          【解决方案5】:

          这里是列表: 事件驱动的模拟: 顾客排成一列,碰撞粒子

          数值计算。 减少舍入误差 数据压缩。 压缩数据的霍夫曼代码。 图表搜索: Dijkstra 算法,Prim 算法 数论: 权力总和 人工智能: A* 搜索 统计: 保持序列中最大的 M 值 操作系统: 负载均衡、中断处理 离散优化。 装箱、调度 垃圾邮件过滤。 贝叶斯垃圾邮件过滤器

          【讨论】:

            猜你喜欢
            • 2012-07-01
            • 2013-10-02
            • 1970-01-01
            • 2014-09-02
            • 2022-01-17
            • 1970-01-01
            • 2014-11-12
            • 2023-04-09
            • 2014-01-12
            相关资源
            最近更新 更多