6-2 对d叉堆的分析return
a)用A[1]表示根,则其儿子为A[2]到A[d+1],其孙子为A[d+2]到A[d^2+d+1],以此类推。因此有
d-parent(i):
return [(i-2)/d + 1] (方括号表示下取整)
d-child(i,j):
return d(i-1) + j + 1
b)因为每一个节点有d个儿子,因此含n个元素的d叉堆的高度为O(logdn) = O(lgn/lgd)。
c)因为输出最大值后的调整,须要从d个儿子中选出最大的,故每层的调整都须要d次,有logdn层,故为O(d*logdn)。
d)树的高度,为O(logdn)。
e)跟插入同样,为O(logdn)。
6-3 Young氏矩阵
c) 提取出最小元素后,须要有一个调整过程。将下方或者右方较小的元素提上来放到A[1,1]处,而后接着调整。因此有T(m,n) = T(m-1,n)|T(m,n-1) + 1。最坏是m和n每次都轮流减1,即为O(m+n)。
d)插入元素后,将它跟左方以及上方的元素比较,跟较大的那个交换。重复之,直到没有左方或者上方的元素比它大。很显然,仍是 O(m+n)
e)创建矩阵,须要不断插入n^2个元素,复杂度为2n^3,而后不断Extract-min便可。
f)老是与最右上角比较,若是等于,则返回。
若是大于,去除右上角元素所在的这一行。
若是小于,去除右上角元素所在的这一列。