矩陣連乘最優次序 c 實現 動態規劃演算法

2021-07-02 19:57:48 字數 846 閱讀 7869

#include const int n=4;

namespace recursion

return min;}};

namespace nonrecursion

{

/*p代表維數陣列,n代表矩陣個數 s是記錄分割處的陣列,m是記錄最小乘次數陣列,陣列第0行和第0列都不用*/

void matrixchain(int *p,int n,int s[n+1],int m[n+1])

{ int i,j,k;

for(i=1;i<=n;i++)m[i][i]=0;//先是乙個乙個矩陣,不用乘,所以次數都為零

for(int r=2;r<=n;r++)//以後就開始讓i和j離開了,r代表他倆之間的矩陣個數包括他倆,開始是兩個(就是他倆挨著),越來越遠

for(i=1;i<=n-r+1;i++)

{j=i+r-1;//j在i後面第r個 ,i 是i後面第乙個

m[i][j]=m[i][i]+m[i+1][j]+p[i-1]*p[i]*p[j];//預設從i分 就是(i)(i+1,i+2,……j),第一次就是 (i)(j)

s[i][j]=i;

/*第一次不用執行這兒,因為兩個兩個的肯定是要在中間分就是(i)(j)

如果三個三個 或更多的 那麼就不一定是從第乙個處(i處)分了 就要從i+1開始挨個試試了

*/for(k=i+1;k"

<<"a"

<"

<<"a"

<>p[i];

int s[n+1][n+1],m[n+1][n+1];

nonrecursion::matrixchain(p,n,s,m);

cout<<"非遞迴:"<

動態規劃之最優矩陣連乘

最優矩陣連乘 問題描述 乙個n m矩陣由n行m列共n m個數排列而成。兩個矩陣a和b可以相乘當且僅當a的列數等於b的行數。乙個n m的矩陣乘以乙個m p的矩陣等於乙個n p的矩陣,運算量為nmp。矩陣乘法滿足結合律,a b c可以表示成 a b c或者是a b c 兩者的運算量卻不同。例如當a 2 ...

矩陣連乘(動態規劃)

題目描述 給定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...