算法导论第三版习题6.3

来源:互联网 发布:迪卡侬14.9背包知乎 编辑:程序博客网 时间:2024/06/03 23:44

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

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

6.3-3

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

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

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

0 0
原创粉丝点击