矩陣鏈乘問題

2021-07-24 21:07:55 字數 1460 閱讀 3951

問題描述:

給定n個矩陣的鏈

,a2,

...,

an>

,矩陣 a

i 的規模為 p

i×pi

+1(1

≤i≤n

) ,求完全括號化的方案,使得計算乘積 a

1,a2

,...

,an 所需標量乘法的次數最少。

遞推式: m

[i,j

]=,if i=

jif 

i

#include
#include

#include

using

namespace

std;

const

int n=6;

const

int msize[6][2]=,,,,,};

const

int p[7]=;//the size of matrix: eg. matrix[0]=30*35; matrix[i]=p[i]*p[i+1]

int m[n][n];//m[i][j]=m[i][k]+m[k+1][j]+p[i]*p[k+1]*p[j+1]

vector

< vector

> s(n);//store the split position

void matrix_chain_order(const

int p,int n)

}

}

}

}int look_up_chain(vector

< vector

> &m,vector

< vector

> &s,const

int p,int i,int j)

else

//帶備忘機制的動態規劃

int memorized_matrix_chain(const

int p,int n)

void print_optimal_parens(vector

< vector

> & s,int i, int j)

}int main()用於實驗的例子:

結果應為:((

a1(a

2a3)

)((a

4a5)

a6))

執行過程:

執行結果:

矩陣鏈乘問題

輸入 共兩行第一行 n 1 n 100 代表矩陣個數。第二行有 n 1 個數,分別為 a1 a2 an 1 1 ak 2000 ak 和 ak 1 代表第 k 個矩陣是個 ak x ak 1 形的。輸出 共兩行 第一行 m 為最優代價。注 測試用例中 m 值保證小於 2 31 第二行為最優順序。如 ...

最優矩陣鏈乘

問題描述 乙個n m矩陣由n行m列共n m個數排列而成。兩個矩陣a和b可以相乘當且僅當a的列數等於b的行數。乙個n m的矩陣乘以乙個m p的矩陣等於乙個n p的矩陣,運算量為nmp。矩陣乘法滿足結合律,a b c可以表示成 a b c或者是a b c 兩者的運算量卻不同。例如當a 2 3 b 3 4...

最優矩陣鏈乘

題目大意 乙個n m矩陣由n行m列共n m個數排列而成。兩個矩陣a和b可以相乘當且僅當a的列數等於b的行數。乙個n m的矩陣乘以乙個m p的矩陣等於乙個n p的矩陣,運算量為nmp。矩陣乘法滿足結合律,a b c可以表示成 a b c或者是a b c 兩者的運算量卻不同。例如當a 2 3 b 3 4...