一、问题描述

引出问题之前我们先来复习一下矩阵乘积的标准算法。

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矩阵连乘_算法设计与分析——矩阵连乘问题(动态规划)相关推荐

  1. 程振波 算法设计与分析_算法设计与分析

    本书按照教育部*制定的计算机科学与技术专业规范的教学大纲编写,努力与国际计算机学科的教学要求接轨.强调 算法 与 数据结构 之间密不可分的联系,因而强调融数据类型与定义在该类型上的运算于一体的抽象数据 ...

  2. 算法设计与分析_算法设计与分析(第2版)第2章分治策略回顾

    YI时间|外刊|MM-DFW|机器学习系列 点击上方蓝字,关注给你写干货的松子茶 分治策略是通用算法设计技术之一,很多有效的算法是它的特殊实现,顾名思义就是分而治之.一个问题能够用分治法求解的要素是 ...

  3. python 算法设计与分析_算法设计与分析(黄建军)

    spContent=本课基于主讲教师在北京大学讲授数据结构与算法课(Python版)的多年教学实践经验,面向具有Python语言程序设计基础的大学生和社会公众,介绍常见的基本数据结构以及相关经典算法, ...

  4. 算法设计与分析 矩阵连乘问题 动态规划

    举例 计算次序 按照矩阵链的长度递增(1,2, - n)顺序,计算m[i,j] . 算法matrixChain,首先计算出m[i,i]=0,i=1,2,-,n. 然后,根据递归式,按矩阵链长递增的方式 ...

  5. 算法设计原则验证实验报告_算法设计与分析实验报告 统计数字问题

    一 . 实验要求 1 .掌握算法的计算复杂性概念. 2 .掌握算法渐近复杂性的数学表述. 3 .掌握用 C++ 语言描述算法的方法. 4 .实现具体的编程与上机实验,验证算法的时间复杂性函数. 二 . ...

  6. 计算机算法设计与分析 矩阵连乘问题

    矩阵链连乘问题: 给定n个矩阵{A1,A2,-,An},其中Ai与Ai+1是可乘 的,i=1,2-,n-1.如何确定计算矩阵连乘积的计算次序,使得依此次序 计算矩阵连乘积需要的数乘次数最少. 输入数据 ...

  7. 算法设计与分析:(二)动态规划

    目录 设计思想 使用动态规划的必要条件 适用动态规划算法解决的问题的特征: 优化原则: 动态规划的一般步骤 以背包问题为例 动态规划本质上为带备忘录的穷举算法.对动态规划问题,直接套框架即可:问题有什 ...

  8. 【算法设计与分析基础】21、动态规划-背包问题

    问题: * 对一组物品: * 重量为:w1,w2,w3....wn * 价值为:v1,v2,v3,....vn * 和一个可以存放重量为W的背包 * 求这些物品装进去如何才会是最右价值的装法 解题思路 ...

  9. USTC算法设计与分析-总结

    <算法设计与分析>是中国科学技术大学计算机专业的研究生学科基础课,黄刘生老师讲概率算法和近似算法,汪炀老师讲分布式算法,因为课程内容繁杂且难度较大,所以结合了上课所做笔记和期末复习总结成思 ...

最新文章

  1. ISE安装和FLASH烧录
  2. JCIM | 用于自动生成类药分子的生成网络复合体(GNC)
  3. ios9 字符串与UTF-8 互相转换
  4. Scrapy爬虫框架第五讲(linux环境)【download middleware用法】
  5. 《javascript语言精髓与编程实践》--原型继承笔记
  6. 京委本圣经的历史考证
  7. 浅谈Foxmail邮件迁移
  8. NCBI Genbank核苷酸序列数据库检索基因序列解读
  9. U盘重装Win10系统视频教程
  10. k8s、Deployment多副本资源详解、SERVICE通信、案例一nginx端口暴漏、案例二tomcat端口暴漏、案例三jenkins端口暴漏
  11. java窗体 个人信心_帮忙写下代码java swing,个人信息实例
  12. #html#画哆啦a梦
  13. void指针(void*):void*存放任意对象的地址、通过(int*)a转换指针类型
  14. docker-compose基本命令使用
  15. 张家口北方学院计算机是专科,河北北方学院有哪些专科专业
  16. fm24c16c语言程序,铁电存储器FM24C16驱动程序(转)
  17. stegsolve打不开原因
  18. 人工神经网络基础概念、原理知识(补)
  19. [诗歌] 李白《怨情》
  20. it词汇总结(来自互联网)

热门文章

  1. github推送错误:已经有此代码,不允许覆盖的解决方法
  2. c# string总结
  3. ThinkPHP笔记——完全配置参考手册
  4. ASP.NET Web Pages 的冲突版本问题
  5. Spring JdbcTemplate查询实例
  6. 在web开发中的三个层次使用事务
  7. hibernate中的所有属性
  8. 终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
  9. mysql分布式数据库中间件对比
  10. jQuery的进行解决layui闪退的问题