矩陣鏈乘法(最優解) 演算法導論(C語言實現)

2021-10-25 09:25:42 字數 808 閱讀 1309

這兩天演算法課剛學了這個,於是就想著用c語言自己擼出來。

首先是尋找最優解的過程,對於下標從i到j的矩陣鏈,我們將其分成兩部分i到k和k+1到j,遍歷i到j之間的每乙個k,找到最小值即可。

為了輸出最優解還需要乙個二維陣列儲存矩陣鏈i~j的截斷位置。

這裡是c**:

#include

#include

#define maxsize 1000

#define maxnum 100000000

int dp[maxsize]

[maxsize]

;//從i到j相乘所需要的最少計算次數

int memeo[maxsize]

[maxsize]

;//儲存從i到j在**截斷

void

find

(int

*numsequence,

int n)

for(l=

2;l<=n;l++)}

}}}void

print

(int start,

int end)

else

}int

main()

find

(numsequence,n)

;printf

("%d\n"

,dp[1]

[n])

;print(1

,n);

return0;

}

最優解不止乙個,而**所輸出的最優解是從左往右找到的第乙個,通過修改**,可以輸出所有最優解。

演算法導論 矩陣鏈乘法

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

演算法提高 矩陣乘法 最優矩陣鏈乘

題目鏈結 有n個矩陣,大小分別為a0 a1,a1 a2,a2 a3,a n 1 a n 現要將它們依次相乘,只能使用結合率,求最少需要多少次運算。兩個大小分別為p q和q r的矩陣相乘時的運算次數計為p q r。狀態轉移方程 普通遞推 按照j i遞增的順序遞推,時間複雜度o n 3 include ...

演算法導論之矩陣鏈乘法詳解

內容都是是演算法導論上的,僅作為乙個閱讀筆記,記錄一下自己閱讀過程中碰到的一些問題。希望能對需要的同學有所幫助!矩陣鏈乘法是指給定乙個n個矩陣的序列 矩陣鏈 a1,a2,an 我們希望計算它們的乘積 a1a2a3 an 對於這個問題,我們可以先用括號明確計算的次序,然後利用標準的矩陣相乘演算法進行計...