优先队列

✍ dations ◷ 2025-12-02 00:29:05 #数据结构

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

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

其它可选的操作:

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

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

相关

  • enen是字体排印学的计量单位,为em宽度的一半。根据定义,它等同于字体宽度的一半(如16点字体中就是8点)。名义上是小写字母n的宽度。en dash (–)和en 空格( )都是1 en宽。
  • 名家名家,中国对严谨逻辑思想之开创者,和西方逻辑思想之先锋亚里士多德同期。是司马谈《论六家要旨》的六家之一,先秦时期诸子百家之一。古代名家“辩者”以严谨逻辑思想而闻名。名
  • 面肩胛肱型肌营养不良症面肩胛肱型肌营养不良症(英语:Facioscapulohumeral muscular dystrophy, Landouzy-Dejerine, FSHMD, FSHD or FSH),先影响面部、肩胛骨和上臂骨骼肌的常染色体显性肌肉萎缩症。
  • 钱千里钱千里(1915年3月-2009年7月31日),江苏南通人,中国电影导演、演员。被称为“中国电影活档案”。2009年获中国电影金凤凰奖特别荣誉奖。
  • 澳门早报澳门早报 (Agora Macau)是澳门一份周报,创于2005年10月28日。逢星期一出版,彩色印刷,每期12-20版不等。
  • 1941-1945年伟大卫国战争胜利二十周年奖章1941-1945年伟大卫国战争二十周年奖章 (俄语:Юбилейная медаль «Двадцать лет Победы в Великой Отечественной в
  • 保罗·怀特曼保罗·塞缪尔·怀特曼(英语:Paul Samuel Whiteman,1890年3月28日-1967年12月29日)是一名作曲家、小提琴家和指挥家。
  • BURN THE WITCH《BURN THE WITCH》(日语:バーンザウィッチ),是日本漫画家久保带人创作的少年漫画,于2018年7月14日在集英社旗下杂志《周刊少年Jump》刊载的单篇,久保带人完结《BLEACH》连载后的
  • 程焕采程焕采(1787年-1873年),字晓初,号霁亭。江西省南昌府新建县(今属南昌市)人,清朝政治人物。少时为南昌府学廪生。嘉庆十八年(1813年)癸酉优贡生,二十一年(1816年)丙子举人。嘉庆二十五年(18
  • 里克·德·霍伊斯特里克·德·霍伊斯特(Rik de Voest,1980年6月5日-)出生于意大利米兰,是一位南非男子职业网球运动员,他于1999年成为职业球员。2014年正式退役。他的职业生涯ATP单打最高排名是第110