动态规划算法.ppt
《动态规划算法.ppt》由会员分享,可在线阅读,更多相关《动态规划算法.ppt(48页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、动态规划算法 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望What is dynamic programmingn与分治法类似与分治法类似,动态规划也是通过组合子问题动态规划也是通过组合子问题的解来求解问题的解来求解问题.n分治算法将问题划分成独立子问题分治算法将问题划分成独立子问题,递归地解决递归地解决这些子问题这些子问题,然后组合这些子问题的解来求解原然后组合这些子问题的解来求解原始问题始问题.nIf these subproblems are not in
2、dependent,what will happen?11/1/20222算法总体思想算法总体思想n动态规划算法与分治法类似动态规划算法与分治法类似,其基本思想也是其基本思想也是将待求解问题分解成若干个子问题将待求解问题分解成若干个子问题nT(n/2)T(n/2)T(n/2)T(n/2)T(n/2)T(n/2)T(n/2)T(n/2)T(n)=11/1/20223n但是经分解得到的子问题往往不是互相独立的但是经分解得到的子问题往往不是互相独立的.不同不同子问题的数目常常只有多项式量级子问题的数目常常只有多项式量级.在用分治法求解在用分治法求解时时,有些子问题被重复计算了许多次有些子问题被重复计
3、算了许多次.算法总体思想算法总体思想nT(n)=n/2T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)11/1/20224算法总体思想算法总体思想n=n/2T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n
4、/4)n/2n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n)Those who cannot remember the past Those who cannot remember the past are doomed to repeat it.are doomed to repeat it.(无法记取教训者必重蹈覆辙无法记取教训者必重蹈覆辙无法记取教训者必重蹈覆辙无法记取教训者必重蹈覆辙)-George Santayana,-George Santay
5、ana,The life of ReasonThe life of Reason,Book I:Introduction and Book I:Introduction and Reason in Common Reason in Common Sense(1905)Sense(1905)n如果能够保存已解决的子问题的答案如果能够保存已解决的子问题的答案,而在需要时再而在需要时再找出已求得的答案找出已求得的答案,就可以避免大量重复计算就可以避免大量重复计算,从而从而得到多项式时间算法得到多项式时间算法.11/1/20225Fibonacci sequence(序列序列)nFibonacci序列
6、定义如下:序列定义如下:q1.procedure f(n)q2.if n=1 or n=2 then return 1q3.else return f(n-1)+f(n-2)n这种递归形式有简洁、容易书写和容易查错等这种递归形式有简洁、容易书写和容易查错等优点优点,最主要是它的抽象性最主要是它的抽象性.n但是它远不是有效的算法但是它远不是有效的算法.q算法复杂性算法复杂性:(n)qWhy?11/1/20226Fibonacci sequence分析分析nf(n)=f(n-1)+f(n-2)n =2f(n-2)+f(n-3)n =3f(n-3)+2f(n-4)n =5f(n-4)+3f(n-5)
7、11/1/20227二项式系数的计算二项式系数的计算有效计算上式的方法是按行构造帕斯卡三角形有效计算上式的方法是按行构造帕斯卡三角形11/1/20228What is dynamic programming什么是动态规划?什么是动态规划?n当子问题发生当子问题发生重叠重叠时时,分治法做了很多不必要的分治法做了很多不必要的工作工作重复对重叠的子问题进行求解重复对重叠的子问题进行求解.n动态规划算法对每个子问题求解一次动态规划算法对每个子问题求解一次,然后将结然后将结果保存在一张表里面果保存在一张表里面,这样可以避免每个已求解这样可以避免每个已求解子问题的重复计算子问题的重复计算.n对于对于Fib
8、onacci序列序列,一个明显的方法是从一个明显的方法是从f(1)开开始自底向上地计算到始自底向上地计算到f(n),只需要只需要(n)时间和时间和(1)空间空间.n和前面的方法相比和前面的方法相比,可以很大程度降低时间复杂可以很大程度降低时间复杂度度.11/1/20229The longest common subsequence problem最长公共子序列问题最长公共子序列问题n在字母表在字母表 上上,分别给出两个长度为分别给出两个长度为n和和m的字符的字符串串A和和B,确定在确定在A和和B中最长公共子序列的长度中最长公共子序列的长度.q这里这里A=a1a2.an的子序列的一个形式为的子序
9、列的一个形式为ai1ai2.aik的的字符串字符串,其中每个其中每个ij在在1到到n之间之间,并且并且1 i1i2.ik nn蛮力法蛮力法:列举列举A所以的所以的2n个子序列个子序列,对于每一子对于每一子序列在序列在(m)时间内来确定它是否也是时间内来确定它是否也是B的子序列的子序列.q很明显很明显,此算法的时间复杂的为此算法的时间复杂的为(m*2n).11/1/202210递推公式递推公式n为了使用动态规划技术为了使用动态规划技术,首先推导一个求最长首先推导一个求最长公共子序列长度的递推公式公共子序列长度的递推公式.q令令A=a1a2.an和和B=b1b2.bmq令令Li,j表示表示a1a2
10、.ai和和b1b2.bj的最长公共的最长公共子序列的长度子序列的长度(i,j可能是可能是0,此时此时a1a2.ai和和b1b2.bj中至少一个为空中至少一个为空).可得如下结论:可得如下结论:11/1/202211递推公式递推公式n观察结论观察结论7.1 如果如果i和和j都大于都大于0,那么那么 q若若ai=bj,Li,j=Li-1,j-1+1q若若ai bj,Li,j=maxLi,j-1,+Li-1,jn可得如下公式:可得如下公式:11/1/202212n现在可以直接用动态规划技术来求解最长现在可以直接用动态规划技术来求解最长公共子序列问题。对每一对公共子序列问题。对每一对i和和j的值,的值
11、,0 i n,0 j m,我们用一个,我们用一个(n+1)(m+1)表来计算表来计算Li,j的值,只需要用上面的公式的值,只需要用上面的公式逐行地填表逐行地填表L0n,0m。算法如下:。算法如下:11/1/202213Algorithm 7.1 LCSInput:Two strings A and B of length n and m,respectively,over an alphabet Output:The length of the longest common subsequence of A and B 1.for i0 to n 2.Li,00 3.end for 4.for
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 动态 规划 算法
限制150内