最小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 ...