算法导论: 第6章

6-2 对d叉堆的分析

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)总是与最右上角比较,如果等于,则返回。

如果大于,去除右上角元素所在的这一行。

如果小于,去除右上角元素所在的这一列。

 

posted @ 2014-04-08 21:07  鬼蜮流风  阅读(150)  评论(0编辑  收藏  举报