优先队列

✍ dations ◷ 2025-02-24 01:07: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。

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

相关

  • 好莱坞报道《好莱坞报道》(英语:The Hollywood Reporter,简称为《THR》,又译为好莱坞报道者)是一本美国数码及实体印刷的杂志及网站,重点关注好莱坞电影、电视节目及娱乐界。它由威廉·威尔
  • 硬块乳房肿块是在乳房上的和周围其他乳房组织不同的肿起物。很多情况都能引起这种体征/症状。由于近10%的乳房肿块最终被诊断为乳腺癌,因而对于有乳房肿块的女性来说,接受合适的评
  • 知识论知识论是探讨知识的本质、起源和范围的一个哲学分支。目前知识论和认识论之间的关系存在争议,有人认为它们是同一个概念,而也有人认为它们其实是存在一些密切联系的两个不同概
  • 粟岛粟岛(日语:あわしま)是位于日本新潟县北部日本海中的一个岛屿,全岛属新潟县岩船郡粟岛浦村管辖。面积9.86平方公里。岛屿东侧有两个村庄。粟岛东海岸发现了5处绳文时代的遗迹,显
  • 约翰·威廉·戴维斯约翰·威廉·戴维斯(英语:John William Davis,1873年4月13日-1955年3月24日),出生于西弗吉尼亚州克拉克斯堡,美国政治家、外交官、律师。曾担任美国众议院议员(1911年-1913年)、首席
  • 赵增益赵增益(1920年-1993年2月27日)。中国山西平定县宋家庄村人。1937年5月,参加山西牺牲救国同盟会,1937年10月加入中国共产党。抗日战争时期,历任晋东抗日游击队组织股长、八路军129
  • CrowdOSCrowdOS是面向群智感知的泛在操作系统,是针对群智感知研究领域所设计的一个系统软件平台,由西北工业大学研制。该平台建立在原始操作系统之上,由诸多核心机制和可扩展的功能模
  • 纯恋纯恋 (すみれ、1987年7月28日-2009年6月11日),原名石川安里沙(いしかわ ありさ),是日本岩手县胆泽町出生的女性模特儿,她是代表于潮流时尚杂志《小恶魔ageha》的专属模特儿,亦在同时
  • 布卢姆综合症蛋白2KV2, 2MH9, 2RRD, 3WE2, 3WE3, 4CDG, 4CGZ, 4O3M· p53 binding · single-stranded DNA binding · ATP-dependent DNA helicase activity · helicase activity · p
  • 采邑改革“采邑改革”是西欧封建制度发展的重要基石,是8世纪上半叶由发起的土地分配改革制度,它将原有的无条件赏赐改为了有条件分封。