算法导论第三版习题6.3

6.3-1

(a) A.length=9 ,故从 i=A.length/2=4 开始调用MAX-HEAPIFY(A,i), A[4]<A[9]<A[8] ,故交换 A[4]A[8] 得到新的序列 A1={5,3,17,22,84,19,6,10,9}
(b) 接下来调用MAX-HEAPIFY(A,3), A[7]<A[3]<A[6] ,故交换 A[3]A[6] 得到 A2={5,3,19,22,84,17,6,10,9}
(c) 第三步调用MAX-HEAPIFY(A,2), A[2]<A[4]<A[5] ,故交换 A[2]A[5] 得到 A3={5,84,19,22,5,17,6,10,9}
(d) 第四步调用MAX-HEAPIFY(A,1), A[1]<A[3]<A[2] ,故交换 A[1]A[2] 得到 A4={84,5,19,22,3,17,6,10,9} ;接下来由于 A[2]<A[4] ,故又调用MAX-HEAPIFY(A,2),交换 A[2]A[4] 得到 A′′4={84,22,19,5,3,17,6,10,9} ;在调用MAX-HEAPIFY(A,4)交换 A[4]A[8] 最后得到 A4={84,22,19,10,3,17,6,5,9}

6.3-2

因为 i A.length/2递减到1的过程中,能够依次保持以下标大于 i 的节点为根结点的子树都是最大堆,从而保持循环不变式

6.3-3

首先包含n个元素的堆高度为 lgn ,则当高度为 h 的这一层节点全满时节点最多,此时

N=2lgnh>2lgn1h=n/2h+1

故至多有 n/2h+1 个节点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值