堆和优先队列

作者: 你期待的花开 | 来源:发表于2017-02-11 18:00 被阅读76次

堆又称为优先队列,其通常包括至少两种操作:入队操作和出队操作。

普通队列与优先队列

普通队列:先进先出,后进后出
优先队列:出队序列和入对序列无关,只与优先级有关


为什么选择优先队列?

动态的选择优先级最高的任务执行
在N个元素中选出前M个元素
排序的时间复杂度为O(NlogN)
使用优先队列时间复杂度为O(NlogM)
当N的较大,M较小的时候,使用优先队列比较快

优先队列的实现
类型 入队 出队
普通数组 O(1) O(n)
顺序数组 O(n) O(1)
O(lgn) O(lgn)

采用普通数组,依次入队,选择出队
顺序数组,排列入队
堆,平衡入队与出队的时间,使其保持在O(lgn)
采用普通数组,最差的情况为O(n^2)

完全二叉树

叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树。

二叉堆

二叉堆是一种特殊的堆,二叉堆是完全二元树(二叉树)或者是近似完全二元树(二叉树)。二叉堆有两种:最大堆和最小堆。最大堆:父结点的键值总是大于或等于任何一个子节点的键值;最小堆:父结点的键值总是小于或等于任何一个子节点的键值。

二叉堆满足二个特性:

1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。
2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。

相关文章

  • 一步一步学习数据结构和算法 (三) 堆和堆排序

    堆和堆排序 堆排序 堆和优先队列 普通队列: 先进先出; 后进后出. 优先队列: 出队顺序和入队顺序无关, 和优先...

  • 动画 | 什么是二叉堆?

    二叉堆的解释 (动态选择优先级最高的任务执行) 堆,又称为优先队列。虽然名为优先队列,但堆并不是队列。堆和队列是两...

  • 堆和优先队列

    堆又称为优先队列,其通常包括至少两种操作:入队操作和出队操作。 普通队列与优先队列 普通队列:先进先出,后进后出优...

  • 数据结构——优先队列和堆

    目录 1、优先队列 1.1、什么是优先队列 1.2、优先队列的实现 2、堆 2.1、什么是堆 2.2、堆的类型 2...

  • 看图说话数据结构之二项队列(优先队列)——原理解析

    数据结构之二叉堆(优先队列)——原理解析,数据结构之二叉堆(优先队列)——java实现,数据结构之左式堆(优先队列...

  • 数据结构-堆

    堆(heap)又被为优先队列(priority queue)。尽管名为优先队列,但堆并不是队列。回忆一下,在队列中...

  • 5 堆和优先队列

    定义 优先队列:priority queue 取出元素的顺序是依据元素的优先权大小,而不是元素进入队列的先后顺序两...

  • 【二】优先队列和堆

    堆 ----待补充--- java中的优先队列 PriorityQueue为java中的优先队列((a,b)->b...

  • 优先队列(堆)

    优先队列 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当...

  • 堆(优先队列)

    定义 堆(heap)也被称为优先队列(priority queue)。是一种特殊的树状数据结构。 普通队列是先进先...

网友评论

    本文标题:堆和优先队列

    本文链接:https://www.haomeiwen.com/subject/vgkoittx.html