/**

* 下面是矩阵连乘问题的动态规划算法

* 假设有6个矩阵:

* A1 A2A3 A4 A5A6

* 30*35 35*15 15*5 5*10 10*20 20*25 则matrixChain为

* {30, 35, 15, 5, 10, 20, 25} 结果为

* ((A1 * (A1 * A2)) * ((A4 * A5) * A6) )

*

* @author liuy

*/

public class MatrixMulitply {

public static void main(String[] args) {

int[] matrixChain = {30, 35, 15, 5, 10, 20, 25};

matrixMultiply(matrixChain);

}

//矩阵连乘

public static void matrixMultiply(int[] matrixChain) {

int dimension = matrixChain.length;

int[][] timeResult = new int[dimension][dimension];

int[][] tagResult = new int[dimension][dimension];

matrixMultiply(matrixChain, timeResult, tagResult);

System.out.println("最优乘法次数:" + timeResult[1][dimension - 1]);

System.out.println("划分规则为:");

traceBack(tagResult, 1, dimension - 1);

}

//矩阵连乘

public static void matrixMultiply(int[] matrixChain, int[][] timeResult, int[][] tagResult) {

//timeResult 存放次数结果,矩阵的的行与列以1开始,tagResult 存放标记结果,矩阵的的行与列以1开始

int n = matrixChain.length - 1;

for(int i = 1; i <= n; i++)//初始化矩阵

timeResult[i][i] = 0;

for(int r = 2; r <= n; r++)//从列号的第二位开始

for(int i = 1; i <= n - r + 1; i++ ) {//i为行号

int j = i + r - 1;//j为列号

timeResult[i][j] = timeResult[i + 1][j] + matrixChain[i - 1] * matrixChain[i] * matrixChain[j];

tagResult[i][j] = i;

for(int k = i + 1; k < j; k++) {//

int temp = timeResult[i][k] + timeResult[k + 1][j] + matrixChain[i - 1] * matrixChain[k] * matrixChain[j];

if(temp < timeResult[i][j]) {//寻找最小值

timeResult[i][j] = temp;

tagResult[i][j] = k;//记录划分标记

}

}

}

}

//按计算出断点矩阵tagResult指示的加括号方式

public static void traceBack(int[][] tagResult, int i, int j) {

if(i == j) return;

traceBack(tagResult, i, tagResult[i][j]);

traceBack(tagResult, tagResult[i][j] + 1, j);

System.out.println("Multiply A(" + i + "," + tagResult[i][j] + ")and A(" + (tagResult[i][j] + 1) + "," + j + ")");

}

}

