[Algorithm] Heap & Priority queue
这里只是简单的了解,具体内容详见推荐的原链接
注意堆和树的区别
堆就是优先级队列的实现形式
堆排序
排序过程
Ref: 排序算法之堆排序(Heapsort)解析
- 第一步(构造初始堆):

{7, 5, 6, 1, 3, 2, 4}已经满足了大根堆,第一步完成
- 第二步(首尾交换,断尾重构):

- 第三步(重复第二步,直至所有尾巴都断下来)
堆的介绍
Ref: 数据结构:堆(Heap)
STL的 Heap
Outline
Ref: 随笔分类 - 数据结构_算法【博主写得很卖力】
- 二叉堆(一)之 图文解析 和 C语言的实现
- 左倾堆(一)之 图文解析 和 C语言的实现
- 斜堆(一)之 C语言的实现
- 二项堆(一)之 图文解析 和 C语言的实现
- 斐波那契堆(一)之 图文解析 和 C语言的实现
FAQ: Why is the C++ STL priority queue implemented using a binary heap instead of a Fibonacci heap?
Fibonacci heap is better than Binary heap just theoretically.
Because Binary heap is way faster than the Fibonacci heap.
A binary heap is just an array and the methods used are quite simple.
实现 "优先级队列" 的堆
二叉堆
二叉堆是完全二元树或者是近似完全二元树,它分为两种:最大堆和最小堆。
堆 (优先级队列) 的合并
左倾堆
目的
当优先队列中涉及到"对两个优先队列进行合并"的问题时,二叉堆的效率就无法令人满意了,而本文介绍的左倾堆,则可以很好地解决这类问题。
特点
不满节点:是指该该节点的左右孩子至少有一个为NULL。叶节点的NPL为0,NULL节点的NPL为-1。
零距离(英文名NPL,即Null Path Length):则是从一个节点到一个"最近的不满节点"的路径长度
性质

[性质1] 节点的键值小于或等于它的左右子节点的键值。
[性质2] 节点的左孩子的NPL >= 右孩子的NPL。[故谓之“左倾”]
[性质3] 节点的NPL = 它的右孩子的NPL + 1。
斜堆
斜堆是左式堆的自调节形式,左式堆和斜堆的关系类似于伸展树和AVL树的关系。
斜堆具有堆序的性质,但是没有结构的限制,这样的话一次的操作最坏的情况时O(n),但是连续m次操作总的复杂度O(mlogn)。
二项堆
二项树是一种递归定义的有序树。它的递归定义如下:
(01) 二项树B0只有一个结点;
(02) 二项树Bk由两棵二项树B(k-1)组成的,其中一棵树是另一棵树根的最左孩子。

二项堆的性质
[性质一] Bk共有2k个节点。
[性质二] Bk的高度为k。
[性质三] Bk在深度i处恰好有C(k,i)个节点,其中i=0,1,2,...,k。
[性质四] 根的度数为k,它大于任何其它节点的度数。
斐波那契堆 (Fibonacci heap)
堆中一种,它和二项堆一样,也是一种可合并堆;可用于实现合并优先队列。

