動態規劃 一 矩陣連乘

2022-08-23 12:06:10 字數 832 閱讀 7003

1 #include2

using

namespace

std;

3int

const m=7;4

void matrix_chain_order(int *p,int length,int m[m],int

s[m])523

}24}25

}26}27

void print_optimal_parens(int s[m],int i,int j)//

牢記s[i][j]是數乘次數m[i][j]最小時的分割點

2837}38

intmain()39;

41int

m[m][m],s[m][m];

42matrix_chain_order(p,m,m,s);

43 cout<<"

當n=6時最優解為: \n

"<1][6

];44 cout<<"

\n括號化方案為:\n";

45 print_optimal_parens(s,1,6

);46

return0;

47 }

問題描述:

矩陣連乘找最小數乘次數以及組合方式。

矩陣ai的維數為p[i-1]*p[i].//詳情見課本p48

p[i-1]*p[k]*p[j]

是前面兩個子矩陣的相乘數乘次數。

例如:計算的連乘積的例子。設這三個矩陣的維數分別為10*100,100*5,5*50,若按第一種加括號方式((a1a2)a3)計算,那麼數乘次數需要10*100*5+10*5*50=7500

矩陣連乘(動態規劃)

題目描述 給定n個矩陣 a1,a2,an 其中ai與ai 1是可乘的,i 1,2 n 1。如何確定計算矩陣連乘積的計算次序,使得依此次序計算矩陣連乘積需要的數乘次數最少。例如 a1 a2 a3 a4 a5 a6 最後的結果為 a1 a2a3 a4a5 a6 最小的乘次為15125。思路 動態規劃演算...

動態規劃 矩陣連乘

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

動態規劃 矩陣連乘

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