优先队列

✍ dations ◷ 2025-07-08 17:16:42 #数据结构

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

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

其它可选的操作:

有许多简单低效的实现。如用一个有序的数组;或使用无序数组,在每次取出时搜索全集合,这种方法插入的效率为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。

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

相关

  • 雅典宪章《雅典宪章》(法语:Charte d'Athènes),是法国-瑞士知名建筑师勒·柯布西耶于1933年提出,并在1943年正式出版的一份有关于城市规划的文件。该宪章是基于勒·柯布西耶的1935年出版
  • 于阿登地区展开反攻美军:89,500人(19,000人阵亡、47,500人受伤23,000人被俘或失踪)~800辆坦克序幕 菲安登战役 – 黑汀根战役德军最初攻势 罗谢姆狭口 – 兰泽拉斯岭 – 马尔梅迪大屠杀
  • 布吉河布吉河是一条位于中国广东省深圳市的河流,为深圳河的支流。该河流主要流经龙岗区布吉镇,与罗湖商业区,并在罗湖区鹿丹村处流入深圳河。支流有水径河、大芬河、塘径河等。布吉河
  • 九节坂 (구절판)九节坂(韩语:구절판)是古代是韩国宫廷料理中的前菜,也可以指盛放该料理的容器。9种食物放至在有9格的八边形攒盒的传统韩国料理,九节坂中间一格一般放置薄饼,周围环绕的8个格按五
  • 新右派新右派(英语:the New Right)与新左派都是一种社会运动,而新右派乃是相对于“老右派”而产生。其理论基础以弗里德里希·哈耶克、弗里德曼的思想为基本。新右派与新保守主义相同
  • 千鸟格千鸟格,或称千鸟纹,英文称犬牙houndstooth, hound's tooth, 或 dogstooth, dogtooth, pied-de-poule等,是一个由破碎格纹或四角形状组成的双色纺织花纹,通常是黑色和白色相间,但
  • 帕舒帕蒂纳特庙帕舒帕蒂纳特庙(尼泊尔语:पशुपतिनाथ मन्दिर,拉丁化:Pashupatinath Mandir),位于尼泊尔加德满都东部巴格马蒂河畔,是一座印度教寺庙,也是印度次大陆四大供奉湿婆的寺
  • 马丁斯·美耶斯马丁斯·美耶斯(拉脱维亚语:Mārtiņš Meiers,1991年3月30日-),拉脱维亚篮球运动员,现在效力于拉脱维亚球队里加篮球俱乐部。他也代表拉脱维亚国家男子篮球队参赛,参加了2011年欧洲
  • 马达数据马达数据(英语:MadaData)成立于2015年,商业智能(BI)创业公司,其产品旨在整合、分析和互动展示企业内部及外接数据。马达数据(北京马达加科技有限公司)成立于2015年,总部设于北京。2016
  • 氟化钇锂氟化钇锂(Yttrium lithium fluoride)的化学式是LiYF4,有时会简称YLF,是一种双折射的晶体,一般会掺入元素钕,是固态激光(英语:solid-state laser)中的主动激光介质(英语:active laser me