第3节 动态规划.ppt

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第3章 动态规划 算法总体思想 分治法---Fibonacci数列 分治法求解Fibonacci数列。 public static fibonacci_recur(int n) { if (n==1||n==2) return 1; return fibonacci_recur(n-2)+fibonacci_recur(n-1); } Fibonacci数列的动态规划算法(迭代法) public static int fibonacci(int n) { f[1]=1; f[2]=1; for (int i=3;i=n;i++) f[i]=f[i-1]+f[i-2]; return f[n]; } 递归中的重复问题—备查技术 动态规划基本步骤 找出最优解的性质,并刻划其结构特征。 递归地定义最优值。 以自底向上的方式计算出最优值。 根据计算最优值时得到的信息,构造最优解。 矩阵连乘问题 完全加括号的矩阵连乘积 1. 分析最优解的结构 2. 建立递归关系 直接递归 public static void matrixChain(int [] p, int [][] m, int [][] s,int i,int j) { if(i==j) return 0; m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j]; S[i][j]=i; for(int k=i+1;kj;k++) {int t = matrixChain(p,m,s,i,k) + matrixChain(p,m,s,k+1,j) + p[i-1]*p[k]*p[j]; if (t m[i][j]) { m[i][j] = t; s[i][j] = k;} 3.计算最优值 实例分析 3、(r=4)4个矩阵连乘 … 4、(r=5)5个矩阵连乘 m[1][5]=min{ m[1][1]+m[2][5]+p0p1p5, m[1][2]+m[3][5]+p0p2p5, m[1][3]+m[4][5]+p0p1p5, m[1][4]+m[5][5]+p0p1p5} m[2][6]=…. 5、(r=6)6个矩阵连乘 … 用动态规划法求最优解 动态规划算法的基本要素 一、最优子结构 二、重叠子问题 三、备忘录方法 最长公共子序列 若给定序列X={x1,x2,…,xm},则另一序列Z={z1,z2,…,zk},是X的子序列是指存在一个严格递增下标序列{i1,i2,…,ik}使得对于所有j=1,2,…,k有:zj=xij。 例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}。 给定2个序列X和Y,当另一序列Z既是X的子序列又是Y的子序列时,称Z是序列X和Y的公共子序列。 给定2个序列X={x1,x2,…,xm}和Y={y1,y2,…,yn},找出X和Y的最长公共子序列。 最长公共子序列的结构 子问题的递归结构 计算最优值 动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题 n T(n/2) T(n/2) T(n/2) T(n/2) T(n) = 但是经分解得到的子问题往往不是互相独立的。不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被重复计算了许多次。 算法总体思想 n T(n) = n/2 T(n/4) T(n/4) T(n/4) T(n/4) n/2 T(n/4) T(n/4) T(n/4) T(n/4) n/2 T(n/4) T(n/4) T(n/4) T(n/4) n/2 T(n/4) T(n/4) T(n/4) T(n/4) 如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,就可以避免大量重复计算,从而得到多项式时间算法。 算法总体思想 n = n/2 T(n/4) T(n/4) T(n/4) T(n/4) n/2 n/2 T(n/4) T(n/4) n/2 T(n/4) T(n/4) T(n/4) T(n/4) T(n/4) T(n) Those who cannot remember the past are doomed to repeat it. -----George Santayana, The life of Reason, Book I: Introduction and Reason in Common Sense (1905) 分治法求解Fib

文档评论(0)

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

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

1亿VIP精品文档

相关文档