算法導論: 第6章

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)老是與最右上角比較,若是等於,則返回。

若是大於,去除右上角元素所在的這一行。

若是小於,去除右上角元素所在的這一列。

相關文章
相關標籤/搜索