- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法--动态规划策略
第8章 动态规划策略 动态规划策略 最优子结构性质:问题的最优解包含的子问题的解相对于子问题而言也是最优的。 子问题重叠性质:在对各种可能的子问题分解情形的考察过程中,有可能对低层的子问题反复进行计算。 对具有所谓最优子结构性质及子问题重叠性质的组合优化问题可以用动态规划策略提高算法的效率。 (1)利用最优子结构定义一个关于解的目标值的递归方程。鉴于子问题的重叠性,如果自顶向下地用递归技术解每一个遇到的子问题,则会反复解低层的子问题。 (2)因此,动态规划以自底向上地对每个新产生的子问题仅解一次且将其解保存在一个表格中,需要时可以在表中查找,且能在常数时间内完成查找。 (3)根据计算出的最优解的值构造对应的最优解。 组装线调度问题 输入:2条组装线上的工序数n,组装线上各道工序操作时间构成的矩阵a,底盘在2条组装线间转移时间构成的矩阵t,底盘从入口进入组装线所需时间构成的向量e,完成组装后汽车下线出厂的时间构成的向量x。 输出:由n道工序构成的序列{ },ip?{1, 2},p=1,2,…,n,使得底盘按此序列完成组装所需时间最少。 最优子结构 对任何1j?n,从起点到S1,j的最优路径中,从起点到S1,j的前一站Si,j-1,(i=1或i=2)对Si,j-1而言也是最优路径。 同理,对任何1j?n,从起点到S2,j的最优路径中,从起点到S2,j的前一站Si,j-1,(i=1或i=2)对Si,j-1而言也是最优路径。 设 设f[i, j]表示底盘从起点到通过工序Si,j的可能的最短时间。根据最优子结构,有: 子问题重叠 设ri(j)为递归算法中对f[i, j]的访问次数,则可以证明 ri(n-j) = 2j 即f[i, j]的访问次数= 2n-j,于是f[1, 1]就被访问了2n-1次! 自底向上记表计算 FASTEST-WAY(a, t, e, x, n) 1 f[1,1] ← e1 + a1,1 2 f[2, 1] ←e2 + a2,1 3 for j ← 2 to n 4 do if f[1, j - 1] + a1,j ≤ f[2, j - 1] + t2,j-1 + a1,j 5 then f[1, j] ? f[1, j - 1] + a1, j 6 l[1, j] ? 1 7 else f[1, j] ? f[2, j - 1] + t2,j-1 + a1,j 8 l[1, j] ? 2 9 if f [2, j - 1] + a2,j ≤ f[1, j - 1] + t1,j-1 + a2,j 10 then f[2, j] ? f[2, j - 1] + a2,j 11 l[2, j] ? 2 12 else f[2, j] ? f[1, j - 1] + t1,j-1 + a2,j 13 l[2, j] ? 1 14 if f[1, n] + x1 ≤ f[2, n] + x2 15 then f* = f[1, n] + x1 16 l* = 1 17 else f* = f[2, n] + x2 18 l* = 2 运行时间为为Θ(n)。 构造最优解 PRINT-STATIONS(l, i, j) 1 if j=1 2 then print line i , station j 3 return 4 PRINT-STATIONS(l, l[l[i, j],j], j-1) 5 print line i , station j 运行时间为为Θ(n)。 8.2 最长公共子序列 输入:序列X = x1, x2, ..., xm和Y = y1, y2, ..., yn。 输出:X与Y的一个最长公共子序列Z。 这是一个组合优化问题。X与Y的每个公共子序列(可行解)都有一个长度(目标值),要求计算最长公共子序列(最优解)。如果用强力算法来解决这个问题,则需要在X、Y的所有子序列中找出公共子序列,然后从中选择长度最大的。这需要指数级的时间来完成,因为一个长度为n的序列,有2n个不同的子序列。 最优子结构 定理8-1 (最长公共子序列的最优子结构) 设X = x1, x2, ..., xm和Y = y1, y2, ..., yn为两个序列,并设Z = z1, z2, ..., zk为X和Y的任一LCS。 (1)若xm = yn,则zk = xm = yn且Zk-1是Xm-1和Yn-1的
文档评论(0)