优先队列

✍ dations ◷ 2025-11-26 09:34:16 #数据结构

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

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

其它可选的操作:

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

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

相关

  • 氢键氢键是分子间作用力的一种,是一种永久偶极之间的作用力,氢键发生在已经以共价键与其它原子键结合的氢原子与另一个原子之间(X-H…Y),通常发生氢键作用的氢原子两边的原子(X、Y)都是
  • Csub4/subHsub8/subMgNsub2/subOsub4/sub&g甘氨酸镁是镁的甘氨酸盐,化学式为C4H8MgN2O4。可由金属镁和甘氨酸反应得到。硝酸镁和甘氨酸在液氨中反应也能得到产物。甘氨酸镁可以用作营养补充剂或用于饲料。医学导航:营养
  • 非医疗用途上娱乐性用药(英语:Recreational drug use),意指会影响人类中枢神经系统,改变人类意识、情绪状态的精神药物统称。这类药物通常被用来产生欣快感(euphoria)、阻止不快记忆、增加愉悦
  • 德意志关税同盟德意志关税同盟(德语:Deutscher Zollverein)于1834年由38个德意志邦联的邦国组成。在当时工业革命的浪潮,同盟的成立有助贸易往来、减少内部竞争。而同盟成立的主要倡导者是经济
  • 沙尔克利福德·沙尔(英语:Clifford Shull,1915年9月23日-2001年3月31日),美国物理学家,1994年获诺贝尔物理学奖。1915年出生于宾夕法尼亚州匹兹堡。2001年逝世于马萨诸塞州梅特福德(英语
  • 全欧网络全欧网络(英语:Trans-European Networks)是欧洲联盟为落实及开发共同市场、并加快联盟的社会及经济一体化进程而拟定的一项方针。其重点计划在于改进共同市场的交联,并对部分运
  • 身体素质体适能(英语:Physical Fitness),为身体适应外界环境之能力,可视为身体适应生活、运动与环境 (例如,温度、气候变化或病毒等因素)的综合能力。它包含了两个面向,一般素质(身体健康的状
  • 远交衰退远交衰退(Outbreeding depression),又称杂种衰败、杂种衰退(Hybrid breakdown),是演化生物学中指不同种群之间的后代比同种群的后代有劣势的现象,与杂种优势相反。这是配子后生殖隔
  • 拉弗兰科尼桥拉弗兰科尼桥(斯洛伐克语:,意为青年桥)是位于斯洛伐克布拉迪斯拉发多瑙河上的一座桥梁,为混凝土公路桥。拉弗兰科尼桥修建于1985年至1991年期间。桥的右半部分在1990年通车,剩余部
  • 文井乡文井乡,是中华人民共和国四川省成都市新津区下辖的一个乡镇级行政单位。2019年12月,撤销文井乡、新平镇,设立宝墩镇。文井乡下辖以下地区:张场社区、李柏村、大明村和玉龙村。