矩陣鏈乘法

2021-10-06 10:34:32 字數 1023 閱讀 2578

[描述演算法問題,首選形式化方式(數學語言),其次才是非形式化方式(日常語言)]

給定n個矩陣的鏈,其中i=1,2,…,n,矩陣a i的維數為p i-1 ×p i 。計算乘積a1 a2 …a n 所需的標量乘法次數最小。

動態規劃

ai表示矩陣鏈相乘的子問題;m[i]:表示得到乘積ai所用的最少基本運算次數;假定,最後一次相乘發生在矩陣鏈ai…k和ak+1…j之間,即

對於i=j的情況下,顯然有m=0,不需要做任何標量乘法運算。所以,對於所有的i=1、2…n,m[i,i] = 0.

當i < j的情況,就按照最優括號化方案的結構特徵進行計算m[i,j]。

n=p.length-1

let m[1…n,1…n]and s[1…n-1,2…n]

for i=1 to n //文藝長度規模

m[i,i]=0

for l=2 to n

for i=1 to n+1-l

j=i-1+l //終點

m[i,j]=10000

for k=i to j-1

d= m[i,k]+m[k+1,j]+pi-1pkpj

if d時間複雜度:o(n^3)

#include

#include

#include

#define max 1000

#define inf 0x3f3f3f3f

using namespace std;

int p[max];

int f[max][max];

int s[max][max];

void chain(int i,int j);

int main()

void chain(int i,int j)

}

矩陣鏈乘法

設m i j 為計算矩陣ai.j所需標量乘法運算次數的最小值。對整個問題計算ai.n的最小代價就是m i,n 使用輔助表是s 1.n,1.n 來記錄計算m i,j 時取得最優代價處k的值。k是裂開的位置。include define n 6 void matrix int p,int m n 1 i...

矩陣鏈乘法

a1,a2.an,n個矩陣,矩陣ai的維數為p i 1 p i 資料矩陣鏈乘法加全部括號,使得計算乘法的次數最少 對矩陣ai,ai 1,其維數分別為p i 1 p i p i p i 1 ai ai 1要執行乘法運算的次數為p i 1 p i p i 1 m i j 為矩陣ai ai 1 aj最少的...

矩陣鏈乘法

題目難度 對於矩陣鏈乘法這道題目,我們先明確乙個概念 對於n各需要相乘的矩陣所構成的 鏈 要計算其乘積a1a2.an。我們需要對其加上n 1個括號,來確定其運算順序。例 明白括號概念之後,我們還需明白何為矩陣相乘。矩陣相乘或不如稱為縱橫相乘,意思就是對於p q,以及q r的兩個矩陣,對於第乙個矩陣的...