- packagecom.eshore.sweetop.dynamicprogramming;
- publicclassMatrixChain{
- publicstaticvoidorder(int[]p){
- intn=p.length-1;
- int[][]m=newint[n][n];
- int[][]s=newint[n][n];
- for(inti=0;i<n;i++){
- m[i][i]=0;
- }
- for(intl=2;l<n+1;l++){
- for(inti=0;i<n-l+1;i++){
- intj=i+l-1;
- m[i][j]=Integer.MAX_VALUE;
- for(intk=i;k<j;k++){
- intq=m[i][k]+m[k+1][j]+p[i]*p[k+1]*p[j+1];
- if(q<m[i][j]){
- m[i][j]=q;
- s[i][j]=k;
- }
- }
- }
- }
- Matrix.halfdisplay(m);
- parens(s,0,s.length-1);
- }
- publicstaticvoidparens(int[][]s,inti,intj){
- if(i==j){
- System.out.print("A"+(i+1));
- }else{
- System.out.print("(");
- parens(s,i,s[i][j]);
- parens(s,s[i][j]+1,j);
- System.out.print(")");
- }
- }
- publicstaticvoidmain(String[]args){
- //int[]p={30,35,15,5,10,20,25};
- int[]p={5,10,3,12,5,50,6};
- MatrixChain.order(p);
- }
- }
算法之矩阵链乘法问题
最新推荐文章于 2021-04-27 14:04:27 发布