优先队列

✍ dations ◷ 2025-12-04 18:30:40 #数据结构

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

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

其它可选的操作:

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

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

相关

  • 巴门尼德爱利亚的巴门尼德(Παρμενίδης)(约前515-前445),公元前5世纪的古希腊哲学家,最重要的“前苏格拉底”哲学家之一,是埃利亚学派的一员。生于埃利亚(Ἐλέα,位于现在意大利南
  • 根毛根毛是高等植物根尖表皮上的毛状物,主要位于根的成熟区,形成根毛区。根毛由成熟区表皮细胞向外突出而成,具有顶端封闭的管状结构,其长度由数十到上千微米不等,可通过肉眼观察到。
  • 高雄市劳工博物馆高雄市劳工博物馆是位于台湾高雄市的一座博物馆,于2010年由高雄市政府劳工局在驳二艺术特区C4仓库(盐埕区大勇路3号)成立,后搬迁至前金区中正四路261号3楼现址,于2015年7月25日重
  • 赫尔曼德省赫尔曼德省(波斯语:ولایت هلمند‎)是阿富汗34个省份之一,位于阿富汗南部,是阿富汗最大的省份,面积达58,584平方公里,设有13个县和超过1,000个村落,人口约为1,442,500人。
  • 云南省机场列表截至2019年9月,中华人民共和国云南省境内已有民用机场15座,军用机场3座。民航部分属于西南地区管理局,军用部分属于南部战区。
  • 乔·吉拉迪作为球员作为教练作为总教练约瑟夫·艾略特·吉拉迪(Joseph Elliot Girardi,1964年10月14日-)出生于美国伊利诺伊州皮奥里亚,是曾担任美国职棒大联盟迈阿密马林鱼和纽约洋基队总
  • 查理·莫顿查尔斯·阿弗瑞德·莫顿四世(英语:Charles Alfred Morton IV,1983年11月12日-)登录名查理·莫顿。他出生于新泽西州的弗雷明顿(Flemington),现为美国职棒大联盟坦帕湾光芒的先发投手
  • 蓝麂羚蓝麂羚(学名 ) 是一种生活在中非和南非南部的小型森林麂羚。蓝麂羚肩高约35厘米,体重4公斤,有着褐色的毛皮,略偏蓝色(它们也因此得名),腹部为白色。在头顶上有一细少红色的冠状物。
  • 吴廷奈吴廷奈(越南语:Ngô Đình Nại,1981年8月27日-),是越南的一名开仑台球选手,出生于胡志明市。吴廷奈在20岁才开始接触台球。然而,他非凡的才华很快使他获得了成功。他在一颗星比赛
  • 羊安镇羊安镇,是中华人民共和国四川省成都市邛崃市一个已撤销的乡镇级行政单位。2019年12月,羊安镇与牟礼镇、回龙镇、高埂镇和冉义镇合并为羊安街道。羊安镇下辖以下地区:羊安社区、