矩陣連乘問題

2021-09-02 22:02:17 字數 2181 閱讀 6892

下面介紹三種方法來實現矩陣連乘問題。

1.動態規劃

//矩陣連乘--動態規劃

public class dynamicplan

m = new int[n+1][n+1];

s = new int[n+1][n+1];

matrixchain(p,n,m,s);

system.out.println("矩陣連乘的最小次數是:" + m[1][n]);

system.out.println("矩陣的連乘次序:");

traceback(1,n,s);

} public static void matrixchain(int p,int n,int m,int s)

for(int r = 2;r <= n;r++)//矩陣的的長度,從長度2開始逐漸變長}}

}} public static void traceback(int i,int j,int s)//遞迴構造最優解

traceback(i,s[i][j],s);

traceback(s[i][j]+1,j,s);

system.out.println("multiply a" + i + "," + s[i][j] + "and a" + (s[i][j]+1) + "," + j);

} }

2.遞迴

//矩陣連乘--遞迴

public class recursion

int u=recursion(i+1,j)+ p[i-1]*p[i]*p[j]; //先認為在ai到ai-1之間斷開

s[i][j] = i;//斷點的索引

for(int k = i+1;k < j;k++)//k從i+1迴圈找最小數乘次數

} return u;

} public static void traceback(int i,int j,int s)//遞迴構造最優解

traceback(i,s[i][j],s);

traceback(s[i][j]+1,j,s);

system.out.println("multiply a" + i + "," + s[i][j] + "and a" + (s[i][j]+1) + "," + j);

} public static void main(string args)

s = new int[n+1][n+1];

system.out.println("矩陣連乘的最小次數是:" +recursion(1,n));

system.out.println("矩陣的連乘次序:");

traceback(1,n,s);

}}

3.備忘錄

//矩陣連乘--備忘錄方法

public class memorized

} return lookupchain(1,n);

} public static int lookupchain(int i,int j)

if(i == j)

m[i][j]=lookupchain(i+1,j)+ p[i-1]*p[i]*p[j]; //先認為在ai到ai-1之間斷開

s[i][j] = i;//斷點的索引

for(int k = i+1;k < j;k++)//k從i+1迴圈找最小數乘次數

} return m[i][j];

} public static void traceback(int i,int j,int s)//遞迴構造最優解

traceback(i,s[i][j],s);

traceback(s[i][j]+1,j,s);

system.out.println("multiply a" + i + "," + s[i][j] + "and a" + (s[i][j]+1) + "," + j);

} public static void main(string args)

s = new int[n+1][n+1];

m = new int[n+1][n+1];

system.out.println("矩陣連乘的最小次數是:" +mematrixchain(n));

system.out.println("矩陣的連乘次序:");

traceback(1,n,s);

}}

矩陣連乘問題

矩陣連乘問題 應用動態規劃演算法,將前面計算的重複值儲存,一次來推進下一步的計算,直到得到m 1 n 的值,為最少的乘法次數 m i j 表示計算a i.j 所需的最少數乘次數 m i j min i s i j 記錄斷開位置,也就是最少計算次數的中間位置。include using namespa...

矩陣連乘問題

由於矩陣的乘法滿足結合律,故計算矩陣的連乘積可以有許多不同的計算次序。這中計算次序 可以用加括號的方式來確定。例如,矩陣連乘積a1a2a3a4可以有5種不同的完全加括號方式 a1 a2 a3a4 a1 a2a3 a4 a1a2 a3a4 a1 a2a3 a4 a1a2 a3 a4 矩陣a和b可乘的條...

矩陣連乘問題

矩陣連乘問題 問題分析 最優子結構性質假設n個矩陣連乘的最優加括號方案為 a1.ak ak 1.an 注 此處省略了a1.ak,ak 1.an兩個子矩陣內部的括號 則加括號方案 a1.ak 是子矩陣鏈a1.ak的最優加括號方案,ak 1.an 是ak 1.an的最優加括號方案。證明略。但可證明該假設...