算法实践篇-多矩阵乘法最优次序-动态规划
2014-03-21 15:00
477 查看
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(); } }
相关文章推荐
- 算法实践-最优搜索树-动态规划
- 算法导论15章 动态规划之矩阵链乘法问题
- 程序算法艺术与实践:递归策略之矩阵乘法问题
- 【甘道夫】Mapreduce实现矩阵乘法的算法思路
- 算法训练 矩阵乘法
- Strassen算法之矩阵乘法
- 【ShancoLove】带你看蓝桥杯——算法训练 矩阵乘法
- 【算法导论】矩阵乘法
- 蓝桥杯 算法提高 矩阵乘法 (区间dp)
- Python算法 Hadoop实例-单轮MapReduce的矩阵乘法
- BZOJ 2004|HNOI 2010 Day 1|公交线路|状态压缩动态规划|矩阵乘法
- Codeforces 506E Mr. Kitayuta's Gift (矩阵乘法,动态规划)
- 矩阵链乘法求两矩阵相乘所需的最小次数(算法3.6&3.7)
- 一些算法的MapReduce实现——矩阵-向量乘法实现
- 蓝桥杯--算法训练矩阵乘法
- dp 最优矩阵乘法
- 快速矩阵乘法:Strassen 演算法
- 【算法学习】最优二叉查找树(动态规划)
- 0013算法笔记——【动态规划】最大子段和问题,最大子矩阵和问题,最大m子段和问题
- 给定n个矩阵{A1, A2, …,An},其中,Ai与Ai+1是可乘的,计算这n个矩阵的连乘积。从中找出一种乘次数最少的计算次序(矩阵连乘最优顺序Java语言实现