矩陣鏈乘法

2021-06-21 15:10:43 字數 618 閱讀 6523

a1,a2....an,n個矩陣,矩陣ai的維數為p[i-1]*p[i];

資料矩陣鏈乘法加全部括號,使得計算乘法的次數最少

對矩陣ai,ai+1,其維數分別為p[i-1]*p[i],p[i]*p[i+1],ai*ai+1要執行乘法運算的次數為p[i-1]*p[i]*p[i+1];

m[i][j]為矩陣ai*ai+1*...*aj最少的執行乘法運算的次數

假設我們在ak後面加括號(i<=k觀察遞推式發現m[i][j]僅取決於長度比它小的鏈,因此, 我們按長度由小到大求m[i][j]即可

#include #include#define n 1005

#define inf 1<<29

using namespace std;

int p[n],m[n][n],s[n][n];

void matrix_chain_order(int n){

int i,j,k,l,q;

for(i=1;i<=n;i++)

m[i][i]=0;

for(l=2;l<=n;l++){

for(i=1;i<=n-l+1;i++){

j=i+l-1;

m[i][j]=inf;

for(k=i;k

矩陣鏈乘法

設m i j 為計算矩陣ai.j所需標量乘法運算次數的最小值。對整個問題計算ai.n的最小代價就是m i,n 使用輔助表是s 1.n,1.n 來記錄計算m i,j 時取得最優代價處k的值。k是裂開的位置。include define n 6 void matrix int p,int m n 1 i...

矩陣鏈乘法

題目難度 對於矩陣鏈乘法這道題目,我們先明確乙個概念 對於n各需要相乘的矩陣所構成的 鏈 要計算其乘積a1a2.an。我們需要對其加上n 1個括號,來確定其運算順序。例 明白括號概念之後,我們還需明白何為矩陣相乘。矩陣相乘或不如稱為縱橫相乘,意思就是對於p q,以及q r的兩個矩陣,對於第乙個矩陣的...

矩陣鏈乘法

輸入 ai是矩陣 輸出 計算a1 a2 an的最小代價方法 優化解的代價方程 for l 2 to n do 計算地l對角線 for i 1 to n l 1 do j i l 1 m i,j for k i to j 1 do 計算m i,j q m i,k m k 1,j pi 1pkpj if...