矩陣連乘(動態規劃)

2021-08-11 03:20:22 字數 815 閱讀 3913

題目描述:給定n個矩陣{a1,a2,…,an},其中ai與ai+1是可乘的,i=1,2 ,…,n-1。如何確定計算矩陣連乘積的計算次序,使得依此次序計算矩陣連乘積需要的數乘次數最少。例如:

a1= ; a2= ;a3= ;a4= ;a5= ;a6= ;

最後的結果為:((a1(a2a3))((a4a5)a6)) 最小的乘次為15125。

思路:動態規劃演算法解此問題,可依據其遞迴式以自底向上的方式進行計算(即先從最小的開始計算)。在計算過程中,儲存已解決的子問題答案。每個子問題只計算一次,而在後面需要時只要簡單查一下,從而避免大量的重複計算,最終得到多項式時間的演算法。

//r為連乘矩陣的個數

for (int r = 2; r <= n; r++) }}

}return min_part[0][n-1];

}public

static

void

main(string args)

}從2個矩陣開始計算: m[0][1] m[1][2] m[2][3] m[3][4] m[4][5] //m[0][1]表示第乙個矩陣與第二個矩陣的最小乘次數、

以此類推 3個矩陣計算m[0][2] m[1][3] m[2][4] m[3][5]

。。。

一直到6個矩陣計算 m[0][5]即為結果

每次計算均取到上一矩陣計算儲存的結果

動態規劃 矩陣連乘

includeusing namespace std 無論括號怎麼分這些連續相乘的矩陣,最後括號都可以歸結到只有兩對括號,把整個連乘的矩陣分成兩部分 0 i j m i j min i 遞迴計算矩陣連乘 int liancheng int i,int j,int p,int s return min...

動態規劃 矩陣連乘

動態規劃常常用來解決,具有最優子結構,重疊子問題的物件。最優子結構 即通過分析問題,將問題分解為多個子問題。然後每個子問題繼續分解為更多子問題。從底往上求出最有值,由最優值確定最優解。重疊子問題 在計算過程中不同子問題可能都會計算某個值。若每個子問題都去求解同乙個值,浪費時間。動態規規劃對每乙個子問...

矩陣連乘 動態規劃

將待求解的問題分解成若干個相互聯絡的子問題,先求解子問題,然後從這些子問題的解得到原問題的解 對於重複出現的子問題,只在第一次遇到的時候對它進行求解,並把答案儲存起來,讓以後再次遇到時直接引用答案,不必重新求解。給定n個矩陣 a1,a2,an,其中ai與ai 1是可乘的,i 1,2.n 1。確定計算...