堆与优先队列

 堆的定义:n个元素的序列 {k1, k2, ..., kn} 称之为堆,当且仅当满足一下条件时:

(1)  \bg_white _{ki}  \geq  _{k2i}  且  _{ki}  \geq  _{k2i+1}  或  (2)  _{ki}  \leq  _{k2i}  且  _{ki}  \leq  _{k2i+1}    \left ( 1 \leq i \leq \left \lfloor \right n/2 \rfloor \right )

 堆的存储:我们用一维数组来存储堆

 堆的性质:堆实质上是满足如下性质的完全二叉树:树中所有非终端节点的值均不大于(或不小于)其左右孩子结点的值

 堆的示例:

                

           大根堆                      小根堆

 堆的调整:从r[2s]和r[2s+1]中选出关键字较大者,假设r[2s]的关键字较大,比较r[s]和r[2s]的关键字

                      1.若r[s].val >= r[2s].val,无需做任何调整

      2.若r[s].val < r[2s].val,交换r[s]与r[2s],若以r[2s]为根的子树不是堆,重复上述过程,将以r[2s]为根的子树调整为堆

       直至进行到叶子结点为止

      这就是调整堆的方法:筛选法

 堆的建立:在一棵完全二叉树中利用筛选法,从最后一个分支结点floor(n/2),...,1的结点作为根的子树都调整为堆即可


 优先队列:基于普通队列的基本操作,优先队列都有,只不过每次出队的都是优先级最大的那个元素,在它的内部逻辑中是用

      是用堆实现的


 相关题目题解链接:

 https://blog.csdn.net/weixin_41602489/article/details/99568927

 https://blog.csdn.net/weixin_41602489/article/details/99585503

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值