动态规划入门篇.ppt
《动态规划入门篇.ppt》由会员分享,可在线阅读,更多相关《动态规划入门篇.ppt(63页珍藏版)》请在三一办公上搜索。
1、动态规划入门篇,成都大学第二期ACM暑期集训李明金2009/08/12马健鸿2010/08/11,2009-8-12,成都大学ACM暑期集训DP篇李明金,1,前言,纵观ACM届,大到每年的全球总决赛,小到TC的SRM抑或各个OJ的月赛,我们很轻易的发现一个共同的规律动态规划在其中稳稳的占据了一个重要的地位。可以说,掌握了动态规划,不一定会成为大牛,但是一只大牛,是肯定精通动态规划的。,2009-8-12,成都大学ACM暑期集训DP篇李明金,2,动态规划,和分治法一样,是通过组合子问题的解而解决整个问题的。分治算法是指将问题划分成一些独立的子问题,递归求解各子问题,然后合并子问题的解而得到原问题
2、的解。于此不同,动态规划适用于子问题不是独立的情况,也就是各子问题包含公共的子子问题。动态规划对每个子子问题只求解一次,将其结果保存在一张表中,从而避免每次遇到各个子问题时重新计算答案。动态规划通常应用于最优化问题。此类问题可能有许多种可行解。每个解都有一个值,而我们希望找到一个具有最优(最大或最小)值的解。称这样的问题为该问题的“一个”最优解(而不是“确定的”最优解),因为可能存在多个取最优解的值。总结:自从有了动态规划,这个世界变得好美妙!,2009-8-12,成都大学ACM暑期集训DP篇李明金,3,目录,0.动态规划的基本步骤1.一个例题2.什么时候需要动态规划3.最优子结构4.重叠子问
3、题5.动态规划的两个重要元素状态&状态转移方程6.备忘录介绍7.例题 数字三角形花束摆放 最大数字子串积木游戏 Subsquence 炮兵阵地(状态压缩动态规划)8.练习:NOJ 江苏省赛回放 C D E(三角形演变题)H,2009-8-12,成都大学ACM暑期集训DP篇李明金,4,0.动态规划的基本步骤,1)描述最优解的结构2)递归定义最优解的值3)按自底向上的方式计算最优解的值4)由计算出的结果构造一个最优解第1-3步构成问题的动态规划解的基础。第四步只要求计算最优解的值时可以略去。如果的确做了第四步,则有时要在第三步的计算中记录一些附加信息,使构造一个最优解变得容易。,2009-8-12
4、,成都大学ACM暑期集训DP篇李明金,5,1.一个例题,例一:装配线调度问题描述:某汽车工厂有2个装配线,每个装配线有n 个装配站(按顺序编号1n),两个装配线对应的装配站执行相同的功能,但所用的时间可能不同。经过第i条流水线(i=1,2)的第j 个装配站所花的时间为Aij。从第i条流水线的第j 个装配站移到第j+1个装配站的时间可以忽略,而移到另外一个流水线的下一个装配站则需要一定的时间Tij。汽车进入流水线不需要花时间,出流水线时需要花时间Tin。开始进入装配线i的时间是 ei。结束离开装配线i的时间是 xi。汽车的装配需要按顺序经过所有装配站。现在已知装配时间Aij 和转移时间Tij,要
5、求输出装配一辆汽车所需要的最短时间。,2009-8-12,成都大学ACM暑期集训DP篇李明金,6,方案一:暴力搜索,穷举所有装配可能,然后选择极小。显然这个方案是不可行的,因为我们分析可知,装配方式共有2N种(将所使用装配站一内的站看做一个集合,全集是1.N,子集就有2N),这时时间复杂度到达O(2N),显然N太大的时候是一定会TE的。,2009-8-12,成都大学ACM暑期集训DP篇李明金,7,方案二:动态规划。步骤一:描述最优解的结构在这里就是通过工厂最快路线的结构其实这里就是描述问题是否具有一个最优子结构,即可以利用子问题的最优解构造原问题的一个最优解。在这道题中,观察一条通过S1,j的
6、最快路线,我们发现,它必然是通过S1,j-1或S2,j-1中的一个的最快路线(如果不是最快,则自我矛盾,S1,j就不是最快了)为了解决这个问题,即寻找通过人一条装配线上的装配站J的最快路线,我们解决它的子问题,即寻找通过两条装配线上的装配站J-1的最快路线。所以,对于这个问题,我们可以求子问题的最优解,从而得到原问题的最优解。PS:状态,状态转移方程的概念将会在理脱出,后面会提到,只要找好了状态方程(加元等手段),就能轻松使用动态规划。,2009-8-12,成都大学ACM暑期集训DP篇李明金,8,步骤二:一个递归的解利用子问题的最优解来递归定义一个最优解的值。在这个问题中,我们选择在两条装备线
7、上通过装配站j的最快路线的问题作为子问题(j=1,2,3.,n)。令fij表示一个底盘从起点到装配站Si,j的最快可能时间。我们的最终目标是确定底盘通过工厂的所有路线的最快时间,记做f*。f*=min(f1n+x1,f2n+x2)下面的问题就是确定f11和f21,2009-8-12,成都大学ACM暑期集训DP篇李明金,9,显然,不管是从那条线路开始装配的,底盘肯定是直接到达装配站1的,也就是说之前是不用计算转移到装配站1的时间的。则f11=e1+a1,1 f21=e2+a2,1现在计算fij,显然简单递推可知:fi1=ei+ai,1;f1j=min(f1j-1+a1,j,f2j-1+t2,j-
8、1+a1,j)f2j=min(f2j-1+a2,j,f1j-1+t1,j-1+a2,j)fij的值就是子问题的最优解的值。注意:这里,我们不需要知道最优解到底是什么,我们只需要求出最优解是多少即可,所以对构造过程可以不进行跟踪。,2009-8-12,成都大学ACM暑期集训DP篇李明金,10,现在,写出一个递归算法计算通过工厂的最快路线是一件很简单的事情了。只需基于以下几个公式即可:f*=min(f1n+x1,f2n+x2)fi1=ei+ai,1;f1j=min(f1j-1+a1,j,f2j-1+t2,j-1+a1,j)f2j=min(f2j-1+a2,j,f1j-1+t1,j-1+a2,j)现
9、在我们来看这种算法的时间复杂度,发现它有一个问题:它的执行时间是关于n的指数形式即O(2n),这是一个时间复杂度很高的算法。我们来考虑是否能进一步提高它的效率。,2009-8-12,成都大学ACM暑期集训DP篇李明金,11,2009-8-12,成都大学ACM暑期集训DP篇李明金,12,现在考虑这样一种方式FASTEST-WAY(a,t,e,x,n)f11=e1+a1,1f21=e2+a2,1/这两行计算f11和f21的值For j=2 to n/这个循环用来计算fij的值 do if f1j-1+a1,j=f2j-1+t2,j-1+a1,j then f1j=f1j-1+a1,j else f
10、1j=f2j-1+t2,j-1+a2,j if f2j-1+a2,j=f1j-1+t1,j-1+a2,j then f2j=f2j-1+a2,j else f2j=f2j-1+ti,j-1+a2,jif f1n+x1=f2n+x2/计算f*的值 then f*=f1n+x1 else f*=f2n+x2问题,这样计算比直接递归的优势是什么?,解答:减少了重复计算,因为每次计算是试用了上次计算时得出的值,相当于在一个表格里做了记录,使得后面的再次计算时不需要重复计算。这就是后面要讲到的“备忘录”的基本思想。此题A毕总结:这是一道动态规划的典型题目,经典的由重复的子问题的最优解得到原问题的最优解。
11、,2009-8-12,成都大学ACM暑期集训DP篇李明金,13,2.什么时候需要动态规划,动态规划通常应用于最优化问题。此类问题可能有许多种可行解。每个解都有一个值,而我们希望找到一个具有最优(最大或最小)值的解。称这样的问题为该问题的“一个”最优解(而不是“确定的”最优解),因为可能存在多个取最优解的值。动态规划主要用于组合优化问题,即求一个离散问题在某种意义下的最优解,有时也用于组合计数问题。,2009-8-12,成都大学ACM暑期集训DP篇李明金,14,动态规划使用的基本条件就是:1)最优子结构性质 一个问题可用动态规划有效求解的基本要求是该问题具有最优子结构性质,通俗地讲即问题的最优解
12、包含其子问题的最优解。(2)子问题重叠性质 动态规划所针对的问题还有另外一个显著的特征,即它所对应的子问题树中的子问题呈现大量的重复,称为子问题重叠性质。在应用动态规划时,对于重复出现的子问题,只需在第一次遇到时加以求解,并把答案保存起来,以便以后再遇到时直接引用,不必重新求解,从而大大地提高解题的效率。相比之下,一般的搜索技术,对于某个子问题,不管是否已经求解过,只要遇上,就会再次对它求解,因而影响了解题的效率。,2009-8-12,成都大学ACM暑期集训DP篇李明金,15,3.最优子结构,用动态规划求最优化问题的第一步是描述最优解的结构。回顾一下,如果问题的一个最优解中包含子问题的最优解,
13、则该问题具有最优子结构。当一个问题具有最优子结构时,提示我们动态规划可能会适用(注意,在这种情况下,贪心策略可能也是适用的)在动态规划中,我们利用子问题的最优解来构造问题的一个最优解。因此,必须小心以确保在我们所考虑的子问题的范围中,包含了用于一个最优解中的那些子问题。在前面的装配线的例子中,可以看到在任何一条装配线上,通过装配站j的最快路线包含了在其中一条装配线上通过装配站j-1的最快路线。,2009-8-12,成都大学ACM暑期集训DP篇李明金,16,在寻找最优子结构时,可以遵循一种共同的模式:1)问题的一个解可以是做一个选择。例如,选择一个前一个装配线装配站。做这种选择会得到一个可以导致
14、最优解的选择。2)假设对一个给定的问题,已知的是一个可以导致最优解的选择。不必关心如何确定这个选择,尽管假定它是已知的。3)在已知这个选择后,要确定哪些子问题会随之发生,以及如何最好的描述所得到的子问题空间4)利用一种“剪贴”技术,来证明在问题的一个最优解中,使用的子问题的本身必须也是最优的,通过假设每一个子问题的解都不是最优解,然后导出矛盾,即可做到这一点。如果有多于一个子问题的话,由于他们通常非常类似,所以只要对其中一个子问题的“剪贴”稍加修饰,计科很容易的用于其它子问题。,2009-8-12,成都大学ACM暑期集训DP篇李明金,17,为了描述子问题空间,可以遵循这样一条有效的经验规则,就
15、是尽量保持这个空间简单,然后在需要的时候再扩充它。例如,在装配线问题中,我们所考虑的子问题空间(其实就是后面要讲的“状态方程”)就是从工厂入口通过装配站S1,j和S2,j的最快路线。这个子问题空间很合适,因为没必要研究其他。但是往往在很多问题中,这个空间不是这么明显的,这个时候,就需要扩展子问题,得到合适的子问题空间(在后面的数字三角形中会出现这种情况,请大家注意),2009-8-12,成都大学ACM暑期集训DP篇李明金,18,最优子结构在问题域中以两种方式变化:1)有多少个子问题被使用在与原问题的一个最优解中2)在决定一个最优解中使用哪些子问题时有多少个选择。在装配线调度问题中,一个最优解只
16、使用了一个子问题,但是,为确定一个最优解,我们必须考虑两种选择。为找出通过装配站Sij的最快路线,我们使用通过S1,j-1或S2,j-1的最快路线;不管采用了哪一种,它都代表了必须最优解决的子问题。,2009-8-12,成都大学ACM暑期集训DP篇李明金,19,非正式的,一个动态规划算法的运行时间依赖于两个因素的成绩:子问题的总个数和没一个子问题中有多少种选择。在装配线调度中,总共有O(n)个子问题,并且只有两个选择来检查每个子问题,所以执行时间为O(n)。动态规划是采用自底向上的方式利用最优子结构。也就是说,首先找到子问题的最优解,解决子问题,然后找到问题的一个最优解。寻找问题的一个最优解需
17、要在子问题中做出选择,即选择将用哪一个来求解问题。,2009-8-12,成都大学ACM暑期集训DP篇李明金,20,4.重叠子问题,适用于动态规划求解的最优子问题必须具有的第二个要素是空间要“很小”,也就是用来解决原问题的递归算法可反复地解同样的子问题。当一个递归算法不断调用同一个问题时,我们说该最优问题包含重叠子问题针对动态规划产生大量重叠子问题的情况,提出了两种方案,一是:记忆化搜索(即本PPT的第6部分内容备忘录);二是:自底向上的递推(前面的装配线问题,我们就是用这种方式改进的算法效率)。,2009-8-12,成都大学ACM暑期集训DP篇李明金,21,5.状态&状态转移方程,我们从前面的
18、例题中不难感觉到,完成动态规划算法的一个关键点就是写出递推式和边界条件。那么,我们把所选出的状态记为d,d值的递推式即被称为状态转移方程。这样,就很容易写出一个三重循环,第一层按一定的顺序计算每个状态,第二层在计算每个状态时考虑不同的递推路径(称为决策数目),最里层进行每个单独状态转移。算法复杂度=状态数*决策数目*转移费用。状态是一个很重要的概念,如果算法基础过关,那么,成功的为一个题目设计出状态的时候,动态规划已经完成了一大半。设计状态的时候,需要考察问题的无后效性,然后思考状态转移的时候需要考察问题的最优子结构。,2009-8-12,成都大学ACM暑期集训DP篇李明金,22,无后效性:就
19、是说,只有这个决定了今后的决策,即:决策只取决于当前状态的特征因素,而与到达此状态的方式无关,我们把这种性质就叫做无后效性。问题表示与状态定义的区别:有了问题的表示之后,状态的含义不一定确定下来了向前递推法和向后递推法增加维数获得无后效性的状态表示。状态转移的可定义性来自问题的最优子结构。,2009-8-12,成都大学ACM暑期集训DP篇李明金,23,6.备忘录介绍,备忘录(memoization,这并不是拼写错误,这个单词确实是memoization,而不是memorization memraizein。memoization 来源于memo memu,因为这个方法主要是记录一个值,以便以后
20、可以搜索它。),2009-8-12,成都大学ACM暑期集训DP篇李明金,24,动态规划的另外一种变形,它既有通常的动态规划的效率,又采用了一种自顶向下的策略。其思想就是备忘(memoize)原问题的自然但低效的递归算法。想在通常的动态规划中一样,维护一个子问题解的表,但有关填表动作的控制结构更像递归算法。加了备忘的递归算法为没一个子问题的解在表中记录一个表项。开始时,每个表项最初都包含一个特殊值,以表示该表项有待填入。当在递归算法的执行中第一次遇到一个子问题时,就计算它的解并填入表中。以后每次遇到该子问题的时候,只要查看并且并且返回表中先前填入的值即可。备忘录的具体在算法中的实现,这里就不在赘
21、述,有兴趣的同学可以在理解了后面的例题的情况下,将它们改写成用备忘录实现的DP。,2009-8-12,成都大学ACM暑期集训DP篇李明金,25,7.例题,例一:数字三角形问题描述 给定一个具有N层的数字三角形,从顶至底有多条路径,每一步可沿左斜线向下或沿右斜线向下,路径所经过的数字之和为路径得分,请求出最小路径得分。2 6 2 1 8 4 1 5 6 8图11 数字三角形,2009-8-12,成都大学ACM暑期集训DP篇李明金,26,解题思路 这道题可以用动态规划成功地解决,但是,如果对问题的最优结构刻画得不恰当(即状态表示不合适),则无法使用动态规划。状态表示法一:用一元组D(X)描述问题,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 动态 规划 入门
链接地址:https://www.31ppt.com/p-6245526.html