当前位置:   article > 正文

优先队列的时间复杂度_priority复杂度

priority复杂度

优先队列的时间复杂度?

这个问题主要分为两个部分:优先队列是什么?优先队列的时间复杂度是多少?

优先队列是什么?

优先队列,英文名:Priority Queue。顾名思义,优先队列是一种特殊的队列,普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。

在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。

优先队列是通过堆实现的,通过完全二叉树实现的小顶堆或大顶堆。

详情参考文章:c++优先队列(priority_queue)用法详解

优先队列通常称为“堆”

在计算机科学中,堆是一种特殊的基于树的数据结构,满足堆属性:在最大堆中,对于任何给定的节点 C,如果 P 是 C 的父节点,则 P 的键(值)为 大于或等于 C 的键。在最小堆中,P 的键小于或等于 C 的键(值)。位于堆“顶部”的节点(没有父节点)称为根节点。

堆是一种称为优先级队列的抽象数据类型的最有效实现,事实上,优先级队列通常称为“堆”,无论它们如何实现。 在堆中,最高(或最低)优先级的元素始终存储在根中。 然而,堆不是排序结构; 它可以被认为是部分有序的。 当需要重复删除具有最高(或最低)优先级的对象时,或者当插入需要与根节点的删除穿插时,堆是一种有用的数据结构。

堆的常见实现是二叉堆,其中树是完全二叉树,如图所示。 当堆是完全二叉树时,它具有尽可能小的高度——具有 N 个节点且每个节点都有分支的堆的高度始终为 log2N。

image-20231222230743267

优先队列的时间复杂度是多少?

优先队列用堆实现,只是需要构建初始堆,这个时间复杂度是O(n);插入和删除只是修改了堆顶和堆底,不需要所有节点都排序,只是需要再次调整好堆。

堆的时间复杂度

pushpoptopempty
O(log2n)O(log2n)O(1)O(1)

因此,优先队列的时间复杂度为 O(log2n)。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/446460
推荐阅读
  

闽ICP备14008679号