java矩阵连乘_算法设计与分析——矩阵连乘问题(动态规划)
一、问题描述
引出问题之前我们先来复习一下矩阵乘积的标准算法。
int ra,ca;//矩阵A的行数和列数
int rb,cb;//矩阵B的行数和列数
voidmatrixMultiply()
{for(int i=0;i
{for(int j=0;j
{int sun=0;for(int k=0;k<=ca;k++)
{
sum+=a[i][k]*b[k][j];
}
c[i][j]=sum;
}
}
}
给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2…,n-1。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。例如,给定三个连乘矩阵{A1,A2,A3}的维数分别是10*100,100*5和5*50,采用(A1A2)A3,乘法次数为10*100*5+10*5*50=7500次,而采用A1(A2A3),乘法次数为100*5*50+10*100*50=75000次乘法,显然,最好的次序是(A1A2)A3,乘法次数为7500次。
加括号的方式对计算量有很大的影响,于是自然地提出矩阵连乘的最优计算次序问题,即对于给定的相继n个矩阵,如何确定矩阵连乘的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。
二、问题分析
矩阵连乘也是Catalan数的一个常用的例子,关于时间复杂度的推算需要参考离散数学关于Catalan的内容。
下面考虑使用动态规划法解矩阵连乘积的最优计算次序问题。
1、分析最优解的结构
问题的最优子结构性质是该问题可以用动态规划求解的显著特征!!!
2、建立递归关系
3、计算最优值
public static void matrixChain(intn) {for (int i = 1; i <= n; i++) {
m[i][i]= 0;
}for (int r = 2; r <= n; r++) {//i与j的差值
for (int i = 1; i <= n - r + 1; i++) {int j = i + r - 1;
m[i][j]= m[i + 1][j] + p[i - 1] * p[i] *p[j];
s[i][j]=i;for (int k = i + 1; k < j; k++) {int t = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] *p[j];if (t
m[i][j]=t;
s[i][j]=k;
}
}
}
}
}
4、构造最优解
public static void traceback(int i, intj) {if (i ==j) {
System.out.printf("A%d", i); //输出是第几个数据
return;
}
System.out.printf("(");
traceback(i, s[i][j]);//递归下一个数据
System.out.printf(" x ");
traceback(s[i][j]+ 1, j);
System.out.printf(")");
}
三、总结
java矩阵连乘_算法设计与分析——矩阵连乘问题(动态规划)相关推荐
- 程振波 算法设计与分析_算法设计与分析
本书按照教育部*制定的计算机科学与技术专业规范的教学大纲编写,努力与国际计算机学科的教学要求接轨.强调 算法 与 数据结构 之间密不可分的联系,因而强调融数据类型与定义在该类型上的运算于一体的抽象数据 ...
- 算法设计与分析_算法设计与分析(第2版)第2章分治策略回顾
YI时间|外刊|MM-DFW|机器学习系列 点击上方蓝字,关注给你写干货的松子茶 分治策略是通用算法设计技术之一,很多有效的算法是它的特殊实现,顾名思义就是分而治之.一个问题能够用分治法求解的要素是 ...
- python 算法设计与分析_算法设计与分析(黄建军)
spContent=本课基于主讲教师在北京大学讲授数据结构与算法课(Python版)的多年教学实践经验,面向具有Python语言程序设计基础的大学生和社会公众,介绍常见的基本数据结构以及相关经典算法, ...
- 算法设计与分析 矩阵连乘问题 动态规划
举例 计算次序 按照矩阵链的长度递增(1,2, - n)顺序,计算m[i,j] . 算法matrixChain,首先计算出m[i,i]=0,i=1,2,-,n. 然后,根据递归式,按矩阵链长递增的方式 ...
- 算法设计原则验证实验报告_算法设计与分析实验报告 统计数字问题
一 . 实验要求 1 .掌握算法的计算复杂性概念. 2 .掌握算法渐近复杂性的数学表述. 3 .掌握用 C++ 语言描述算法的方法. 4 .实现具体的编程与上机实验,验证算法的时间复杂性函数. 二 . ...
- 计算机算法设计与分析 矩阵连乘问题
矩阵链连乘问题: 给定n个矩阵{A1,A2,-,An},其中Ai与Ai+1是可乘 的,i=1,2-,n-1.如何确定计算矩阵连乘积的计算次序,使得依此次序 计算矩阵连乘积需要的数乘次数最少. 输入数据 ...
- 算法设计与分析:(二)动态规划
目录 设计思想 使用动态规划的必要条件 适用动态规划算法解决的问题的特征: 优化原则: 动态规划的一般步骤 以背包问题为例 动态规划本质上为带备忘录的穷举算法.对动态规划问题,直接套框架即可:问题有什 ...
- 【算法设计与分析基础】21、动态规划-背包问题
问题: * 对一组物品: * 重量为:w1,w2,w3....wn * 价值为:v1,v2,v3,....vn * 和一个可以存放重量为W的背包 * 求这些物品装进去如何才会是最右价值的装法 解题思路 ...
- USTC算法设计与分析-总结
<算法设计与分析>是中国科学技术大学计算机专业的研究生学科基础课,黄刘生老师讲概率算法和近似算法,汪炀老师讲分布式算法,因为课程内容繁杂且难度较大,所以结合了上课所做笔记和期末复习总结成思 ...
最新文章
- ISE安装和FLASH烧录
- JCIM | 用于自动生成类药分子的生成网络复合体(GNC)
- ios9 字符串与UTF-8 互相转换
- Scrapy爬虫框架第五讲(linux环境)【download middleware用法】
- 《javascript语言精髓与编程实践》--原型继承笔记
- 京委本圣经的历史考证
- 浅谈Foxmail邮件迁移
- NCBI Genbank核苷酸序列数据库检索基因序列解读
- U盘重装Win10系统视频教程
- k8s、Deployment多副本资源详解、SERVICE通信、案例一nginx端口暴漏、案例二tomcat端口暴漏、案例三jenkins端口暴漏
- java窗体 个人信心_帮忙写下代码java swing,个人信息实例
- #html#画哆啦a梦
- void指针(void*):void*存放任意对象的地址、通过(int*)a转换指针类型
- docker-compose基本命令使用
- 张家口北方学院计算机是专科,河北北方学院有哪些专科专业
- fm24c16c语言程序,铁电存储器FM24C16驱动程序(转)
- stegsolve打不开原因
- 人工神经网络基础概念、原理知识(补)
- [诗歌] 李白《怨情》
- it词汇总结(来自互联网)