Expm5_2 矩阵连乘问题

给定n个矩阵{A1,A2,…,An},其中AiAi+1是可乘的,i=1,2,…,n-1,考察这n个矩阵的连乘积A1A2…An

设计一个动态规划算法,求出这个矩阵连乘积问题的最优计算顺序。

 1 public class Exp5_2 {
 2     //矩阵连乘问题
 3     public static void main(String[] args) {
 4         int n=4;
 5         String[] matrixName=new String[]{"A","B","C","D"};
 6         int[] m=new int[]{50,20,1,10,100};
 7         int[][] c=new int[n][n];
 8         int[][] minPoint=new int[n][n];
 9         int minCount=matrixMultiply(m, n, c, minPoint);
10         System.out.println("需要计算最小乘法次数为: "+minCount);
11         System.out.print("计算顺序为:");
12         printChain(0, n-1, matrixName, minPoint);
13     }
14     
15     //m为每个矩阵的维数,n为矩阵个数,c为计算Ai*Aj的最小代价,minPoint为Ai*Aj最小代价的分开点
16     public static int matrixMultiply(int[] m,int n,int[][] c,int[][] minPoint){
17         
18         for(int i=0;i<=n-1;i++)          //单一矩阵,不需要进行乘法运算,所以置为0
19             c[i][i]=0;
20         
21         for(int s=2;s<=n;s++){                //s为矩阵连乘的个数
22             for(int i=0;i<=n-s;i++){          //i表示矩阵连乘中的第一个
23                 
24                 int j=i+s-1;                  //j表示矩阵连乘中的最后一个
25                 c[i][j]=Integer.MAX_VALUE;
26                 
27                 for(int k=i;k<=j-1;k++){      //计算Ai*Aj最小代价中的k值
28                     int temp=c[i][k]+c[k+1][j]+m[i]*m[k+1]*m[j+1];
29                     if(temp<c[i][j]){
30                         c[i][j]=temp;
31                         minPoint[i][j]=k;
32                     }
33                 }//内for
34                 
35             }//中for
36         }//外for
37         return c[0][n-1];
38     }
39     
40     public static void printChain(int i,int j,String[] matrixName,int[][] minPoint){
41         if(i==j)
42             System.out.print(matrixName[i]);
43         else{
44             System.out.print("(");
45             
46             printChain(i,minPoint[i][j],matrixName,minPoint);
47             printChain(minPoint[i][j]+1,j,matrixName,minPoint);
48             
49             System.out.print(")");
50         }
51     }
52     
53 }
View Code

 

posted @ 2017-10-26 20:21  清风☆薰衣草  阅读(134)  评论(0)    收藏  举报