6.1 (用插入的方法建堆)我们可以通过反复调用MAX-HEAP-INSERT实现向一个堆中插入元素,考虑BUILD-MAX-HEAP的如下实现方式:
BULID-MAX-HEAP(A)
A.heap-size=1
for i=2 to A.length
MAX-HEAP-INSERT(A,A[i])
a.当输入数据相同的时候,BULID-MAX-HEAP和BULID-MAX-HEAP’生成的堆是否总是一样?瑞国是,请证明;否则,请举一个反例。
b.证明:在最坏情况下,调用BULID-MAX-HEAP’建立一个包含n个元素的堆的时间复杂度是Θ(nlgn).
(a)不一样。就拿书中建立build-max-heap时的例子。A={4,1,3,2,16,9,10,14,8,7}
build-max-heap生成最大堆过程:A={4,1,3,2,16,9,10,14,8,7}
A={4,1,3,14,16,9,10,2,8,7}
A={4,1,10,14,16,9,3,2,8,7}
A={4,16,10,14,7,9,3,2,8,1}
最终生成的最大堆为:A={16,14,10,8,7,9,3,2,4,1}
build-max-heap'生成最大堆过程:A={4,1}
A={4,1,3}
A={4,2,3,1}
A={16,4,3,1,2}
A={16,4,9,1,2,3}
A={16,4,10,1,2,3,9}
A={16,14,10,4,2,3,9,1}
最终生成的最大堆为: A={16,14,10,8,2,3,9,1,4}
6.2(对d叉堆的分析)d叉堆与二叉堆很类似,但(一个可能的例外是)其中的每个非叶结点有d个孩子,而不是仅