优先队列

✍ dations ◷ 2025-12-02 19:48:21 #数据结构

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

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

其它可选的操作:

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

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

相关

  • 椅子椅,无靠背的称为凳,是一件用来坐的家具,为脚物家具的一种 ,一般包括一个座位、椅背,有时还包括扶手,通常会有椅脚使座位高于地面。当椅子坐久后坐垫便会热。其他和椅相类似的东西
  • 航天飞机计划航天飞机计划,美国航空航天局官方名称为Space Transportation System,STS,即“空间运输系统”,是美国政府于1981年至2011年间的大型航天飞机载人航天计划,由美国航空航天局负责并
  • 维也纳会议维也纳会议(法语:Le congrès de Vienne)是从1814年9月18日到1815年6月9日之间在奥地利维也纳的外交会议。本次会议由奥地利政治家克莱门斯·文策尔·冯·梅特涅主持,其目的在于
  • 密西西比纪密西西比世(英语:Mississippian)是地球历史中的一个地质时代,被国际地层委员会(ICS)所承认,也是石炭纪前期。密西西比纪的年代大约位于358.9至323.2百万年前。就像其他许多地质年
  • 查尔斯·霍顿·佩克查尔斯·霍顿·佩克(Charles Horton Peck, 1833年3月30日-1917年),出生于纽约州Sand Lake市,逝世于纽约州奥尔巴尼市,是一名美国真菌学家。在1867年至1915年间,他是纽约州的植物学
  • 松树岛青年岛(西班牙语:Isla de la Juventud),原名松树岛(Isla de Pinos),古巴第二大岛,位于阿尔特米萨省(原哈瓦那省的一部分)正南,距古巴岛100公里,青年岛及附近小岛属青年岛特区管理,不属于
  • 安托瓦内特郡主 (摩纳哥)安托瓦内特郡主(法语:Antoinette,1920年12月28日-2011年3月18日)全名为安托瓦内特·路易丝·阿尔贝迪·苏珊娜·格里马尔迪(Antoinette Louise Alberte Suzanne Grimaldi),为已故摩
  • 煌斑岩煌斑岩为一种浅成岩,通常颜色较深,含有由暗色矿物组成的斑晶,在肉眼观察时,其标本闪闪发光,因此而得名。其组成成分多为长石和与斑晶相同的暗色矿物,尤其是云母。按其成分可分为:
  • 中村登中村登(なかむらのぼる,1913年8月4日-1981年5月20日)是一位日本电影导演,毕业于东京大学后,进入松竹电影公司。
  • 乔尔·考克斯乔尔·考克斯()生于1942年4月2日,是一名美国电影剪辑师。他因与克林特·伊斯特伍德合作逾30年而为人所熟知。考克斯在还是一个婴儿时就出现在电影《鸳梦重温》中了。他的事业起