Skip to content

Commit 252657e

Browse files
committed
commit
1 parent 17c45dd commit 252657e

File tree

58 files changed

+1524
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+1524
-0
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package dynamicProgramming;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
/**
7+
* 矩阵链的最有括号化方案求解,一组矩阵按照不同的顺序相乘,计算代价是不同的,可以使用动态规划算法来
8+
* 求解最优的相乘方案
9+
* @author liyafei
10+
*
11+
*/
12+
public class MatrixChainMultiply {
13+
List list=new ArrayList<int[][]>();
14+
15+
/**
16+
* 打印最优顺序
17+
* @param s 保存了最有相乘顺序的数组
18+
* @param i 相乘矩阵的起始点
19+
* @param j 相乘矩阵的结束点
20+
*/
21+
public void printOptimalParens(int[][] s,int i,int j){
22+
if(i==j){
23+
System.out.println("A"+i);
24+
}else{
25+
26+
// System.out.println("(");
27+
// if(i>0 && i<7 && j>0 && j<7){
28+
// printOptimalParens(s, i, s[i][j]);
29+
// printOptimalParens(s, s[i][j]+1, j);
30+
// }
31+
// System.out.println(")");
32+
}
33+
}
34+
35+
public List matrixChainOrder(int[] p){
36+
int n=p.length-1;
37+
int[][] m=new int[n][n];
38+
int [][] s=new int[n-1][n];
39+
40+
for (int i = 0; i < n; i++) {
41+
m[i][i]=0;
42+
}
43+
for (int l = 1; l < n; l++) {
44+
for (int i = 1; i < n-l-+1; i++) {
45+
int j=i+l-1;
46+
m[i][j]=Integer.MAX_VALUE;
47+
for (int k = i; k < j-1; k++) {
48+
int q=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[i];
49+
if(q<m[i][j]){
50+
m[i][j]=q;
51+
s[i][j]=k;
52+
}
53+
}
54+
}
55+
}
56+
list.add(m);
57+
list.add(s);
58+
return list;
59+
}
60+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package dynamicProgramming;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
/**
7+
* 矩阵链的最有括号化方案求解,一组矩阵按照不同的顺序相乘,计算代价是不同的,可以使用动态规划算法来
8+
* 求解最优的相乘方案
9+
* @author liyafei
10+
*
11+
*/
12+
public class MatrixChainMultiply {
13+
List list=new ArrayList<int[][]>();
14+
15+
/**
16+
* 打印最优顺序
17+
* @param s 保存了最有相乘顺序的数组
18+
* @param i 相乘矩阵的起始点
19+
* @param j 相乘矩阵的结束点
20+
*/
21+
public void printOptimalParens(int[][] s,int i,int j){
22+
if(i==j){
23+
System.out.println("A"+i);
24+
}else{
25+
System.out.println(s[i][j]);
26+
System.out.println("(");
27+
if(i>0 && i<7 && j>0 && j<7){
28+
printOptimalParens(s, i, s[i][j]);
29+
printOptimalParens(s, s[i][j]+1, j);
30+
}
31+
System.out.println(")");
32+
}
33+
}
34+
35+
public List matrixChainOrder(int[] p){
36+
int n=p.length-1;
37+
int[][] m=new int[n][n];
38+
int [][] s=new int[n-1][n];
39+
40+
for (int i = 0; i < n; i++) {
41+
m[i][i]=0;
42+
}
43+
for (int l = 2; l < n; l++) {
44+
for (int i = 1; i < n-l-+1; i++) {
45+
int j=i+l-1;
46+
m[i][j]=Integer.MAX_VALUE;
47+
for (int k = i; k < j-1; k++) {
48+
int q=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[i];
49+
if(q<m[i][j]){
50+
m[i][j]=q;
51+
s[i][j]=k;
52+
}
53+
}
54+
}
55+
}
56+
list.add(m);
57+
list.add(s);
58+
return list;
59+
}
60+
}

.metadata/.plugins/org.eclipse.core.resources/.history/34/a0f8c2161ea40017131c82ab4c885138

Whitespace-only changes.
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package dynamicProgramming;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
/**
7+
* 矩阵链的最有括号化方案求解,一组矩阵按照不同的顺序相乘,计算代价是不同的,可以使用动态规划算法来
8+
* 求解最优的相乘方案
9+
* @author liyafei
10+
*
11+
*/
12+
public class MatrixChainMultiply {
13+
List list=new ArrayList<int[][]>();
14+
15+
/**
16+
* 打印最优顺序
17+
* @param s 保存了最有相乘顺序的数组
18+
* @param i 相乘矩阵的起始点
19+
* @param j 相乘矩阵的结束点
20+
*/
21+
public void printOptimalParens(int[][] s,int i,int j){
22+
if(i==j){
23+
System.out.println("A"+i);
24+
}else{
25+
System.out.println("(");
26+
27+
printOptimalParens(s, i, s[i][j]);
28+
printOptimalParens(s, s[i][j]+1, j);
29+
30+
System.out.println(")");
31+
}
32+
}
33+
34+
public List matrixChainOrder(int[] p){
35+
int n=p.length-1;
36+
int[][] m=new int[n][n];
37+
int [][] s=new int[n-1][n];
38+
39+
for (int i = 0; i < n; i++) {
40+
m[i][i]=0;
41+
}
42+
for (int l = 2; l < n; l++) {
43+
for (int i = 1; i < n-l-+1; i++) {
44+
int j=i+l-1;
45+
m[i][j]=Integer.MAX_VALUE;
46+
for (int k = i; k < j-1; k++) {
47+
int q=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[i];
48+
if(q<m[i][j]){
49+
m[i][j]=q;
50+
s[i][j]=k;
51+
}
52+
}
53+
}
54+
}
55+
list.add(m);
56+
list.add(s);
57+
return list;
58+
}
59+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package dynamicProgramming;
2+
3+
import java.util.List;
4+
5+
public class TestMatrixChainMultiply {
6+
public static void main(String[] args) {
7+
MatrixChainMultiply mcm=new MatrixChainMultiply();
8+
int[] p={3,5,7,23,45,2,4,5,9,20};
9+
int i=3;
10+
int j=6;
11+
List list=mcm.matrixChainOrder(p);
12+
int[][] s=(int[][]) list.get(1);
13+
mcm.printOptimalParens(s, i, j);
14+
}
15+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package dynamicProgramming;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
/**
7+
* 矩阵链的最有括号化方案求解,一组矩阵按照不同的顺序相乘,计算代价是不同的,可以使用动态规划算法来
8+
* 求解最优的相乘方案
9+
* @author liyafei
10+
*
11+
*/
12+
public class MatrixChainMultiply {
13+
List list=new ArrayList<int[][]>();
14+
15+
/**
16+
* 打印最优顺序
17+
* @param s 保存了最优相乘顺序的数组
18+
* @param i 相乘矩阵的起始点
19+
* @param j 相乘矩阵的结束点
20+
*/
21+
int f=1;
22+
public void printOptimalParens(int[][] s,int i,int j){
23+
if(f++>5)
24+
return;
25+
if(i==j){
26+
System.out.println("A"+i);
27+
}else{
28+
System.out.println("(");
29+
30+
printOptimalParens(s, i, s[i][j]);
31+
printOptimalParens(s, s[i][j]+1, j);
32+
33+
System.out.println(")");
34+
}
35+
}
36+
37+
public List matrixChainOrder(int[] p){
38+
int n=p.length-1;
39+
int[][] m=new int[n][n];
40+
int [][] s=new int[n-1][n];
41+
42+
for (int i = 0; i < n; i++) {
43+
m[i][i]=0;
44+
}
45+
for (int l = 2; l < n; l++) {
46+
for (int i = 1; i < n-l-+1; i++) {
47+
int j=i+l-1;
48+
m[i][j]=Integer.MAX_VALUE;
49+
for (int k = i; k < j-1; k++) {
50+
int q=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[i];
51+
if(q<m[i][j]){
52+
m[i][j]=q;
53+
s[i][j]=k;
54+
}
55+
}
56+
}
57+
}
58+
list.add(m);
59+
list.add(s);
60+
return list;
61+
}
62+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package dynamicProgramming;
2+
3+
public class MatrixChainMultiply {
4+
5+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package dynamicProgramming;
2+
3+
import java.util.List;
4+
5+
public class TestMatrixChainMultiply {
6+
public static void main(String[] args) {
7+
MatrixChainMultiply mcm=new MatrixChainMultiply();
8+
int[] p={3,5,7,23,45,2,4,5,9,20};
9+
int i=3;
10+
int j=7;
11+
List list=mcm.matrixChainOrder(p);
12+
int[][] s=(int[][]) list.get(1);
13+
mcm.printOptimalParens(s, i, j);
14+
}
15+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package dynamicProgramming;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
/**
7+
* 矩阵链的最有括号化方案求解,一组矩阵按照不同的顺序相乘,计算代价是不同的,可以使用动态规划算法来
8+
* 求解最优的相乘方案
9+
* @author liyafei
10+
*
11+
*/
12+
public class MatrixChainMultiply {
13+
List list=new ArrayList<int[][]>();
14+
15+
/**
16+
* 打印最优顺序
17+
* @param s 保存了最有相乘顺序的数组
18+
* @param i 相乘矩阵的起始点
19+
* @param j 相乘矩阵的结束点
20+
*/
21+
public void printOptimalParens(int[][] s,int i,int j){
22+
if(i==j){
23+
System.out.println("A"+i);
24+
}else{
25+
26+
// System.out.println("(");
27+
// if(i>0 && i<7 && j>0 && j<7){
28+
// printOptimalParens(s, i, s[i][j]);
29+
// printOptimalParens(s, s[i][j]+1, j);
30+
// }
31+
// System.out.println(")");
32+
}
33+
}
34+
35+
public List matrixChainOrder(int[] p){
36+
int n=p.length-1;
37+
int[][] m=new int[n][n];
38+
int [][] s=new int[n-1][n];
39+
40+
for (int i = 0; i < n; i++) {
41+
m[i][i]=0;
42+
}
43+
for (int l = 2; l < n; l++) {
44+
for (int i = 1; i < n-l-+1; i++) {
45+
int j=i+l-1;
46+
m[i][j]=Integer.MAX_VALUE;
47+
for (int k = i; k < j-1; k++) {
48+
int q=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[i];
49+
if(q<m[i][j]){
50+
m[i][j]=q;
51+
s[i][j]=k;
52+
}
53+
}
54+
}
55+
}
56+
list.add(m);
57+
list.add(s);
58+
return list;
59+
}
60+
}

.metadata/.plugins/org.eclipse.core.resources/.history/5f/50b9a06b25a40017131c82ab4c885138

Whitespace-only changes.

0 commit comments

Comments
 (0)