优先队列

✍ dations ◷ 2024-12-23 05:34:33 #数据结构

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

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

其它可选的操作:

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

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

相关

  • 翼状胬肉手术翼状胬肉手术或翼状胬肉切除术是针对翼状胬肉做的手术。以单纯切除术为例:转头术为将翼状胬肉头部缝合在结膜下。干细胞移植术为将角巩膜缘处的正常结膜组织移植到空白带,使角
  • 相图相图(英语:Phase diagram),也称相态图、相平衡状态图,是用来表示相平衡系统的组成与一些参数(如温度、压力)之间关系的一种图。它在物理化学、矿物学和材料科学中具有很重要的地位
  • 威廉三世及二世奥兰治的威廉三世(荷兰语:Willem III van Oranje;1650年11月14日-1702年3月8日),出生即继位为奥兰治亲王,1672年7月任荷兰省、泽兰省执政,1674年4月26日任乌德勒支省、海尔德兰省及
  • 私人航天公司列表这是一个私人航天公司列表,包括目前提供或计划推出着眼于航天器(无人航天器及载人航天器)装置和服务的公司。GTO:地球同步转移轨道(Geostationary transfer orbit) VTOL:垂直起降(Ve
  • 克拉底王朝克拉底人(梵文:किरात、Kirata),是指喜玛拉雅山脉的土著,分布在缅甸至加德满都谷地、印度东北部,属于黄色人种,大概一至三万年前来到此地。从广义上讲克拉底人有林布族、拉伊人
  • 全国计划工作会议1970年全国计划工作会议,是指1970年2月15日至3月21日期间,中华人民共和国国务院召开的全国计划工作会议。会议旨在制定1970年的国民经济计划,并着手研究第四个五年计划纲要(草案
  • 哈特穆特·米歇尔哈特穆特·米歇尔(德语:Hartmut Michel,1948年7月18日-),德国生物化学家,1988年诺贝尔化学奖得主。哈特穆特·米歇尔于1948年7月出生在德国路德维希堡。他的家庭背景是农民和工人。
  • 弗雷德里克·奥古斯特·巴托尔迪弗雷德里克·奥古斯特·巴托尔迪(Frédéric Auguste Bartholdi,1834年4月2日-1904年10月4日),法国雕塑家,美国纽约著名的自由女神像的作者。1834年巴托尔迪出生于法国阿尔萨斯,在
  • 和燕路和燕路是南京市城北的主干道之一,长约8公里,南起中央北路,北至燕子矶江边,与永济大道相接,穿过迈皋桥、晓庄广场等城北重要地段。
  • CD VideoCD Video是一种在1980年代后期至1990年代初期流通市面的影音媒体,它的特点是音轨和影像讯号都分别放在一张普通大小的光盘上,在一般的CD唱机上只能播放音轨部分,而影像部分却不