普林斯顿公开课 算法4-1:优先级队列API和基本实现
2020-12-13 02:43
标签:算法 优先级队列
优先级队列是容器的一种,可以向优先级队列中添加或取出数据,取出数据时只能取出最大的数或最小的数。而其他的一些容器比如队列和栈,取出的顺序跟插入的顺序是有关的。
优先级队列的接口如下:
事件驱动的模拟 数字运算 数据压缩 图的查找 数论 人工智能(A*查找) 统计学 操作系统(负载平衡) 离散优化(背包问题) 垃圾邮件过滤(贝叶斯垃圾过滤)
栈和队列是优先级队列的特殊情况
现在有一个很大的txt文件,文件中包含了许多整数,文件中的数据量非常大,无法将整个文件读取到内存中。求该文件中最大的5个整数。
这个问题就要用优先级队列进行求解,每次读取一行,将数据加入到优先级队列,如果队列的长度大于5,就删除最小的元素。当整个文件读取完毕时,优先级队列中剩余的元素就是要求的最大5个数。
设需要在N个数据中求出最大的M个元素。 如果用排序算法进行求解,时间复杂度是N logN,空间复杂度是N。 如果用基础优先级队列进行求解,时间复杂度是N logM,空间复杂度为M。 如果用堆的数据结构来做,那么时间复杂度是N logM,空间复杂度是M。 理论上能达到最小的时间复杂度是N,空间复杂度是M。
使用堆的算法来求解该问题时,它的复杂度已经非常接近理论极限了。
下面展示了最简单的优先级队列实现方法。插入的复杂度是1,删除的复杂度是N。
普林斯顿公开课 算法4-1:优先级队列API和基本实现,搜素材,soscw.com 普林斯顿公开课 算法4-1:优先级队列API和基本实现 标签:算法 优先级队列 原文地址:http://blog.csdn.net/caipeichao2/article/details/29597189
public class MaxPQ
优先级队列的应用
问题举例
解答
复杂度
代码
public class UnorderedPQ