动态规划算法(与王晓东老师教材匹配,包括矩阵连乘问题、电路布线问题、0-1背包问题等都有详解).ppt

动态规划算法(与王晓东老师教材匹配,包括矩阵连乘问题、电路布线问题、0-1背包问题等都有详解).ppt

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

第3章 动态规划; 学习要点: 理解动态规划算法的概念。 掌握动态规划算法的基本要素 (1)最优子结构性质 (2)重叠子问题性质 掌握设计动态规划算法的步骤。 (1)找出最优解的性质,并刻划其结构特征。 (2)递归地定义最优值。 (3)以自底向上的方式计算出最优值。 (4)根据计算最优值时得到的信息,构造最优解。;通过应用范例学习动态规划算法设计策略。 (1)矩阵连乘问题; (2)最长公共子序列; (3)最大子段和 (4)凸多边形最优三角剖分; (5)多边形游戏; (6)图像压缩; (7)电路布线; (8)流水作业调度; (9)背包问题; (10)最优二叉搜索树。 ;动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题;但是经分解得到的子问题往往不是互相独立的。不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被重复计算了许多次。;如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,就可以避免大量重复计算,从而得到多项式时间算法。;动态规划基本步骤;矩阵连乘问题;矩阵连乘问题;特征:计算A[i:j]的最优次序所包含的计算矩阵子链 A[i:k]和A[k+1:j]的次序也是最优的。 矩阵连乘计算次序问题的最优解包含着其子问题的最优解。这种性质称为最优子结构性质。问题的最优子结构性质是该问题可用动态规划算法求解的显著特征。;建立递归关系;计算最优值;用动态规划法求最优解;动态规划算法的基本要素;动态规划算法的基本要素;动态规划算法的基本要素;最长公共子序列;最长公共子序列的结构;子问题的递归结构;计算最优值;算法的改进;凸多边形最优三角剖分;三角剖分的结构及其相关问题;最优子结构性质;最优三角剖分的递归结构;多边形游戏;最优子结构性质;图像压缩;图像压缩;电路布线;记 。N(i,j)的最大不相交子集为MNS(i,j)。Size(i,j)=|MNS(i,j)|。 (1)当i=1时, (2)当i1时, 2.1 jπ(i)。此时, 。故在这种情况下,N(i,j)=N(i-1,j),从而Size(i,j)=Size(i-1,j)。 2.2 j≥π(i),(i,π(i))∈MNS(i,j) 。 则对任意(t,π(t)) ∈MNS(i,j)有ti且π(t)π(i)。在这种情况下MNS(i,j)-{(i,π(i))}是N(i-1,π(i)-1)的最大不相交子集。 2.3 若 ,则对任意(t,π(t)) ∈MNS(i,j)有 ti。从而 。因此,Size(i,j)≤Size(i-1,j)。 另一方面 ,故又有Size(i,j)≥Size(i-1,j), 从而Size(i,j)=Size(i-1,j)。;流水作业调度;流水作业调度;Johnson不等式;流水作业调度的Johnson法则;算法描述;0-1背包问题;0-1背包问题;算法改进;一个例子;函数m(i,j)是由函数m(i+1,j)与函数m(i+1,j-wi)+vi作max运算得到的。因此,函数m(i,j)的全部跳跃点包含于函数m(i+1,j)的跳跃点集p[i+1]与函数m(i+1,j-wi)+vi的跳跃点集q[i+1]的并集中。易知,(s,t)?q[i+1]当且仅当wi?s?c且(s-wi,t-vi)?p[i+1]。因此,容易由p[i+1]确定跳跃点集q[i+1]如下q[i+1]=p[i+1]?(wi,vi)={(j+wi,m(i,j)+vi)|(j,m(i,j))?p[i+1]} 另一方面,设(a,b)和(c,d)是p[i+1]?q[i+1]中的2个跳跃点,则当c?a且db时,(c,d)受控于(a,b),从而(c,d)不是p[i]中的跳跃点。除受控跳跃点外,p[i+1]?q[i+1]中的其它跳跃点均为p[i]中的跳跃点。 由此可见,在递归地由表p[i+1]计算表p[i]时,可先由p[i+1]计算出q[i+1],然后合并表p[i+1]和表q[i+1],并清除其中的受控跳跃点得到表p[i]。;一个例子;上述算法的主要计算量在于计算跳跃点集p[i](1≤i≤n)。由于q[i+1]=p[i+1]?(wi,vi),故计算q[i+1]需要O(|p[i+1]|)计算时间。合并p[i+1]和q[i+1]并清除受控跳跃点也需要O(|p[i+1]|)计算时间。从跳跃点集p[i]的定义可以看出,p[i]中的跳跃

文档评论(0)

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

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

1亿VIP精品文档

相关文档