給出乙個矩陣鏈,a1a2...an。求最小的相乘運算次數。
如:n*k 的 ai 和 k*m 的a(i+1),則相乘運算次數為n*k*m。
給aia(i+1)...a加括號(1≤i≤j≤n),求最小代價,用m[i][j]來記錄ai...aj最小的矩陣乘法運算次數,那麼a1...an的最優解就是m[1][n]。
當只有乙個矩陣時,m[i][i] = 0 (i = 1,2...,n);
當多個矩陣時,即 i遞迴方程如下:
m[i][j] = 0, i = j;
m[i][j] = min(i≤k
/*** @brief 求最優矩陣鏈乘
* @param p 乙個序列, ai 為 p[i-1] * p[i] 的矩陣
* @param plength 序列長度
* @param m m[i][j]記錄ai...aj最小乘法運算次數
* @param s s[i][j]記錄ai...aj最小乘法運算次數時k值
*/void matricchainorder(int p, int plength, int m[maxn+10], int s[maxn+10])
for (chainlen = 2; chainlen <= n; chainlen++)
}} }
}
/*** @brief 列印加括號的方案
*/void printoptimalparens(int s[maxn+10], int i, int j)
else
}
poj1651,
矩陣鏈相乘問題
矩陣的乘法定義如下 設a是m p的矩陣,b是p n的矩陣,則a與b的乘積為m n的矩陣,記作c ab,其中,矩陣c中的第i行第j列元素cij可以表示為 當多個矩陣相乘時,採用不同的計算順序所需的乘法次數不相同。例如,a是50 10的矩陣,b是10 20的矩陣,c是20 5的矩陣,計算abc有兩種方式...
矩陣鏈相乘Matchain
演算法設計技巧與分析 動態規劃僅供自己學習.輸入 n個矩陣的鏈的維數對應於正整數陣列r 1,2,n 是n個矩陣的行數,r n 1 是mn的列數 輸出 n個矩陣相乘的數量乘法的最小次數 例7.4 m1 5 10,m2 1 4,m3 4 6,m4 6 10,m5 10 2 c 1,1 0 c 1,2 2...
DP 矩陣鏈相乘
假設我們要用標準的矩陣乘法來計算m1,m2,m3三個矩陣的成績m1m2m3,這三個矩陣的維數分別是210,102,210,如果把m1,m2相乘,然後再與m3相乘,那麼要乘2102 2210 80次,如果代之以用m2,m3相乘的結果去乘m1,那麼乘法的次數變成了10210 210 10 400,執行m...