演算法分析 動態規劃 矩陣連乘

2021-09-02 17:52:38 字數 1135 閱讀 2482

最優子結構性質

假設a1*a2*a3*...*an在k處斷開為最優,那麼只需要保證a1*...*ak和ak*..*an兩個子串行的分割也是最優,就能保證該結果是最優。

子問題重疊性

對於多個矩陣連乘,不同的分割次序會導致計算次數的不同,所以要找到最優化的分割,減少計算量。

a1a2

a3a4

a5a6

30*35

35*15

15*5

5*10

10*20

20*25

計算子問題的最優解並儲存:

矩陣m儲存子問題的最優計算量,矩陣s儲存子問題的最優分割方式。

矩陣m:

矩陣s:

舉例說明:

m[0][3]=7875,s[0][3]=1表示對於子問題(分割a1*a2*a3),需要的最少計算量為7875次,最優分割點在位置1,也就是分割為a1*(a2*a3)。

#include "stdafx.h"

#include#includeusing namespace std;

void matrixchain(int *p, int n, int m[6], int s[6]);

void traceback(int i, int j, int s[6]);

int main()

; int m[6][6] = {};

int s[6][6] = {};

for (int i = 0; i < 6; i++)

for (int j = 0; j < 6; j++)

matrixchain(p, n, m, s);

for (int i = 0; i < 6; i++)

//cout << s[0][5]演算法設計與分析--王曉東

矩陣連乘(動態規劃)

題目描述 給定n個矩陣 a1,a2,an 其中ai與ai 1是可乘的,i 1,2 n 1。如何確定計算矩陣連乘積的計算次序,使得依此次序計算矩陣連乘積需要的數乘次數最少。例如 a1 a2 a3 a4 a5 a6 最後的結果為 a1 a2a3 a4a5 a6 最小的乘次為15125。思路 動態規劃演算...

動態規劃 矩陣連乘

includeusing namespace std 無論括號怎麼分這些連續相乘的矩陣,最後括號都可以歸結到只有兩對括號,把整個連乘的矩陣分成兩部分 0 i j m i j min i 遞迴計算矩陣連乘 int liancheng int i,int j,int p,int s return min...

動態規劃 矩陣連乘

動態規劃常常用來解決,具有最優子結構,重疊子問題的物件。最優子結構 即通過分析問題,將問題分解為多個子問題。然後每個子問題繼續分解為更多子問題。從底往上求出最有值,由最優值確定最優解。重疊子問題 在計算過程中不同子問題可能都會計算某個值。若每個子問題都去求解同乙個值,浪費時間。動態規規劃對每乙個子問...