矩阵连乘算法代码JAVA_矩阵连乘问题的动态规划算法(java)
/**
* 下面是矩阵连乘问题的动态规划算法
* 假设有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)相关推荐
- c++矩阵转置_python3 单行代码实现矩阵相乘
Python中有许多模块用来进行科学与数学的运算. 例如,numpy就是其中的一个,而且numpy中就有大量.好使的矩阵乘法的函数. 即便如此,我们还是可以探究一下如何用Python的自带函数,在一行 ...
- sm3算法实现java_[转]国密SM3杂凑算法与实现
国密办已于去年公布国产商密算法SM3,http://www.oscca.gov.cn/News/201012/News_1199.htm,这给其应用和开发带来了方便,也见网上有许多实现的例子,出于一个 ...
- 泊松图像融合算法代码实现_部分多曝光图像融合算法(含少数通用图像融合算法)代码下载链接...
最近弄了一篇多曝光图像融合的论文,顺便搜集了一些多曝光图像融合算法.为了方便大家,特将链接放在本文里.另外我制作和收集了100对多曝光图像,并用下述方法生成了2100张融合图像,后续将放出. 一.传统 ...
- 奶茶店小票代码java_由奶茶店突发奇想开始了Java设计模式:享元模式
定义 享元模式是对象的结构模式,享元模式以共享的方式高效的支持大量的细粒度对象,主要用于减少创建对象的数量,以减少内存占用和提高性能 享元对象能做到共享的关键在于区分了内蕴状态和外蕴状态 内蕴状态是存 ...
- 建模matlab的算法代码呀,数学建模算法打包
数学建模十大算法程序详解(打包了) 十大算法 1说明.txt Floyd算法 floyd.txt 中国数学建模-数学工具-Floyd最短路算法的MATLAB程序.txt Newton插值.txt di ...
- 探讨与研究——动态规划算法、回溯法、分支限界法解0-1背包问题
一个人终归是要成长的,是要不断历练的,没有人可以安安稳稳一辈子.就算是最有地位最有钱的人也要不断追求.不断历练.不断提升自己. 人的学问少时在不断学习,青年时期不断实践.随着时间推移,到了老年终有所成 ...
- 动态规划算法下的序列问题:最长公共子序列问题和最大子段和问题
本篇主要介绍最长公共子序列问题和最大子段和问题 1.最长公共子序列问题 什么是最长公共子序列 给定一个序列X=<x1,x2,x3,x4-,xm>,另一个序列Z=<z1,z2,z3,z ...
- 贪心、递归、递推以及动态规划算法的分析与对比
PS: 头一次规规矩矩的按照论文的格式写文章,呵呵.虽然是小儿科的不能再小儿科的东西了..不过..也忽悠了6000多字~~嘿嘿..肯定写的不好,第一次嘛..所以..接受大家一切批评哈!...文章N ...
- strassen矩阵乘法 java_矩阵乘法Strassen算法
矩阵乘法是种极其耗时的运算.以 为例,其中 和 都是 矩阵.根据矩阵乘法的定义, 中的每个元素需要按照如下方式计算 式(4.8)包含一个 次的循环,因此计算 的时间复杂度为 .而 共有 个元素,因此总 ...
最新文章
- git 还原版本方法
- JS 取消冒泡事件 兼容火狐IE
- Linux Shell脚本攻略学习总结:一
- Python的IDE之PyCharm:PyCharm的使用技巧图文教程(修改Pycharm默认风格颜色、编辑器内代码注释区域的颜色、编辑器内的Python Interpreter等)之详细攻略
- 【转】Unity中写GLSL(一)—— 简单的diffuse color
- webpack 打包第三方库_webpack打包分离第三方库和业务代码
- Java之递归遍历目录,修改指定文件的指定内容
- php 字符串与数字相加,注意!PHP中字符串与数字的比较
- Linux下安装和配置solr/tomcat/IK分词器 详细实例二.
- iOS开发--正则表达式
- 递增三元组蓝桥杯c语言,蓝桥-递增三元组-蓝桥
- Codechef QGRID
- 开发这么久你真知道for循环内部执行顺序吗?
- python学习手册 简记
- c 中空格的asc码表_ascii码表由小到大空格字符
- lenovo 笔记本ideapad 320c-15改装win7问题
- 【Linux操作系统基础】第一章 Linux命令行使用技巧
- SpringBoot整合Dubbo
- Java多线程篇--concurrentHashMap
- 怎么解c语言逆向编码,逆向还原C语言代码 练习1