武汉大学《算法设计与分析》教学课件-7动态规划.ppt

武汉大学《算法设计与分析》教学课件-7动态规划.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Algorithms Design Techniques and Analysis * 矩阵链相乘 先考察3个矩阵{A1,A2,A3}连乘的情况。设这三个矩阵的维数分别为10 × 100, 100 × 5, and 5 × 50。 加括号方式 第一次相乘次数 第二次相乘次数 总相乘次数 ((A1 A2)A3) 10.100.5=5000 10.5.50=2500 7500 (A1(A2 A3)) 100.5.50=25000 10.100.50=50000 75000 问题 如何确定计算矩阵连乘积A1A2…An的计算次序(完全加括号方式),使得依此次序计算矩阵连乘积需要的数乘次数最少。 * Algorithms Design Techniques and Analysis * 蛮力方法: 穷举所有的计算次序 基本思路 对于n个矩阵的连乘积,设其不同的计算次序为P(n) 当n = 1, 只有一个矩阵,因此P(n)=1 当n ≥ 2,对于前k个矩阵有P(k)种方法放置括号。对于P(k)中的每一种方法,可对余下的P( n-k)个矩阵放置括号,总共有P(k)P(n-k) 种方法。由于可以假设k是1到n-1中的任意值,对于n个矩阵放置括号的所有方法数由下面的和式给出: * Algorithms Design Techniques and Analysis * 蛮力方法: 穷举所有的计算次序 递推式的解 由于对于每个括弧号表达式,找到数量乘法次数的时间耗费是?(n),这样用蛮力方法可以求得找到n个矩阵相乘的最优方法所需的运行时间是? (4n/n0.5),它甚至对于一个中等规模的n值也是不切实际的。 * Algorithms Design Techniques and Analysis * 最优子结构 将这个计算次序在矩阵A(k)和A(k+1)之间将矩阵链断开,则生成两个矩阵链A1 .. Ak 和Ak+1 .. An 。计算A1 .. An的最优次序所包含的计算矩阵子链 A1 .. Ak和Ak+1 .. An的次序也是最优的。 矩阵子链的所耗费的计算量越低,则矩阵链A1 .. An所耗费的计算量越低 总共的计算量包括 cost( A1 .. Ak) + cost( Ak+1 .. An) + cost (两个矩阵子链的乘积生成的矩阵相乘)。而无论子问题的解决方案如何,最后一项的计算量不变。 * Algorithms Design Techniques and Analysis * 动态规划方法 将矩阵连乘积A(i)A(i+1)…A(j)简记为A[i:j],设计算A[i:j],1 = i = j = n,所需要的最少数乘次数m[i,j],则原问题的最优值为m[1,n] 当i = j时,A[i:j]=Ai,因此,m[i,i] = 0,i = 1,2,…,n 当i j时,m[i,j] = m[i,k] + m[k+1,j] + p(i-1)p(k)p(j) 这里A(i)的维数为p(i-1)*p (i)(注:p(i-1)为矩阵A(i)的行数,p(i)为矩阵A[i]的列数) 可以递归地定义m[i,j]为: * Algorithms Design Techniques and Analysis * 下面的伪代码假定矩阵Ai 尺寸p[i-1] ×p[i] for i = 1, 2, ..., n. 输入是p = p[0], p[1], ..., p[n], 其中length[p] = n + 1. 该过程使用的辅助表m[1..n, 1..n]用于存储的最小m[i, j] 的计算耗费 辅助表s[1..n, 1..n]记录索引k达到最佳的成本计算时的m[i, j],我们将使用表S构建一个最优方案。 算法 * Algorithms Design Techniques and Analysis * Algorithm MATRIX-CHAIN-ORDER(p) n ← length[p] – 1 //n个矩阵 for i ← 1 to n m[i, i] ← 0 end for for l ← 2 to n ?l is the chain length. for i ← 1 to n – (l – 1) j ← i + (l – 1) m[i, j] ← ∞ for k ← i to j - 1 q ← m[i, k] + m[k + 1, j] + p[i-1] p[k]p[j] //矩阵乘法次数 if q m[i, j] //最小数乘

文档评论(0)

a13355589 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档