《计算机算法设计与分析》第三章动态规划法

算法设计与分析 第三章动态规划 动态规划算法的基本思想 将原问题分解为若干个子问题,先求子问题的解,然后从这些子问题的解得到原问题的解。 这些子问题的解往往不是相互独立的。在求解的过程中,许多子问题的解被反复地使用。为了避免重复计算,动态规划算法采用了填表来保存子问题解的方法。 在算法中用表格来保存已经求解的子问题的解,无论它是否会被用到。当以后遇到该子问题时即可查表取出其解,避免了重复计算。 矩阵连乘问题 给定n个矩阵:A1, A2, …, An,其中Ai与Ai+1是可乘的。确定一种连乘的顺序,使得矩阵连乘的计算量为最小。 设A和B分别是p×q和q×r的两个矩阵,则乘积C=AB为p×r的矩阵,计算量为pqr次数乘。 但是对于多于2个以上的矩阵连乘,连乘的顺序却非常重要,因为不同的顺序的总计算量将会有很大的差别。 不同计算顺序的差别 设矩阵A1, A2和A3分别为10×100, 100×5和5×50的矩阵,现要计算A1A2A3 。 若按((A1A2)A3)来计算,则需要的数乘次数为10×100×5 + 10×5×50 = 7500 若按(A1(A2 A3))来计算,则需要的数乘次数为100 ×5 ×50+ 10×100×50 = 75000 后一种计算顺序的计算量竟是前者的10倍! 所以,求多个矩阵的连乘积时,计算的结合顺序是十分重要的。 完全加括号矩阵连乘积 若一个矩阵的连乘积的计算次序完全确定,就称该连乘积已完全加括号。完全加括号的矩阵连乘积可递归地定义为: 单个矩阵是完全加括号的; 矩阵连乘积A是完全加括号的,则A可表示为2个完全加括号的矩阵连乘积B和C的乘积并加括号,即A=(BC)。 不同计算顺序的数量 设n个矩阵的连乘积有P(n)个不同的计算顺序。 分解最优解的结构 将矩阵连乘积AiAi+1…Aj记为A[i: j]。 若A[1: n] 的一个最优解是在矩阵Ak和Ak+1处断开的,即A[1: n] = (A[1: k] A[k+1: n]),则A[1: k]和A[k+1: n]也分别是最优解。 事实上,若A[1: k]的一个计算次序所需计算量更少的话,则用此计算次序替换原来的次序,则得到A[1: n]一个更少的计算量,这是一个矛盾。同理A[k+1: n]也是最优解。 最优子结构性质:最优解的子结构也最优的。 建立递归关系 令m[i][j] , 1≤i, j≤n,为计算A[i, j] 的最少数乘次数,则原问题为m[1][n]。 当i = j时,A[i, j]为单一矩阵, m[i][j] = 0; 当i<j时,利用最优子结构性质有: 直接递归的时间复杂性 根据前面的递归式不难得出RecurMatrxChain的时间复杂性为 直接递归中有大量重复计算 直接递归中有大量重复计算,如A[1: 4]计算中: 消除重复的计算 要消除重复计算,可在计算过程中保存已解决的子问题的答案。这样,每个子问题只计算一次,而在后面需要时只要简单查一下,从而避免重复计算。 计算方式可依据递归式自底向上地进行。 注意到在此问题中,不同的有序对 (i, j)就对应不同的子问题,因此不同的子问题个数最多只有Cn2+ n = ?(n2)个。 这样便可以得到多项式时间的算法。 自底向上的计算 例如对于A1A2A3A4,依据递归式以自底向上的方式计算出各个子问题,其过程如下: 消除重复的矩阵连乘算法 Void MatrixChain(int *p, int n, int **m, int **s) { for (int i = 1; i <= n; i++) m[i][i] = 0; //将对角线元素赋值为零,即单个矩阵计算量为0 for (int r = 2; r <= n; r++) for (int i = 1; i <= n – r +1; i++) { int j = i + r – 1; (5) m[i][j] = m[i+1][j] + p[i–1]*p[i]*p[j]; //计算A[i, j] = A[i: i] A[i+1: j] s[i][j] = i; //记下断点i (7) for (int k = i + 1; k < j; k++) { int t = m[i][k] + m[k+1][j] + p[i–1]*p[k]*p[j]; //对i

计算机算法设计与分析第三章答案,《计算机算法设计与分析》第三章动态规划法.ppt...相关推荐

  1. 浙江计算机二级c语言上机题库及答案,计算机二级C语言上机题库及答案2017

    计算机二级C语言上机题库及答案2017 二.改错题: 给定程序MODI1.C中函数fun的功能是:将字符串中的字符按逆序输出,但不改 变字符串中的内容. 例如,若字符串为abcd,则应输出:dcba. ...

  2. 计算机英语b级题库,2017年答案计算机等级考试题库「附答案」

    2017年答案计算机等级考试题库「附答案」 一.单选题 1.世界上首次提出存储程序计算机体系结构的是 A 莫奇莱 B 艾仑·图灵 C 乔治·布尔 D 冯·诺依曼 2.世界上第一台电子计算机诞生于 A ...

  3. 计算机组成原理第二版第5章答案,计算机组成原理第5章习题参考答案.pdf

    <计算机组成原理第5章习题参考答案.pdf>由会员分享,提供在线免费全文阅读可下载,此文档格式为pdf,更多相关<计算机组成原理第5章习题参考答案.pdf>文档请在天天文库搜索 ...

  4. 计算机原理第四章答案,计算机组成原理习题答案第四章

    <计算机组成原理习题答案第四章>由会员分享,可在线阅读,更多相关<计算机组成原理习题答案第四章(6页珍藏版)>请在人人文库网上搜索. 1.计算机组成原理习题答案第四章1.指令长 ...

  5. 计算机控制系统第二章答案,计算机控制系统习题参考答案--第2章

    <计算机控制系统习题参考答案--第2章>由会员分享,可在线阅读,更多相关<计算机控制系统习题参考答案--第2章(6页珍藏版)>请在人人文库网上搜索. 1.计算机控制系统习题参考 ...

  6. 微型计算机技术第三版第三章答案,微型计算机原理与接口技术第三章习题及答案...

    第三章 习题及答案 2. DS=1000H, BX=0200H, SI=2, 内存10200H-10205H 单元的内容分别是10H, 2AH, 3CH, 46H, 59H, 6BH ,下列指令执行后 ...

  7. c语言程序设计教程第三版答案9.5,C语言程序设计-第5-9章习题解答.ppt

    C语言程序设计-第5-9章习题解答 华中科技大学计算机学院 C语言程序设计 第5-9章 部分习题解答 作业中问题较多的习题 第5章5.4(2) 第6章6.1,6.3,6.5(6),6.8 第7章无 第 ...

  8. 计算机文化基础案例教程第三版答案,计算机文化基础案例教程教学课件作者第3版谭宁教学课件素材排骨做法.doc...

    计算机文化基础案例教程教学课件作者第3版谭宁教学课件素材排骨做法.doc (3页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 1.香酥排 ...

  9. 郑莉版java第三章答案_java语言程序设计(郑莉)第七章课后习题答案.docx

    java语言程序设计(郑莉)第七章课后习题答案.docx 还剩 10页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: if (matrix.isTria ...

  10. 计算机文化基础案例教程第三版答案,计算机文化基础案例教程(第3版 谭宁)教学课件 素材.zip-排骨做法.doc...

    原文件部分截取内容: 1.香酥排骨用料: 1.猪排骨一斤. 2.葱三棵. 3.老姜一块. 4.酱油一大匙.. 5.五香粉咖啡匙. 6.熟芝麻一大匙. 7.香油一小匙. 8.盐.味精适量. 9.汤或水一 ...

最新文章

  1. CSS3学习之 animation 属性
  2. 自动化运维平台中的统一认证接入与单点登录实现
  3. mysql时间字段条件查询_mysql 查询 时间作为查询条件
  4. bootstrape实战案例_bootstrap 实战入门教程(一)
  5. 原生JS替代jQuery的各种方法汇总
  6. eosio.msig合约源码分析
  7. 计算机打字速录,速录员打字口诀有哪些
  8. JAVASE,JAVAEE,JAVAME的区别
  9. kotlin使用gson解析json
  10. 从excel表格生成ArcGIS Pro样式符号
  11. 树莓派pythongpio编程_基于树莓派的python GPIO编程-常用函数综合整理
  12. Jenkins教程(2)插件源与常用插件
  13. 网站文章采集器-万能文章采集器
  14. android页面布局计算机,Android Studio制作简单计算器App
  15. Cadence常规通孔焊盘的创建
  16. 开源SSL加快器的构建
  17. 腾格里沙漠部分污染地被填埋 记者采访被限自由
  18. select2下拉框总结
  19. Oracle中的emp、dept、bonus及salgrade表的新建及MySQL中的三种注释形式
  20. Windows 下安装并配置Maven

热门文章

  1. 中国程序员最爱读错的70个英文单词!注有正解
  2. Flask第十八篇 Flask-Migrate
  3. 【资料搬迁】虚拟机安装CentOS
  4. python读取excel(xlrd)
  5. Android版本下载以及切换
  6. 如何在spring框架中解决多数据源的问题[转]
  7. VC中cl.exe命令参数详解
  8. Java——包装器类
  9. lepus监控mysql慢查询_天兔(Lepus 3.8)收集MySQL慢查询
  10. boot idea无法识别spring_基于gradle和springboot的IDEA项目@SpringBootApplication无法识别,怎么办?...