矩陣鏈相乘問題

2022-03-13 18:23:31 字數 816 閱讀 6721

給出乙個矩陣鏈,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...