优先队列

✍ dations ◷ 2025-12-03 17:48:23 #数据结构

优先队列是计算机科学中的一类抽象数据类型。优先队列中的每个元素都有各自的优先级,优先级最高的元素最先得到服务;优先级相同的元素按照其在优先队列中的顺序得到服务。优先队列往往用堆来实现。

优先队列至少需要支持下述操作:

其它可选的操作:

有许多简单低效的实现。如用一个有序的数组;或使用无序数组,在每次取出时搜索全集合,这种方法插入的效率为O(1),但取出时效率为​O(n)。

出于性能考虑,优先队列用堆来实现,具有(log )时间复杂度的插入元素性能,()的初始化构造的时间复杂度。如果使用自平衡二叉查找树,插入与删除的时间复杂度为(log ),构造二叉树的时间复杂度为( log )。

从计算复杂度的角度,优先级队列等价于排序算法。

有一些特殊的堆为优先队列的实现提供了额外的性能:二叉堆的插入与提取操作的时间复杂度为(log ),并可以常量时间复杂度的peek操作。二项堆提供了几种额外操作。斐波那契堆的插入、提取、修改元素优先级等操作具有分摊常量时间复杂度,,但删除操作的时间复杂度为(log )。Brodal queue(英语:Brodal queue)具有最糟糕情况下的常量复杂度但算法相当复杂因而不具有实用性。

对于整型、浮点型等具有有限值域的元素的数据类型,优先队列有更快的实现。

优先队列是计算机科学中的一类"容器数据类型"。

标准模板库(STL)以及1998年的C++标准确定优先队列是标准模板库的容器适配器模板。其实现了一个需要三个参数的最大优先队列:比较函数(缺省情况是小于函数less<T>)、存储数据所用的容器类型(缺省情况是向量vector<T>)以及指向序列开始和结束位置的两个迭代器。和标准模板库中其他的真实容器不同,优先队列不允许使用其元素类型的迭代器,而必须使用优先队列抽象数据类型的迭代器。标准模板库还实现了支持随机访问数据容器的优先队列--二叉最大堆。Boost C++库也在其中实现了堆结构。

Python的heapq模块实现了在链表基础上的二叉最小堆,queue模块将heapq模块包装实现了PriorityQueue类。

Java库中的PriorityQueue类实现了最小优先队列。

Go库中的container/heap模块实现了一个可以在任何兼容数据结构上构建的最小堆。

PHP标准库包括了一个优先队列SplPriorityQueue。

苹果的Core Foundation框架包括了一个最小堆结构CFBinaryHeap。

优先队列常用于操作系统的任务调度,也是贪心算法的重要组成部分。

相关

  • 几内亚比绍面积国家领袖国内生产总值(购买力平价) 以下资讯是以2016年估计国内生产总值(国际汇率) 以下资讯是以2016年估计人类发展指数 以下资讯是以2018年估计几内亚比绍共和国(葡萄牙语:R
  • 细胞记忆细胞记忆,亦作身体记忆(Body memory)是一个伪科学假说,认为人体本身或身体上的所有细胞均有储存记忆或个性特质的能力,而不是主流学说所认为的只存在于大脑。这个假说可用来解释
  • 艺术史美术史是有关艺术作品的历史发展及其风格的研究,风格可能包括其艺术类型、设计、形式及风格(英语:Style (visual arts))等。它也研究和描述美术在其当时和当地的美术感和世界观
  • 国家队国家队,一般是指国家所组织的队伍,例如用以参加奥运会、世界杯、世界锦标赛等国际体育赛事的体育队伍。国家队一般是用在团队运动中。不过若运动是单人运动项目,而个别成绩会集
  • 黄伯云黄伯云(1945年-),湖南益阳人,中国工程院院士。1969年毕业于中南矿冶学院粉末冶金专业,后赴美留学,1980年-1986年在美国爱阿华州立大学及埃姆斯实验室分别获硕士、博士学位,后归国从
  • 木刻运动木刻运动,中国美术家在1930年代发起的木刻版画创作及推广运动,主要为宣传爱国思想。1920年代后期,鲁迅在上海接触到欧洲1920年代的新版画艺术,想介绍给中国人,在1929年编写了《近
  • 2015年净选盟4.0集会净选盟4.0集会(马来语:Perhimpunan Bersih 4;英语:Bersih 4 rally)是马来西亚非政府组织干净与公平选举联盟(净选盟)于2015年8月29日至30日在首都吉隆坡及全国各地主要城市举行的第
  • 即位礼 (日本)即位礼(日语:即位の礼/そくいのれい  */?)是日本天皇在继承皇位(日语:皇位継承)后进行的一连串国事行为(日语:国事行為)仪式,为日本王室的最高礼仪。中心仪式是即位礼正殿之仪(日语:即
  • 广中平祐广中平祐(1931年4月9日-),日本数学家,出生于日本山口县玖珂郡由宇町(现岩国市)。日本学士院会员。1970年由于其在代数几何上的成就获得菲尔兹奖。其夫人为曾任日本环境厅长官的广中
  • 第二次英国锡克战争第二次英国锡克战争是指在1848年至1849年期间,英国东印度公司与锡克帝国之间的一场局部战争。这场战争以英国东印度公司的胜利而告终,锡克帝国被征服,旁遮普地区最终成为东印