鱼C论坛

 找回密码
 立即注册

算法导论第六章6.2维护堆的性质课后答案

已有 1315 次阅读2014-1-1 20:34 |个人分类:数据结构与算法

6.2-1参照图6.2的方法,说明MAX-HEAPIFY(A,3)在数组A={27,17,3,16,13,10,1,5,7,12,4,8,9,0}
上的操作过程。


操作过程参照书中图6.2,非常类似。


6.2-2参考过程MAX-HEAPIFY,写出能够维护相应最小堆的MIN-HEAPIFY(A,i)的伪代码,并比较
MIN-HEAPIFY与MAX-HEAPIFY的运行时间。


把原书伪代码A[l]>A[i]与A[r]>A[largest]都改成小于就OK了。


6.2-3当元素A[i]比其孩子的值都大时,调用MAX-HEAPIFY(A,i)会有什么结果?


调用后,原最大堆不会有任何元素位置的改变。


6.2-4当i>A.heap-size/2时,调用MAX-HEAPIFY(A,i)会有什么结果?


那么i都是叶子结点,所以原最大堆也不会改变。


6.2-5MAX-HEAPIFY的代码效率较高,但第10行中的递归调用可能例外,它可能使某些编译器产生
低效的代码。请用循环控制结构取代递归,重写MAX-HEAPIFY代码。

  1. MAX-HEAPIFY(A,i)  
  2. while (i<=A.heap-size/2)//由于6.2-4知道,i>A.heap-size/2以后,最大堆不会有任何改变。  
  3. {                       //这样也可以减少循环次数。  
  4.   l=LEFT(i)  
  5.   r=RIGHT(i)  
  6.   if l<=A.heap-size and A[l]>A[i]  
  7.      largest=l  
  8.   else largest=i  
  9.   if r<=A.heap-size and A[r]>A[largest]  
  10.      largest=r  
  11.   if largest!=i  
  12.      exchange A[i]<->A[largest]  
  13.   i=largest//把largest赋值给i,然后继续进行MAX-HEAPIFY(A,i)循环。  
  14. }  


6.2-6 证明:对一个大小为n的堆,MAX-HEAPIFY的最坏情况运行时间为Ω(lgn).



由书中知:T(n)<=T(2n/3)+Θ(1) 最坏情况发生在树最底层半满时候,所以
T(n)最坏=T(2n/3)+Θ(1) 根据主定理的第二种情况n^(log(3/2,1))=Θ(1) 
T(n)最坏=Θ(lgn) 而Θ(lgn)包含了Ω(lgn).

路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-17 02:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部