更好的平摊分析性能
斐波那契堆比二项堆具有更好的平摊分析性能,它的合并操作的时间复杂度是O(1)。
与二项堆一样,它也是由一组堆最小有序树组成,并且是一种可合并堆。
与二项堆不同的是,斐波那契堆中的树不一定是二项树;而且二项堆中的树是有序排列的,但是斐波那契堆中的树都是有根而无序的。
End.
[Algorithm] Heap & Priority queue的更多相关文章
- Heap & Priority Queue
Heap & Priority Queue Definition & Description: In computer science/data structures, a prior ...
- STL之heap与优先级队列Priority Queue详解
一.heap heap并不属于STL容器组件,它分为 max heap 和min heap,在缺省情况下,max-heap是优先队列(priority queue)的底层实现机制.而这个实现机制中的m ...
- 优先队列Priority Queue和堆Heap
对COMP20003中的Priority queue部分进行总结.图片来自于COMP20003 queue队列,顾名思义特点先进先出 priority queue优先队列,出来的顺序按照优先级prio ...
- 算法与数据结构基础 - 堆(Heap)和优先级队列(Priority queue)
堆基础 堆(Heap)是具有这样性质的数据结构:1/完全二叉树 2/所有节点的值大于等于(或小于等于)子节点的值: 图片来源:这里 堆可以用数组存储,插入.删除会触发节点shift_down.shif ...
- 第二十八篇 玩转数据结构——堆(Heap)和有优先队列(Priority Queue)
1.. 优先队列(Priority Queue) 优先队列与普通队列的区别:普通队列遵循先进先出的原则:优先队列的出队顺序与入队顺序无关,与优先级相关. 优先队列可以使用队列的接口,只是在 ...
- [Algorithm] Heap data structure and heap sort algorithm
Source, git Heap is a data structure that can fundamentally change the performance of fairly common ...
- 算法上机题目mergesort,priority queue,Quicksort,divide and conquer
1.Implement exercise 2.3-7. 2. Implement priority queue. 3. Implement Quicksort and answer the follo ...
- 《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅴ
命题Q.对于一个含有N个元素的基于堆叠优先队列,插入元素操作只需要不超过(lgN + 1)次比较,删除最大元素的操作需要不超过2lgN次比较. 证明.由命题P可知,两种操作都需要在根节点和堆底之间移动 ...
- 《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅳ
2.4.4 堆的算法 我们用长度为 N + 1的私有数组pq[]来表示一个大小为N的堆,我们不会使用pq[0],堆元素放在pq[1]至pq[N]中.在排序算法中,我们只能通过私有辅助函数less()和 ...
随机推荐
- numba,让python速度提升百倍
python由于它动态解释性语言的特性,跑起代码来相比java.c++要慢很多,尤其在做科学计算的时候,十亿百亿级别的运算,让python的这种劣势更加凸显. 办法永远比困难多,numba就是解决py ...
- Linux之Shell编程(14)
变量: 定义变量的规则: 1)变量名可以由字母.数字和下划线组成,但不能以数字开头 2)等号两侧不能有空格 3)变量名一般习惯大写 将命令的返回值赋值给变量: 1)使用``将命令括起来 2)使用$() ...
- Jmeter 从数据库查询多个字段,依次传给登录接口怎么实现?
问题背景: 博文“Jmeter 如何把数据库的数据依次获取作为参数传入下一个请求?附栗子”某天有人留言如下: 看了下当时写的文章,如果从数据库查询多个字段,依次传给登录接口,确实不能合理实现,所以,特 ...
- 基于wanAndroid-项目实战
# QzsWanAndroid - [基于 wanandroid.com 开发的 MVP + Retrofit2 + RxJava2 +okhttp3 开发的 Android APP](https:/ ...
- 特殊字符处理 java-jsp
public String dealStr(String name){ String newStr=""; if(name != null && name.leng ...
- NLP(三) 预处理
分词 from nltk.tokenize import LineTokenizer,SpaceTokenizer,TweetTokenizer from nltk import word_token ...
- 从入门到入土的JS 随笔day02 新手向
讲讲自增自减和循环语句及三元一次表达式: 一.自增自减实际上就是按照顺序来解读代码, 例如,a++;代表了a先进行了计算,运算完毕后,才进行增加: ++a呢,则是先进行了自增,值加一后再进行运算: 如 ...
- P3810 【模板】三维偏序(陌上花开)cdq分治
传送门:https://www.luogu.org/problemnew/show/P3810 cdq分治的模板题,第一层外部排序,第二层cdq归并排序,这个时候不用考虑第一次的顺序,第三次用树状数组 ...
- HDU- 3605 - Escape 最大流 + 二进制压位
HDU - 3605 : acm.hdu.edu.cn/showproblem.php?pid=3605 题目: 有1e5的的人,小于10个的星球,每个星球都有容量,每个人也有适合的星球和不适合的星球 ...
- HDU - 5128The E-pang Palace+暴力枚举,计算几何
第一次写计算几何,ac,感动. 不过感觉自己的代码还可以美化一下. 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5128 题意: 在一个坐标系中,有n个 ...