堆及优先级队列

一、基本概念

:近似的完全二叉树(用数组A[1...n]存储),除了最底层以外,该树是完全充满的,而且是从左向右填充。在数组A中,A.length=n表示数组元素个数,A.heap-size表示A中堆元素的个数。

基本操作:(下标为i的元素寻找父结点及其左右孩子结点)

PARENT\left ( i \right )=\left \lfloor i/2 \right \rfloor

LEFT\left ( i \right )=2i

RIGHT\left ( i \right )=2i+1

二、维护堆的性质

MAX-HEAPIFY是用于维护最大堆性质的重要过程。输入数组A和一个下标i。在调用该函数时,假定根节点i的左子树和右子树均为最大堆。A[i]可能小于其孩子,于是通过将A[i]在堆中逐级下降(该操作也被称为下滤)来使得以A[i]为根的树也满足最大堆性质。

解释:1-7行选出A[i],A[LEFT(i)]和A[RIGHT(i)]中最大的,将其下标存在变量largest中。A[i]最大则已满足最大堆。否则,将其值与孩子结点中最大的交换,此时以这个孩子结点为根的树又可能违反最大堆性质,递归调用MAX-HEAPIFY,直到叶子结点。

举例MAX-HEAPIFY(A,2)

时间复杂度:O\left ( lgn \right )O\left ( h \right )(h为当前结点高度)。

复杂度分析:最坏情况需要递归调用MAX-HEAPIFY直到叶子结点ÿ

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值