矩阵连乘算法代码JAVA_矩阵连乘问题的动态规划算法(java)相关推荐

  1. c++矩阵转置_python3 单行代码实现矩阵相乘

    Python中有许多模块用来进行科学与数学的运算. 例如,numpy就是其中的一个,而且numpy中就有大量.好使的矩阵乘法的函数. 即便如此,我们还是可以探究一下如何用Python的自带函数,在一行 ...

  2. sm3算法实现java_[转]国密SM3杂凑算法与实现

    国密办已于去年公布国产商密算法SM3,http://www.oscca.gov.cn/News/201012/News_1199.htm,这给其应用和开发带来了方便,也见网上有许多实现的例子,出于一个 ...

  3. 泊松图像融合算法代码实现_部分多曝光图像融合算法(含少数通用图像融合算法)代码下载链接...

    最近弄了一篇多曝光图像融合的论文,顺便搜集了一些多曝光图像融合算法.为了方便大家,特将链接放在本文里.另外我制作和收集了100对多曝光图像,并用下述方法生成了2100张融合图像,后续将放出. 一.传统 ...

  4. 奶茶店小票代码java_由奶茶店突发奇想开始了Java设计模式:享元模式

    定义 享元模式是对象的结构模式,享元模式以共享的方式高效的支持大量的细粒度对象,主要用于减少创建对象的数量,以减少内存占用和提高性能 享元对象能做到共享的关键在于区分了内蕴状态和外蕴状态 内蕴状态是存 ...

  5. 建模matlab的算法代码呀,数学建模算法打包

    数学建模十大算法程序详解(打包了) 十大算法 1说明.txt Floyd算法 floyd.txt 中国数学建模-数学工具-Floyd最短路算法的MATLAB程序.txt Newton插值.txt di ...

  6. 探讨与研究——动态规划算法、回溯法、分支限界法解0-1背包问题

    一个人终归是要成长的,是要不断历练的,没有人可以安安稳稳一辈子.就算是最有地位最有钱的人也要不断追求.不断历练.不断提升自己. 人的学问少时在不断学习,青年时期不断实践.随着时间推移,到了老年终有所成 ...

  7. 动态规划算法下的序列问题:最长公共子序列问题和最大子段和问题

    本篇主要介绍最长公共子序列问题和最大子段和问题 1.最长公共子序列问题 什么是最长公共子序列 给定一个序列X=<x1,x2,x3,x4-,xm>,另一个序列Z=<z1,z2,z3,z ...

  8. 贪心、递归、递推以及动态规划算法的分析与对比

    PS:   头一次规规矩矩的按照论文的格式写文章,呵呵.虽然是小儿科的不能再小儿科的东西了..不过..也忽悠了6000多字~~嘿嘿..肯定写的不好,第一次嘛..所以..接受大家一切批评哈!...文章N ...

  9. strassen矩阵乘法 java_矩阵乘法Strassen算法

    矩阵乘法是种极其耗时的运算.以 为例,其中 和 都是 矩阵.根据矩阵乘法的定义, 中的每个元素需要按照如下方式计算 式(4.8)包含一个 次的循环,因此计算 的时间复杂度为 .而 共有 个元素,因此总 ...

最新文章

  1. git 还原版本方法
  2. JS 取消冒泡事件 兼容火狐IE
  3. Linux Shell脚本攻略学习总结:一
  4. Python的IDE之PyCharm:PyCharm的使用技巧图文教程(修改Pycharm默认风格颜色、编辑器内代码注释区域的颜色、编辑器内的Python Interpreter等)之详细攻略
  5. 【转】Unity中写GLSL(一)—— 简单的diffuse color
  6. webpack 打包第三方库_webpack打包分离第三方库和业务代码
  7. Java之递归遍历目录,修改指定文件的指定内容
  8. php 字符串与数字相加,注意!PHP中字符串与数字的比较
  9. Linux下安装和配置solr/tomcat/IK分词器 详细实例二.
  10. iOS开发--正则表达式
  11. 递增三元组蓝桥杯c语言,蓝桥-递增三元组-蓝桥
  12. Codechef QGRID
  13. 开发这么久你真知道for循环内部执行顺序吗?
  14. python学习手册 简记
  15. c 中空格的asc码表_ascii码表由小到大空格字符
  16. lenovo 笔记本ideapad 320c-15改装win7问题
  17. 【Linux操作系统基础】第一章 Linux命令行使用技巧
  18. SpringBoot整合Dubbo
  19. Java多线程篇--concurrentHashMap
  20. 怎么解c语言逆向编码,逆向还原C语言代码 练习1

热门文章

  1. Python爬虫获取文章的标题及你的博客的阅读量,评论量。所有数据写入本地记事本。最后输出你的总阅读量!
  2. 机器视觉应用软件开发步骤及流程
  3. 【实战】OpenCV钢管计数分析与方法比较
  4. S-BEV:用于天气和光照不变的3-DoF定位的语义鸟瞰视图表示
  5. 详解JVM内存管理与垃圾回收机制3 - JVM中对象的内存布局
  6. 深度解析 PouchContainer 的富容器技术
  7. centos7 升级openssh7.4之后 报错
  8. linux内网机器访问外网代理设置squid
  9. Nimbus/Supervisor本地目录结构
  10. java- ASM 字节码操控框架