算法实践篇-多矩阵乘法最优次序-动态规划

来源:互联网 发布:文华财经模拟软件 编辑:程序博客网 时间:2024/06/06 18:56
package com.dynamic;public class MatrixChainMultiple {private int[][]size;private int [][]momery;private int [][]s;public MatrixChainMultiple(int [][]size)throws Exception{for(int i=0;i<size.length-1;i++){if(size[i][1]!=size[i+1][0]){throw new Exception("size错误");}}this.size=size;momery=new int[size.length][size.length];for(int i=0;i<momery.length;i++){momery[i][i]=0;}s=new int[size.length][size.length];}public int matrixChainOrder(){return innerMatrixChainOrder(0,size.length-1);}private int innerMatrixChainOrder(int i,int j){if(i==j||momery[i][j]>0){return momery[i][j];}int tmp=Integer.MAX_VALUE;for(int k=i;k<j;k++){int q=innerMatrixChainOrder(i,k)+innerMatrixChainOrder(k+1,j)+size[i][0]*size[k][1]*size[j][1];//tmp=Math.min(tmp, innerMatrixChainOrder(i,k)+innerMatrixChainOrder(k+1,j)+size[i][0]*size[k][1]*size[j][1]);if(q<tmp){tmp=q;s[i][j]=k;}}momery[i][j]=tmp;return tmp;}public void printSolution(){printSolution(0,size.length-1);}private void printSolution(int i,int j){if(i==j){System.out.print("A"+i);}else{System.out.print("(");printSolution(i,s[i][j]);printSolution(s[i][j]+1,j);System.out.print(")");}}public static void main(String[] args)throws Exception {int [][]size=new int[][]{{30,35},{35,15},{15,5},{5,10},{10,20},{20,25}};MatrixChainMultiple chain=new MatrixChainMultiple(size);System.out.println(chain.matrixChainOrder());chain.printSolution();}}

0 0
原创粉丝点击