矩陣鏈乘法問題:給定n個矩陣的鏈,矩陣ai的規模為p[i-1]*p[i],求完全括號化方案,使得計算乘積a1a2…an所需標量乘法次數最少。
m[i][j]表示矩陣鏈ai…j所需標量乘法次數的最小值。
m[i][j]=0(i=j)
m[i][j]=m[i][k]+m[k+1][j]+p[i-1]p[k]p[j](i<=k)
s[1..n-1][2..n]來記錄最優m[i][j]對應的分割點k。
m[i][j]只依賴於那些少於j-i+1個矩陣的最優計算代價,演算法應該按長度遞增的順序來求解矩陣鏈括號化問題。
#include
using
namespace
std;
void matrixchainorder(int p, int n, int m[7],int s[7])}}
}}//將矩陣序列加括號列印出來
void print(int i, int j, int s[7])
}int main() ;
int n = 6;
int m[7][7];
int s[7][7];
matrixchainorder(p, n, m, s);
print(1, 6, s);
return
0;}
動態規劃 矩陣鏈乘法
兩個矩陣相乘的計算量,對於一般的矩陣乘法來說,如矩陣a m,n 與矩陣b n,p 相乘需要進行的加法次數為m n p次乘法 由於矩陣乘法滿足結合律,因此矩陣相乘的結合性,會影響整個計算表示式的乘法執行次數 如下面的例子,a b c三個矩陣相乘,其中a 10,5 b 5,20 c 20,3 1 ab ...
動態規劃 矩陣鏈乘法
def matrix multipy a,b 乘法得到的是乙個 a.rows,b.cols 的矩陣,相當於a.rows個向量的b.cols次的向量線性加權 ifnot a.shape 1 b.shape 0 a組中向量的維度與b組中向量的維度一致 print error else 將每乙個元素都初始...
矩陣鏈乘法 動態規劃
1.問題 給定乙個n個矩陣的序列 矩陣鏈 用向量p輸入,求一種乘法的次序使得這個矩陣鏈的執行次數達到最小。解析 我們已知m i,j 為ai到aj採用最優的乘法次序得到的最小執行次數。m i,j min,該命題為真,需要證明的話請自行查詢相關資料。i k偽 另所有m i,j 的初值為0,s i,j 的...