矩陣鏈相乘Matchain

2021-09-02 05:37:36 字數 906 閱讀 2858

演算法設計技巧與分析-動態規劃
僅供自己學習......

輸入: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]=200

c[1,3]=320

c[1,4]=620

c[1,5]=348

c[2,2]=0

c[2,3]=240

c[2,4]=640

c[2,5]=248

c[3,3]=0

c[3,4]=240

c[3,5]=168

c[4,4]=0

c[4,5]=120

c[5,5]

python**如下:

#matchain

def matchain(c,n,r):

kline=[ for i in range(3)] #設定2維陣列儲存ijk

for d in range(1,n):#填充對角線d1到d(n-1)

for i in range(1,n-d):#填充對角線di的專案

j=i+d

c[i][j]=1000000

for k in range(i+1,j+1):#找出乘法次數最少次

test=c[i][k-1]+c[k][j]+r[i-1]*r[k-1]*r[j]

if test輸出結果:

DP 矩陣鏈相乘

假設我們要用標準的矩陣乘法來計算m1,m2,m3三個矩陣的成績m1m2m3,這三個矩陣的維數分別是210,102,210,如果把m1,m2相乘,然後再與m3相乘,那麼要乘2102 2210 80次,如果代之以用m2,m3相乘的結果去乘m1,那麼乘法的次數變成了10210 210 10 400,執行m...

矩陣鏈相乘 DP

n表示矩陣的個數 100 n 1個數,表示矩陣 100 output 最小的乘法次數 sample input 55 10 4 6 10 2 sample output 348 解題思路 按照題意,這幾個數只能結合相乘,不能交換相乘,也就是不能打亂數的排列順序 因為這個矩陣鏈的乘法hin是奇怪,一交...

矩陣鏈相乘問題

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