我什么时候会使用优先级队列?

Ole*_*siy 20 algorithm queue priority-queue

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

在其他情况下它会有用吗?

Vau*_*lts 48

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

你正在经营一家医院,病人正在进来.工作人员中只有一名医生.第一个男人走了进来 - 他马上就服完了.接下来,感冒的男人进来需要帮助.你将他加入队列,他排队等候医生可用.接下来,一个头上戴着斧头的男人穿过门.他被赋予更高的优先权,因为他有更高的医疗责任.所以患感冒的男子排成一列.接下来,有人有呼吸问题.因此,患有感冒的男子再次被优先考虑.这在现实世界中被称为分类 - 但在这种情况下,它是一条医疗线.

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


mcd*_*lla 11

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


Ulr*_*rdt 11

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

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


AKS*_*AKS 7

以下是列表: 事件驱动的模拟: 一行中的客户,碰撞粒子

数值计算. 减少舍入误差 数据压缩. 压缩数据的霍夫曼码. 图搜索:Dijkstra算法,Prim算法 数理论: 功率之和 人工智能: A*搜索 统计: 维持序列中最大的M值 操作系统: 负载平衡,中断处理 离散优化. bin packing,调度 垃圾邮件过滤. 贝叶斯垃圾邮件过滤器