优先队列

✍ dations ◷ 2025-04-18 18:10:47 #数据结构

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

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

其它可选的操作:

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

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

相关

  • 罗马教宗教宗(拉丁语:Papa),或译教皇(华语圈外国家如韩国、日本、越南与部分教外人士目前仍沿用之),是罗马主教,同时为普世天主教会领袖与梵蒂冈城国国家元首,传统上被认为是圣伯多禄宗徒之位
  • 番木虌碱番木鳖碱(英语:Strychnine),又称番木鳖碱,马钱子碱,又译士的宁,士的年(有时被错写成土的宁),是一种剧毒的化学物质,一般用来毒杀老鼠等啮齿类动物。对人类亦有剧毒(成人的致死量约为5mg/
  • 剧雪剧雪(1968年11月22日-),北京人,中国女演员。毕业于上海戏剧学院表演系。1991年毕业后进入中国人民解放军空军政治部话剧团。1993 奚美娟2001 奚美娟、谢 兰2013 章子怡、颜丙燕1
  • 堪萨斯河堪萨斯河(英语:Kansas River)是美国堪萨斯州东北部的一条河流,是密苏里河的支流。
  • 萨拉希·费伦茨萨洛奇·费伦茨(匈牙利语:Szálasi Ferenc,1897年1月6日-1946年3月12日),匈牙利二战时期种族主义运动组织箭十字党的领导人。1944年,匈牙利密谋向盟军停战而被纳粹德国占领匈牙利,担
  • 罗俊 (物理学家)罗俊(1956年11月-),湖北仙桃人。中国引力物理学家,中国工程院院士、中山大学校长。1982年毕业于华中工学院物理化学系,1985年获该校硕士学位,1999年获中国科学院测量与地球物理研究
  • 阿拉谢希尔阿拉谢希尔(土耳其语:Alaşehir,希腊语:Φιλαδέλφεια,拉丁化:Philadélphia)是土耳其爱琴海区马尼萨省的一个城镇和县,座落在博兹达(古代的Tmolus山)山麓的 Kuzuçay (古代的
  • 马森 (作家)马森(1932年10月3日-),华人戏剧家与小说家。1932年10月3日生于山东省齐河县。父亲马超群,母亲孙希然。少年时期曾于济南、北京、淡水、宜兰等地就读中学。毕业于国立台湾师范大学
  • 洪任辉洪任辉(本名:詹姆士·弗林特,James Flint)(?1720-?) 是18世纪的一名英国商人和外交家,曾为不列颠东印度公司职员。少年时在广州学习汉文(据学者马士推测,学费是由东印度公司资助),得以
  • 李宝臣 (唐朝)李宝臣(718年-781年),本名张忠志,字为辅,范阳(今北京、保定一带)人,唐朝藩镇,成德节度使。原名不详,为范阳内属的奚族人。他善骑射,范阳将张锁高收养,冒张姓,名忠志。曾为卢龙府果毅,又为安