演算法設計與分析 矩陣連乘問題(動態規劃)

2022-01-11 11:34:15 字數 1775 閱讀 2849

引出問題之前我們先來複習一下矩陣乘積的標準演算法。

int ra,ca;//

矩陣a的行數和列數

int rb,cb;//

矩陣b的行數和列數

void

matrixmultiply()

c[i][j]=sum;}}

}

給定n個矩陣{a1,a2,…,an},其中ai與ai+1是可乘的,i=1,2…,n-1。如何確定計算矩陣連乘積的計算次序,使得依此次序計算矩陣連乘積需要的數乘次數最少。例如,給定三個連乘矩陣的維數分別是10*100,100*5和5*50,採用(a1a2)a3,乘法次數為10*100*5+10*5*50=7500次,而採用a1(a2a3),乘法次數為100*5*50+10*100*50=75000次乘法,顯然,最好的次序是(a1a2)a3,乘法次數為7500次。

加括號的方式對計算量有很大的影響,於是自然地提出矩陣連乘的最優計算次序問題,即對於給定的相繼n個矩陣,如何確定矩陣連乘的計算次序,使得依此次序計算矩陣連乘積需要的數乘次數最少。

矩陣連乘也是catalan數的乙個常用的例子,關於時間複雜度的推算需要參考離散數學關於catalan的內容。

下面考慮使用動態規劃法解矩陣連乘積的最優計算次序問題。

問題的最優子結構性質是該問題可以用動態規劃求解的顯著特徵!!!

//遞迴下乙個資料

演算法設計與分析 矩陣連乘順序問題

define n 50 include include class matrix 建構函式,作變數初始化工作,為指標分配記憶體空間 matrix matrix p new int n 析構函式,釋放記憶體 matrix matrix delete m delete s delete p 處理鍵盤輸入...

演算法分析 動態規劃 矩陣連乘

最優子結構性質 假設a1 a2 a3 an在k處斷開為最優,那麼只需要保證a1 ak和ak an兩個子串行的分割也是最優,就能保證該結果是最優。子問題重疊性 對於多個矩陣連乘,不同的分割次序會導致計算次數的不同,所以要找到最優化的分割,減少計算量。a1a2 a3a4 a5a6 30 35 35 15...

演算法設計 矩陣連乘問題

白天什麼也沒學,晚上才終於拿著筆,對著 寫寫畫畫,終於看明白是怎麼計算的了。以這6個矩陣連乘作為例子 a1a2 a3a4 a5a6 30 35 35 15 15 5 5 10 10 20 20 25 1 首先,要明白兩個矩陣相乘所需要做的乘法次數 2 由於連乘的矩陣必須滿足,前乙個矩陣的列數 後乙個...