矩陣鏈相乘問題

2021-10-12 02:53:55 字數 894 閱讀 9541

矩陣的乘法定義如下:設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有兩種方式:(ab)c和a(bc),前一種需要15000次乘法計算,後一種則只需3500次。

設a1,a2,…,an為矩陣序列,a​i是階為p​i−1∗p​i的矩陣(1≤i≤n)。試確定矩陣的乘法順序,使得計算a1a2…an過程中元素相乘的總次數最少。

輸入格式:

每個輸入檔案為乙個測試用例,每個測試用例的第一行給出乙個正整數n(1≤n≤100),表示一共有n個矩陣a1,a2,…,an,第二行給出n+1個整數p0 ,p1…pn,以空格分隔,其中1≤p​i≤100(0≤i≤n),第i個矩陣a​i是階為p​i−1∗p​i的矩陣。

輸出格式:

獲得上述矩陣的乘積,所需的最少乘法次數。

輸入樣例:

在這裡給出一組輸入。例如:

5

3035155

1020

輸出樣例:

在這裡給出相應的輸出。例如:

11875
#include

using

namespace std;

const

int max =

1005

;int p[max]

;int m[max]

[max]

;int n;

void

matrix()

}}}}

intmain()

矩陣鏈相乘問題

給出乙個矩陣鏈,a1a2.an。求最小的相乘運算次數。如 n k 的 ai 和 k m 的a i 1 則相乘運算次數為n k m。給aia i 1 a加括號 1 i j n 求最小代價,用m i j 來記錄ai.aj最小的矩陣乘法運算次數,那麼a1.an的最優解就是m 1 n 當只有乙個矩陣時,m ...

矩陣鏈相乘Matchain

演算法設計技巧與分析 動態規劃僅供自己學習.輸入 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 2...

DP 矩陣鏈相乘

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