矩陣連乘問題

2021-06-27 08:34:55 字數 1406 閱讀 8299

矩陣連乘問題

問題分析

最優子結構性質假設n個矩陣連乘的最優加括號方案為(a1...ak)(ak+1...an))(注:此處省略了a1...ak, ak+1...an兩個子矩陣內部的括號)。則加括號方案(a1...ak)是子矩陣鏈a1...ak的最優加括號方案,(ak+1...an)是ak+1...an的最優加括號方案。

證明略。但可證明該假設成立。

狀態表示和遞推方程

輸入:多組測試資料,每組測試資料報括兩行,第一行輸入矩陣的個數n(n<1000),第二行輸入n+1個數,依次表示p0,p1,p2...,pn.

輸出:最少的數乘次數。

輸入樣例:3

10 100 5 50

輸出樣例:

7500

#include #include #define maxnum 1000

long matrixchain(int matrixnum);

int dim[maxnum];

long menotable[maxnum][maxnum]; //記錄最優值的陣列,表示理論分析部分的m

int bestk[maxnum][maxnum]; //記錄最優化分位置k的陣列,表示理論分析部分的s

int main()

printf("%ld\n", matrixchain(matrixnum));

}return 0;

}long matrixchain(int matrixnum)

for (len = 2; len <= matrixnum; ++len) //計算長度為len的矩陣鏈最優值}}

}return menotable[1][matrixnum];

}

矩陣連乘問題

矩陣連乘問題 應用動態規劃演算法,將前面計算的重複值儲存,一次來推進下一步的計算,直到得到m 1 n 的值,為最少的乘法次數 m i j 表示計算a i.j 所需的最少數乘次數 m i j min i s i j 記錄斷開位置,也就是最少計算次數的中間位置。include using namespa...

矩陣連乘問題

由於矩陣的乘法滿足結合律,故計算矩陣的連乘積可以有許多不同的計算次序。這中計算次序 可以用加括號的方式來確定。例如,矩陣連乘積a1a2a3a4可以有5種不同的完全加括號方式 a1 a2 a3a4 a1 a2a3 a4 a1a2 a3a4 a1 a2a3 a4 a1a2 a3 a4 矩陣a和b可乘的條...

矩陣連乘問題

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