[训练]算法设计与分析_动态规划(第四章).ppt

[训练]算法设计与分析_动态规划(第四章).ppt

  1. 1、本文档共58页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[训练]算法设计与分析_动态规划(第四章)

计算机算法设计与分析 第四章 动态规划 矩阵连乘问题 给定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 不同计算顺序的数量 设n个矩阵的连乘有P(n)个不同的计算顺序。 不同计算顺序的数量 设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]也是最优解。 最优子结构性质 A1A2…An的矩阵连乘问题,即A[1: n],的最优解中的子问题A[1: k]和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时,利用最优子结构性质有: 递归的执行过程 该递归自顶向下地执行,如A[1: 4]计算: 直接递归的时间复杂性 根据该递归式不难得出的时间复杂性为 递归的执行过程 在此递归的执行中有大量重复计算: 子问题个数最多为O(n2) 可在计算过程中保存已解子问题的答案。这样,每个子问题只要计算一次,而在后面需要该子问题答案时只要简单查一下,从而避免了重复计算。 计算方式可从最简单的子问题开始,依据递归式自底向上地进行。 自底向上的计算 例如对于A1A2A3A4,依据递归式以自底向上的方式计算出各个子问题,其过程如下: 自底向上的计算 例如对于A1A2A3A4,依据递归式以自底向上的方式计算出各个子问题,其过程如下: 自底向上的计算 例如对于A1A2A3A4,依据递归式以自底向上的方式计算出各个子问题,其过程如下: 自底向上的计算 例如对于A1A2A3A4,依据递归式以自底向上的方式计算出各个子问题,其过程如下: 矩阵连乘算法 给矩阵连乘算法取个名字MatrixChain。 矩阵连乘算法 MatrixChain(形参表) { 初始化; 自底向上地计算每一个m[i][j]并将结果填入表中。 } 矩阵连乘算法的数据结构 形参表中应有n和P[n+1]。 算法需要两个二维数组: 二维矩阵m[n][n]。其每个元素m[i][j] , 1≤i, j≤n,为A[i, j] 的最少数乘次数。 二维矩阵s[n][n],其元素s[i][j] , 1≤i, j≤n,为计算A[i, j] 的断点位置。 矩阵连乘算法 MatrixChain(n, P[n+1]) { 矩阵连乘算法 MatrixChain(n, P[n+1]) { 矩阵连乘算法 MatrixChain(n, P[n+1]) { 矩阵连乘算法 MatrixChain(n, P[n+1]) { 矩阵连乘算法 MatrixChain(n, P[n+1]) { MatrixChain的运行举例 MatrixChain用矩阵m[i][j], s[i][j]存放子问题A[i: j]的最小计算量以及相应的断点。 MatrixChain的运行举例 MatrixChain将如下面红色箭头所示的过程逐个计算子问题A[i: j]: 。 MatrixChain的运行举例 MatrixChain的运行举例 MatrixChain的运行举例 MatrixChain的运行举例 MatrixChain的运行举例 MatrixChain的运行举例 MatrixChain的运行举例 MatrixChain的运行举例 MatrixChain的运行举例 Ma

文档评论(0)

138****7331 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档