演算法分析設計實踐 矩陣鏈乘法

2022-05-30 05:09:11 字數 1461 閱讀 2882

設n個矩陣序列,其中第i個矩陣式p[i - 1] * p[i]階矩陣,給定矩陣的向量p,求一種乘法次序,使得基本運算總次數最小

設a[i][j] 為 ∏j

k = ia[k]

設cnt[i][j]為a[i][j]的最少運算次數

cnt[i][j] = min(cnt[i][k] + cnt[k + 1][j] + p[i - 1] * p[k] * p[j])

1

for (int len = 2; len <= n; ++len)216

}17}18 }

o(n3)

1 #include2 #include

3 #include4 #include5 #include6 #include7 #include8 #include

9 #include10 #include11

#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)

12#define mem(a,x) memset(a,x,sizeof(a))

13#define lson rt<<1,l,mid

14#define rson rt<<1|1,mid + 1,r

15#define p pair16

#define ull unsigned long long

17using

namespace

std;

18 typedef long

long

ll;19

const

int maxn = 2e5 + 10;20

const ll mod = 998244353;21

const

int inf = 0x3f3f3f3f;22

const

long

long inf = 0x3f3f3f3f3f3f3f3f;23

const

double eps = 1e-7;24

25inline ll read()

2629

while (isdigit(ch)) x = (x << 3) + (x << 1) + (ch ^ 48), ch =getchar();

30return w ? -x : x;31}

3233

int cnt[1000][1000] , s[1000][1000

];34

int p[1000

];35

intn;

36int

main()

3743

for (int len = 2; len <= n; ++len)

4458}59

}60}61 cout << cnt[1][n] <

62return0;

63 }

完整**

演算法導論 矩陣鏈乘法

問題描述 給定有n個連乘矩陣的維數,要求計算其採用最優計算次序時所用的乘法次數,即所要求計算的乘法次數最少。例如,給定三個連乘矩陣的維數分別是10 100,100 5和5 50,採用 a1a2 a3,乘法次數為10 100 5 10 5 50 7500次,而採用a1 a2a3 乘法次數為100 5 ...

矩陣鏈乘法問題 (演算法)

一 概述 以兩個矩陣相乘為例,a1 a2,a1和a2為兩個矩陣,假設a1的行列數是p q,a2的行列數是q r。注意這裡由於是a1乘以a2,所以a1的列數要等於a2的行數,否則無法做矩陣乘法,滿足上述條件的矩陣,我們稱之為 相容 的。那麼對於a1 a2而言,我們需要分別執行p r次對應a1的行元素乘...

Python演算法 矩陣鏈乘法

題目解析參考 動態規劃 矩陣鏈乘法 矩陣乘法是乙個滿足結合律的運算。顯然,對於矩陣a b c來說,ab c 與 a bc 是等價的,我們可以根據自己的心情選擇任意的運算順序,總之,結果都是一樣的。糟糕的是,對計算機來說可不是這麼回事,若我們假定矩陣 a 10,20 b 20,30 c 30,40 那...