优先队列

✍ dations ◷ 2025-11-28 00:09:36 #数据结构

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

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

其它可选的操作:

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

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

相关

  • 哈德逊湾哈德森湾(英语:Hudson Bay,或称哈德逊湾)位于加拿大东北部巴芬岛与拉布拉多半岛西侧的大型海湾,面积122.6万平方千米。平均水深257米。北部时常会有北极熊出现。主要港口有丘吉尔
  • 老人痴呆症阿尔茨海默病(拉丁语:Morbus Alzheimer、德语:Alzheimer-Krankheit、英语:Alzheimer's disease,缩写:AD),俗称早老性痴呆、老年痴呆,是一种发病进程缓慢、随着时间不断恶化的神经退化
  • 精子捐赠捐精是一种捐赠行为,指男性通过医疗机构,将自己的精子送赠妻子以外的女性,捐精过程男女之间不发生性行为。捐精可能在心理上有困难,因为有不少道德问题尚未解决,例如捐精所生的子
  • 台北酒厂华山1914文化创意产业园区(又名华山1914文创园区或华山1914,英语:Huashan 1914 Creative Park),园区前身为“台北酒厂”,为台湾台北市市定古迹。在1999年后,成为提供给艺文界、非营
  • 小迈克·邓利维小迈克尔“迈克”·约瑟夫·邓利维(英语:Michael "Mike" Joseph Dunleavy, Jr.,1980年9月15日-) 通常称小邓利维,生于德克萨斯州沃斯堡,美国职业篮球运动员。他是前NBA球员和前洛杉
  • 有机钯化学有机钯化学是有机金属化学的一个分支,是主要研究有机钯化合物与其反应的学科。钯常用于烯烃或炔烃发生氢化反应的催化剂。这类反应过程通常都涉及了钯-碳共价键的形成。钯化合
  • 美雅美雅(英语:Mýa Marie Harrison, 1979年10月10日-)是一位美国节奏蓝调歌手、演员、时尚模特。1979年生于华盛顿哥伦比亚特区。
  • 2007年4月逝世人物列表2007年4月逝世人物列表,是用于汇总2007年4月期间逝世人物的列表。
  • 周发岐周发岐(1901年-1990年),河北蠡县人,有机化学家,主要从事有机化学与炸药化学方面的研究。周发岐早年赴法国留学,就读于里昂大学化学系,1928年获博士学位。1929年返回中国,担任中法大学
  • 亨利·尼古拉斯·里德利亨利·尼古拉斯·里德利(Henry Nicholas Ridley,1855年12月10日-1956年10月24日)为英国植物学家和地质学家。亨利·尼古拉斯·里德利出生于英国诺福克。1888年至1911年,他为新加