矩陣連乘問題
問題分析
最優子結構性質假設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。解題思路 能用動態...