(學習八)矩陣鏈問題

2022-07-20 01:57:12 字數 731 閱讀 4669

問題描述:

設a1、a2...an為n個矩陣的序列,其中ai為pi-1×pi階矩陣,這個矩陣鏈的輸入用向量p=給出。給定向量p,確定一種乘法次序,使得基本運算的總次數達到最小。

分析:我是利用動態規劃的思想做的,因為遞迴方式的複雜度是很大的。然後自己造資料,按照偽**模擬了好幾遍,那就放乙個稍微不凌亂點的。

開始被(a1a2)a3這個東西的表象蒙蔽了,其實每次對k進行討論時,算(a1a2)a3,只要算p0p2p3即可,p0是第乙個矩陣的row,p2是第二個矩陣的col,p3是第三個矩陣的row,為什麼可以這麼算,可以自己用特殊值代一下。

偽**:

for r from

2to n:

for i

from

1 to n-r+1

: j=i+r-1

; m[i][j]=m[i+1][j]+pi-1pipj;

s[i][j]=i;

for k

from i to j-1

: t=m[i][k]+m[k][j]+pi-1pkpj;

if(t

view code

複雜度:o(n³)

原始碼:

矩陣鏈乘法問題

問題描述 詳見演算法導論p197 p198 已知 給定n個矩陣構成的乙個矩陣鏈 a1,a2,an 矩陣ai的維數為pi 1 pi 求 決定該矩陣鏈的乘法結合順序 即加括號 使得矩陣鏈乘法的執行時間最短 幾個前提概念 首先判斷是否具有最優子結構假設ai.aj的矩陣鏈乘法的最優解是在ak與ak 1之間分...

矩陣鏈乘問題

問題描述 給定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...

矩陣鏈相乘問題

矩陣的乘法定義如下 設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有兩種方式...