码迷,mamicode.com
首页 > 其他好文 > 详细

优先队列和堆

时间:2020-03-06 13:18:51      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:利用   输入   存储   inf   功能   实现   个数   mamicode   排序   

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

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

怎么理解二叉堆和性质?

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

二叉堆性质:

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

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

优先队列和堆

标签:利用   输入   存储   inf   功能   实现   个数   mamicode   排序   

原文地址:https://www.cnblogs.com/cool-fun/p/12425694.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!