优先队列

✍ dations ◷ 2025-11-14 21:56:21 #数据结构

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

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

其它可选的操作:

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

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

相关

  • 代 (地质学)代(英语:Era)是地球地质年代的时间单位之一,每个“代”时间长达数亿年不等。一个“宙”可以细分为数个“代”,例如显生宙分为古生代、中生代和新生代,代表宏观化石记录中的主要阶
  • 费用费用通常是指某人或某团体为了获取物品或劳务而导致的现金流出,会计学上则是指现金或资产从某人或某公司移转至另一个人或公司。
  • 奥斯特里兹奥斯特利茨战役(1805年12月2日),是拿破仑战争中的一场著名战役。75,000人的法国军队在拿破仑的指挥下,在波西米亚的奥斯特利茨村(位于今捷克境内)取得了对87,000俄罗斯-奥地利联军
  • 全国人民代表大会专门委员会 政治主题为了加强最高国家权力机关的工作,《中华人民共和国宪法》(现行宪法第七十条)规定全国人民代表大会设立若干专门委员会。各专门委员会不具有权力机关的性质,而是在权力
  • 字怀在字体排印学中,字怀(又称“字谷”)指字母构造中的全封闭或半封闭区域。 拉丁字母中包含有封闭字怀的有A、B、D、O、P、Q、R、a、b、d、e、g、o、p和q, 包含开放字怀的有c、f、
  • 创新工场创新工场由李开复创办于2009年9月7日,是一所旨在帮助年轻人创业的天使投资公司。总部设在北京海淀区清华科技园,于2010年9月8日搬往中关村西区的第三极大厦。于2019年关闭美国
  • 南极条约环境保护议定书《南极条约环境保护议定书》(英语:),又称《南极环境协议》,或《马德里议定书》,是南极条约体系的一部分,以提供对南极环境与附属及相关生态系统的全面保护。于1991年10月4日马德里
  • 中途 (阿拉巴马州)中途(英文:Midway),是美国阿拉巴马州下属的一座城市。面积约为3.31平方英里(约合 8.57平方公里)。根据2010年美国人口普查,该市有人口499人,人口密度为150.8/平方英里(约合58.23/平方
  • 杨林 (虚构隋朝人物)杨林,是《说唐》、《兴唐传》中的虚构人物。北周大臣杨忠之弟,隋文帝杨坚叔父。杨坚即位后,封其为靠山王。隋唐时期第八条好汉。北周武帝宇文邕兴兵灭北齐,护卫大将军杨忠为元帅
  • 库尔兰包围战160,000人死亡或受伤(1945年2月16日-1945年5月8日) 库尔兰包围战(各国正式名称见),指第二次世界大战德苏战争末期,苏军在库尔兰对轴心国势力的阻击和包围,指挥官为霍夫汉内斯·巴格