优先队列

✍ dations ◷ 2025-05-15 15:08:29 #数据结构

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

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

其它可选的操作:

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

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

相关

  • 紫菀紫菀(学名:Aster tataricus),又名青菀、紫倩、青牛舌头花(河北土名)、山白菜、驴夹板菜、驴耳朵菜、还魂草、返魂草、小辫,是菊科紫菀属植物。多年生草本,株高可达1.8米;须根多数簇生
  • 针灸甲乙经《针灸甲乙经》,全名《黄帝三部鍼灸甲乙经》,是现存最早的一部针灸专书,(公元256-282 年)晋皇甫谧(士安)编辑整理《素问》、《针经》、《明堂孔穴针灸治要》,所编著而成。 全书共十
  • 泉州电视台闽南语频道泉州广播电视台闽南语频道(英语:Quanzhou Television Minnan Channel),又名“泉州台四套”、“泉视四套”,是中国大陆第一个全部采用闽南语播出的综合频道,以泉州话节目为主、以闽
  • 圣约翰斯 (安提瓜和巴布达)圣约翰(英语:St. John's)是安提瓜和巴布达的首都,位于北纬17°07′西经61°51′。人口31,000(2005年)。圣约翰位于安提瓜岛西北岸,属圣约翰区,是全国的经济中心和岛上的主要港口。自
  • 推力推力(英语:)是功的函数,可改变物体速度、推动的力量。多指在发动机内、外表面或推进器(如螺旋桨)上各种力的合力。发动机由螺旋桨、涡扇或涡轮喷气发动机产生的前推的空气动力;而螺
  • 兴宁话本文属于客家系列的一部分兴宁话是泛指在广东省兴宁市的客家语方言,根据1987年版本的《中国语言地图集》,兴宁话被归类为客家语粤台片兴华小片,而根据2012年版本的《中国语言地
  • 张龄心张龄心(3月28日-),中国大陆演员。
  • 鸭长明鸭长明(鴨長明,かものちょうめい,1155年~1216年7月26日)是一位日本平安时代末期至镰仓时代初期的作家与诗人,出生于京都。
  • 鸡骨草鸡骨草(学名:,英文名称:),别称广州相思子、广东相思子、 大黄草、黄头草、黄食草、黄仔强、猪腰草、 红母鸡草、小叶龙鳞草、 细叶龙鳞草、 假牛甘子、山弯豆、 石门槛及地香根等,
  • 松山龙平松山龙平(日语:松山 竜平/まつやま りゅうへい ,1985年9月18日-)是一名出生于日本鹿儿岛县大崎市的棒球选手,司职外野手、一垒手,目前效力于日本职棒广岛东洋鲤鱼。71 高信二 | 75