优先队列

✍ dations ◷ 2025-10-31 21:45:58 #数据结构

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

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

其它可选的操作:

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

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

相关

  • 撒哈拉以南非洲地区撒哈拉以南非洲(英语:Sub-Saharan Africa),指撒哈拉沙漠以南的非洲地区,又称亚撒哈拉地区、下撒哈拉、漠南非洲,也有称黑非洲(Negro Africa)。政治上,包括了所有或部分领土位于撒哈拉
  • 数值分析数值分析(英语:numerical analysis),是指在数学分析(区别于离散数学)问题中,对使用数值近似(相对于一般化的符号运算)算法的研究。巴比伦泥板YBC 7289是关于数值分析的最早数学作品之
  • 武术家武术家,又叫武者,泛指锻炼武术,且在武术上具有成就的人士。练武的人遍布世界各地,也出现一些知名的流派,如中国功夫、拳击、柔道、剑道、空手道、跆拳道、合气道、泰拳、桑搏、日
  • 力为廉力为廉(William Henry Lacy; 1858年1月8日-1925年9月3日)是美国美以美会差会派往中国的传教士。1858年1月8日,力为廉出生在美国威斯康星州密尔沃基。他毕业于西北大学和加略特圣
  • 午夜子夜,亦称半夜、子正,指二十四小时制的00:00(24:00)或十二小时制的夜晚12:00。中国古代以子夜为日之分界,以子正初刻(00:00)为一日之开始,夜子初四刻(24:00,子夜)为一日之终结。而且分
  • 阿米尼乌斯阿米尼乌斯(或称阿尔米尼乌斯)(前18/17年-21年),罗马时代著名的日耳曼政治家、军事家及民族英雄,以在日耳曼战争中大败罗马帝国闻名。生为日耳曼部落切鲁西人 (Cherusci)酋长之子,自
  • 事件 (相对论)事件是物理学中(尤其相对论)一瞬间的物理情况,或是在时空中一个点(亦即,一个特定的地点与时间)发生的事。例如,一个玻璃杯碎在地上是一个事件——它于特定的时间发生于一特定的地点
  • 门多萨河门多萨河(西班牙语:Río Mendoza)是阿根廷门多萨省的河流,在安第斯山脉阿空加瓜山和图蓬加托火山之间发源,上游河谷平均海拔约2,600米,河流平均流量每秒50立方米。
  • MIPS架构MIPS架构(英语:MIPS architecture,为Microprocessor without Interlocked Pipeline Stages的缩写,亦为Millions of Instructions Per Second的头字语),是一种采取精简指令集(RISC)的
  • 列昂尼德·阿巴尔金列昂尼德·伊万诺维奇·阿巴尔金(俄语:Леони́д Ива́нович Аба́лкин;1930年5月5日-2011年5月2日),俄罗斯经济学家、俄罗斯科学院院士。1930年,列昂尼德·阿