优先队列和堆

Posted cool-fun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优先队列和堆相关的知识,希望对你有一定的参考价值。

怎么理解优先队列和堆的关系?

简单来说:堆排序是一种排序算法,利用堆结构完成排序的功能;优先队列是一种数据结构,它是利用堆来实现。
具体来说,堆排序过程:建堆→堆顶就是最大(或小)值,然后堆顶跟最后一个元素交换→调整堆,反复这个过程,直到堆里面所有元素都交换好;
而优先队列:建堆→堆顶元素就是优先级最高(或最低)的元素了,可以利用优先级这个数据结构来描述某个问题,比如有一批不断输入的日期,我想要在任何时刻都能以O(1)的速度得到已经输入的日期中的最早日期,那么就可以用优先队列这个数据结构存储日期元素啦。

怎么理解二叉堆和性质?

二叉堆可以认为是一个完全二叉树,把元素列成一个树的形状,元素一层一层的往下放,直到放不下为止。
技术图片

二叉堆性质:

简单来说:堆的每个子节点都要小于自己父节点的值,反之亦可,主要是根据自己对于优先级的定义。
技术图片

注意:并不是每个父节点都要大于每个子节点,如图第三层右节点16就比第四层左节点19要小,但依然成立二叉堆的性质。可以得出结论:子节点只需小于自身父节点即可。

以上是关于优先队列和堆的主要内容,如果未能解决你的问题,请参考以下文章

优先队列和堆

优先队列Priority Queue和堆Heap

堆和堆的应用:堆排序和优先队列

数据结构与算法——优先队列和堆

数据结构算法 - 优先级队列和堆排序

数据结构:优先队列和堆(JS篇)