优先队列

✍ dations ◷ 2025-07-19 06:58:14 #数据结构

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

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

其它可选的操作:

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

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

相关

  • 胸部在解剖学上,胸部在许多动物身体的其中一部分。人科动物(包括人类)的胸部位于颈部和腹部之间,由肋骨、脊椎和肩带骨骼所支撑。胸部同时有乳房部分,女性的乳房作哺乳之用,因此胸部也
  • 期望在概率论和统计学中,一个离散性随机变量的期望值(或数学期望,亦简称期望,物理学中称为期待值)是试验中每次可能的结果乘以其结果概率的总和。换句话说,期望值像是随机试验在同样的
  • 台北市政府坐标:25°02′15″N 121°33′50″E / 25.037525°N 121.563782°E / 25.037525; 121.563782台北市政府(简称:北市府)是中华民国台北市的地方行政机关,在中华民国政府架构中为直
  • 真骨鱼类真骨下纲(学名:Teleostei)或真骨部是辐鳍鱼纲的演化支之一。此一多样的类群诞生于三叠纪,有两万多个现存物种,分布在40个目之中。辐鳍鱼纲的另外两个演化支(全骨下纲和软质亚纲)是
  • 奥里斯奥里斯(加泰罗尼亚语:Orís),是西班牙加泰罗尼亚巴塞罗那省的一个市镇。总面积27平方公里,总人口284人(2013年),人口密度10.5人/平方公里。
  • 刘涵竹刘涵竹(1982年12月16日-)曾任台湾的非凡新闻台记者兼主播、三立iNEWS台主播,中天新闻台主播,现为东森财经新闻台主播。
  • 边际收益边际收益(Marginal Revenue)经济学名词,指如果再多销售一单位的产品将会得到的投资回报率,或目前最后卖出的一单位的产品所得到的投资回报率。边际收益在实现利润最大化中是一个
  • 布鲁克林区坐标:40°41′34″N 73°59′25″W / 40.69278°N 73.99028°W / 40.69278; -73.99028布鲁克林又称布碌仑(英语:Brooklyn),为美国纽约市的五个行政区之一,也就是纽约州的金斯县(Kin
  • 卡尔·桑德堡卡尔·桑德堡(Carl August Sandburg,1878年1月6日-1967年7月22日),美国诗人、历史学家、小说家、民谣歌手、民俗学研究者,曾获三次普利策文学奖。其中两次为他的诗歌,一次为他为
  • 星斑星斑相当于出现在其他恒星上的太阳黑子。太阳黑子因为很小而难以测量其对光度变化的影响,但观测到的星斑远比在太阳上的巨大,可以占据30%观测到的恒星表面,这相当于太阳黑子的1