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

2021-04-21 09:23:19 字數 1035 閱讀 6650

三.young 氏矩陣的相關演算法.

題:乙個 m*n 的 young 氏矩陣(young tableau) 是乙個 m*n 的矩陣,其中每一行的資料都從左到右排序,第一列的資料都從上到下排序.young 氏矩陣中可能會有一些  ∞ 資料項,表示不存在的元素.所以,young 氏矩陣可以用來存放 r<= mn 個有限的元素.

a).畫乙個包含 的4*4 的young 氏矩陣.

b).給出乙個在非空 m*n 的 young  氏矩陣上實現 extract-min 演算法,使其執行時間為o(m+n).

c).說明如何在o(m+n)時間內,將乙個新元素手入到乙個未滿的 m*n young 氏矩陣中.

d).給出乙個時間複雜度為 o(n^3) 的對 n*n young 氏矩陣排序的演算法.

f).給出乙個執行時間為o(m+n) 的演算法,來決定乙個給定的數是否存在於乙個給定的 m*n  的 young 氏矩陣當中.

//題目文字引用自http://blog.csdn.net/atyuwen/archive/2007/10/15/1826233.aspx

解答:

b)演算法一:extract-min 演算法取出y[0][0],然後調整young矩陣,使得演算法調整的是新的young矩陣。必須從向右和向下的方向選取乙個元素代替被選出的元素,所以,其調整過程有點像堆的maxheapify,一直調整到最後乙個元素。

演算法二:e(m1,m2,n1,n2)演算法取出y[m1][n1],然後面臨的問題是我們要選擇的是替代的哪乙個呢,我們需要從y[m1+1,n1]或者y(m1,n1,)中選擇小的,如果我們選擇了y[m1+1,n1],接著需要進行e(m1+1,m2,n1,n2),我們選擇了y(m1,n1,)時需要進行e(m1+1,m2,n1,n2)。

c)在最後乙個位置y[m-1][n-1]插入x,此時需要比較x和左邊和上邊的元素。選擇最大的數來放入x的位置,不停地向左向上,x元素的左邊和上邊的元素都小於x,或者到達了邊界。

d)n*n的 extract-min 演算法,每次抽出剩下的元素中最小的元素。

f)以行為單位,比較被查詢的元素x是不是大於等於行首元素並且小於等於行尾元素,則

演算法導論 6 3 Young氏矩陣

最小young氏矩陣和最小堆的思想差不多,可以通過比較兩者的同異來理解young氏矩陣 不同點 min heap min young 堆頂 最小值 h 1 y i j 最後乙個元素的位置 h n y n n 最後乙個元素 不一定是最大值 一定是最大值 parent h i 的parent是h i 2...

演算法導論 思考題 4 3

a.利用主方法可得,t n n的log3 4次方 b.n f n lgn,不能應用主方法 共log3 n 1層,每層代價n lg n 3 的i次方 最後一層共n個 1 的結點,代價為 n t n n lg n 3 的i次方 n n lgn n n log3 2 n o n 又因為t n 最後一層代價...

演算法導論 思考題 8 4

寫一下我的思路,大概是對的,詳細證明不出來。設藍色水壺為a,紅色為b 先取乙個a1,對所有的b做一次比較,可以將b分為兩個部分,一部分大於a1,一部分小於a1 再取乙個a2,將b分為三個部分 再取a3,將b分為四個部分 假設現在b被分成了k個部分,b1,b2,b3.bk,每次取ai,都從b集合的一半...