常见动态规划算法问题策略分析..docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
常见动态规划算法问题策略分析.

常见动态规划算法问题策略分析 目录一、动态规划策略11.动态规划介绍12.求解动态规划问题步骤1二、几种动态规划算法的策略分析11.装配线调度问题12.矩阵链乘问题23.最长公共子序列(LCS)34.最大字段和45.0-1背包问题4三、两种解决策略51.自底向上策略52.自顶向上(备忘录)策略53.优缺点分析5四、总结6动态规划策略动态规划介绍动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。由于动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子问题只解一次,将其不同阶段的不同状态保存在一个二维数组中。与分治法最大的差别是:适合于用动态规划法求解的问题,经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)。求解动态规划问题步骤确定最优解结构递归定义最优解的值自底向上计算最优解的值重构最优解几种动态规划算法的策略分析装配线调度问题分析:首先确定最优解结构,分析问题可知大致分为两种情况:从第一个站出站(j=1)和从第j个站出站(j=2)。当j=1:货物上线后只经过一个站,f1[j]=e1+a1,1当j=2,又可分为跳线和不跳线两种情况:不跳线:f1[j]=f1[j-1]+a1,j跳线:当货物从f2跳到f1,有一个跳转时间t2,j-1,则:f1[j]=f2[j-1]+t2,j-1+a1,j由对称关系,f2[j]可同理得出,最后:传输完后,加上自动下线时间x1,x2,总装配时间:最后采用自底向上的方法求解算法并递归的输出最优解的值。矩阵链乘问题分析:若只有一个矩阵,无最优解。若大于一个矩阵:对于A1,A2,…,An, 我们得在和之间加上一个括号使得分开的两个子矩阵链乘积最小,再分别对两个子问题找到最优的划分结果:设m[i,j] 为计算矩阵链Ai..j 的乘积所需的最少标量乘法次数。若:i=j,不需任何计算,即m[i,j]=0,否则:则最终公式为:在计算时,采用了自底向上的方法来求解最优解,在求解过程中用一个辅助的数组S[1….n-1,2….n]来记录最优值m[i,j]对应的分割点K,这样能够构造出最优解。最后,借助辅助数组递归的输出最优解的值。最长公共子序列(LCS)分析:可分为最后一个元素相同和不相同两种情况:最后一个元素相同:求X[1…m-1]和Y[1…n-1]两个子序列的最长公共子序列。最后一个元素不同:求X[1…m-1]和Y[1…n]或者X[1…m-1]和Y[1…n]两个子序列的最长公共子序列。令C[i,j]为的LCS的长度,如果i=0或者j=0则LCS=0,则根据LCS的最优子结构特征我们可以构造出:根据递归式,我们能写出一个递归算法来计算最长公共子序列,由于LCS的子问题过多,所以我们采用自底向上的计算。在这个过程中,我们需要借组一个数组b[i,j]来记录最优解得构造过程,利用b[i,j]所记录的元素来输出最优解。最大字段和分析:求给定的n个整数(可能但不全为负)a1,a2,…,an, 的i跟j,使 ai 到 aj 的和最大。我们定义b[j]=max(sum(i:j)),为从i到j子段的最大子段和。我们比较b[j-1]+a[j]和a[j]的大小,如果b[j-1]0,显然b[j-1]不是最大子段,此时b[j]=a[j]。反之,我们令b[j-1] + a[j] = b[j],找出最大的子段和。则:b[j]=max( b[j-1]+a[j], a[j] ), 1=j=n由上面的递归公式我们可以写出一个自底向上的递归算法,在算法中我们借助一个变量sum来记录过程中的最大子段和,若此时的b[j]sum,更新sum中的值,反之,继续求解。直到程序进行完毕,输入sum中的最大子段和。0-1背包问题分析:分数背包问题可以采用贪心策略解决,但我们在求解0-1背包问题时,我们只能采用动态规划策略。同样地:首先构造最优子结构。令c[i,j]表示利用前i个物品装容量为j的背包所能获得的最大价值,可分两种情况:含物品n:去掉第n个物品,用W-wn容量的背包装物品1,2,…,n-1:c[i,j]=c[i-1,j-wi]+vi不含物品n:用W容量背包装物品1,2,…,n-1:c[i,j]=c[i-1,j]当然,没有物品或没有容量,c[i,j]=0则总的递归式:有上述递归方程,就可写出相

文档评论(0)

kakaxi + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档