演算法導論 6 3 Young氏矩陣

2021-06-09 12:18:55 字數 2707 閱讀 6956

最小young氏矩陣和最小堆的思想差不多,可以通過比較兩者的同異來理解young氏矩陣

不同點:

min-heap

min-young

堆頂(最小值)

h[1]

y[i][j]

最後乙個元素的位置

h[n]

y[n][n]

最後乙個元素

不一定是最大值

一定是最大值

parent

h[i]的parent是h[i/2]

y[i][j]的parent是y[i-1][j]和y[i][j-1]

child

h[i]的child是h[i*2]和h[i*2+1]

y[i][j]的child是y[i+1][j]和y[i][j+1]

find(x)

從h[1]開始遍歷

從西南角開始,或當前值小於key,則向東走,否則向北走

相同點:

1.堆頂是最小值所在的位置

2.parent的值<=child的值

3.空條件:堆頂元素值為init

4.滿條件:最後乙個元素的值不為init

5.delete:插入到最後乙個元素的位置,然後向parent調整

6.extract:提取堆頂元素,將堆頂元素置為init,然後child調整

a)不唯一

2 3 4 5

8 9 12

14 16

c)提取y[1][1],並用ox7fffffff填充。然後向右下調整

young-extracr-min(y)

1 if y[1][1] == 0x7fffffff

2 then error "heap underflow"

3 min

4 a[1][1]

5 max-heapify(y, 1, 1)

6 return min

//遞迴

min-youngify(y, i, j)

1 min

2 mini

3 minj

4 if i < m and y[i+1][j] < min

5 mini

6 minj

7 min

8 if j < n and y[i+1][j+1] < min

9 mini

10 minj

11 min

12 if i != mini or j != minj

13 exchange y[i][j] y[mini][minj]

14 min-youngify(y, mini, minj)

d)//若表未滿,插入到右下角,然後向左上調整

min-young-insert(y, key)

1 if y[m][n] < 0x7fffffff

2 then error "young overflow"

3 y[m][n]

4 flag

5 i

6 j

7 max

8 maxi

9 maxj

10 while true

11 if i > 1 and max < y[i-1][j]

12 maxi

13 maxj

14 max

15 if j > 1 and max < y[i][j-1]

16 maxi

17 maxj

18 max

19 if max == y[i][j]

20 break

21 exchange y[maxi][maxj] y[i][j]

22 i

23 j

24 max

e)排序過程為:

取下矩陣y[1][1]元素,o(1)

將y[1][1]置為0x7fffffff,o(1)

調整矩陣,o(n)

對n^2個結點各執行一次,因此時間為o(n^3)

f)從左下角開找,若比它小,則向上,則比它大,則向右找

find-young-key(y, key)

1 i

2 j

3 while i >= 1 and j <= n

4 if y[i][j] = key

5 then return true

6 else if y[i][j] < key

7 then j++

8 else if y[i][j] > key

9 then i--

10 return false

標頭檔案產品**

測試**

演算法導論思考題 6 3Young 矩陣

三.young 氏矩陣的相關演算法.題 乙個 m n 的 young 氏矩陣 young tableau 是乙個 m n 的矩陣,其中每一行的資料都從左到右排序,第一列的資料都從上到下排序.young 氏矩陣中可能會有一些 資料項,表示不存在的元素.所以,young 氏矩陣可以用來存放 r mn 個...

演算法導論 矩陣乘法strassen演算法

矩陣運算在做科 算時是必不可少的,如果採用matlab來計算,這倒也容易。但是如果是自己寫c或者c 一般而言,需要做三次迴圈,其時間複雜度就是o n 3 上圖給出了我們一般會採用的方法,就是對應元素相乘和相加。如果把c a b進行分解,可以看出,這裡需要進行8次的乘法運算 分別是 r a e b g...

演算法導論 矩陣鏈乘法

問題描述 給定有n個連乘矩陣的維數,要求計算其採用最優計算次序時所用的乘法次數,即所要求計算的乘法次數最少。例如,給定三個連乘矩陣的維數分別是10 100,100 5和5 50,採用 a1a2 a3,乘法次數為10 100 5 10 5 50 7500次,而採用a1 a2a3 乘法次數為100 5 ...