《计算机算法设计与分析》PPT第三章 动态规划.ppt
《《计算机算法设计与分析》PPT第三章 动态规划.ppt》由会员分享,可在线阅读,更多相关《《计算机算法设计与分析》PPT第三章 动态规划.ppt(111页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机算法设计与分析PPT第三章动态规划 学习要点学习要点:n理解动态规划算法概念。理解动态规划算法概念。n掌握动态规划算法基本要素掌握动态规划算法基本要素(1)最优子结构性质最优子结构性质(2)重叠子问题性质重叠子问题性质n掌握设计动态规划算法的步骤。掌握设计动态规划算法的步骤。(1)找出最优解的性质,并刻划其结构特征。找出最优解的性质,并刻划其结构特征。(2)递归地定义最优值。递归地定义最优值。(3)以自底向上的方式计算出最优值。以自底向上的方式计算出最优值。(4)根据计算最优值时得到的信息,构造最优解。根据计算最优值时得到的信息,构造最优解。2n基本概念基本概念状态状态:表示每个阶段开始
2、时,问题或系统所处的客观:表示每个阶段开始时,问题或系统所处的客观状况。状态既是该阶段的某个起点,又是前一个阶段状况。状态既是该阶段的某个起点,又是前一个阶段的某个终点。通常一个阶段有若干个状态。的某个终点。通常一个阶段有若干个状态。q状态无后效性状态无后效性:如果某个阶段状态给定后,则该阶段以后过:如果某个阶段状态给定后,则该阶段以后过程的发展不受该阶段以前各阶段状态的影响,也就是说状态程的发展不受该阶段以前各阶段状态的影响,也就是说状态具有马尔科夫性。具有马尔科夫性。q适于动态规划法求解的问题具有状态的无后效性适于动态规划法求解的问题具有状态的无后效性策略策略:各个阶段决策确定后,就组成了
3、一个决策序列,:各个阶段决策确定后,就组成了一个决策序列,该序列称之为一个策略。由某个阶段开始到终止阶段该序列称之为一个策略。由某个阶段开始到终止阶段的过程称为的过程称为子过程子过程,其对应的某个策略称为,其对应的某个策略称为子策略子策略。6最优性原理最优性原理nBellman最优性原理最优性原理q求解问题的一个最优策略序列的子策略序列总是最求解问题的一个最优策略序列的子策略序列总是最优的,则称该问题满足最优性原理。优的,则称该问题满足最优性原理。q注:对具有最优性原理性质的问题而言,如果有一注:对具有最优性原理性质的问题而言,如果有一决策序列包含有非最优的决策子序列,则该决策序决策序列包含有
4、非最优的决策子序列,则该决策序列一定不是最优的。列一定不是最优的。7n动态规划的思想实质是分治思想和解决冗余动态规划的思想实质是分治思想和解决冗余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)=算法总体思想算法总体思想8n但是经分解得到的子问题往往不是互相独立的。不同子问题的但是经分解得到的子问题往往不是互相独立的。不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被数目常常只有多
5、项式量级。在用分治法求解时,有些子问题被重复计算了许多次。重复计算了许多次。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)算法总体思想算法总体思想9n如果能够保存已解决的子问题的答案,而在需要时再如果能够保存已解决的子问题的答
6、案,而在需要时再找出已求得的答案,就可以避免大量重复计算,从而找出已求得的答案,就可以避免大量重复计算,从而得到多项式时间算法。得到多项式时间算法。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/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)算法总体思想算法总体思想10动态规划基本步骤动态规划基本步骤找出最优解的性质,并刻划其结构特征。找出最优解的性质,并刻划其结构特征。递归地划分子问题,递
7、归地划分子问题,递归地定义最优值,给出递归地定义最优值,给出最优解的递归式。最优解的递归式。以自底向上的方式计算出最优值。以自底向上的方式计算出最优值。根据计算最优值时得到的信息,构造最优解。根据计算最优值时得到的信息,构造最优解。注:注:步骤步骤是动态规划算法的基本步骤。如果只需要求出是动态规划算法的基本步骤。如果只需要求出最优值的情形,步骤最优值的情形,步骤可以省略;可以省略;若需要求出问题的一个最优解,则必须执行步骤若需要求出问题的一个最优解,则必须执行步骤,步,步骤骤中记录的信息是构造最优解的基础;中记录的信息是构造最优解的基础;11n给定给定n个矩阵个矩阵 ,其中,其中 与与 是是可
8、乘的可乘的,。考察这。考察这n个矩阵的连乘积个矩阵的连乘积n由于矩阵乘法满足结合律,所以计算矩阵的连乘可以由于矩阵乘法满足结合律,所以计算矩阵的连乘可以有许多不同的计算次序。这种计算次序可以用加括号有许多不同的计算次序。这种计算次序可以用加括号的方式来确定。的方式来确定。n若一个矩阵连乘积的计算次序完全确定,也就是说该若一个矩阵连乘积的计算次序完全确定,也就是说该连乘积已完全加括号,则可以依此次序反复调用连乘积已完全加括号,则可以依此次序反复调用2个个矩阵相乘的标准算法计算出矩阵连乘积矩阵相乘的标准算法计算出矩阵连乘积3.2矩阵连乘问题矩阵连乘问题12完全加括号的矩阵连乘积完全加括号的矩阵连乘
9、积n完全加括号的矩阵连乘积的递归定义:完全加括号的矩阵连乘积的递归定义:(1)单个矩阵是完全加括号的;)单个矩阵是完全加括号的;(2)矩阵连乘积)矩阵连乘积A是完全加括号的,则是完全加括号的,则A可表示可表示为为2个完全加括号的矩阵连乘积个完全加括号的矩阵连乘积B和和C的乘积并的乘积并加括号,即加括号,即1314矩阵连乘问题矩阵连乘问题n问题描述问题描述q给定给定n个矩阵个矩阵A1,A2,An,其中,其中Ai与与Ai+1是可乘的,矩阵是可乘的,矩阵Ai的维数为的维数为pi-1pi,i=1,2,n-1。如何确定计算矩阵连乘积的计算次序,使。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连
10、乘积需要的数乘次数最少。得依此次序计算矩阵连乘积需要的数乘次数最少。n注意注意设设Apq,Aqr两矩阵相乘,普通乘法次数为两矩阵相乘,普通乘法次数为pqr;加括号对乘法次数的影响加括号对乘法次数的影响1516n穷举法穷举法q列举出所有可能的计算次序,并计算出每一种计算次序列举出所有可能的计算次序,并计算出每一种计算次序相应需要的数乘次数,从中找出一种数乘次数最少的计相应需要的数乘次数,从中找出一种数乘次数最少的计算次序。算次序。算法复杂度分析:算法复杂度分析:对于n个矩阵的连乘积,设其不同的计算次序为P(n)。由于每种加括号方式都可以分解为两个子矩阵的加括号问题:(A1.Ak)(Ak+1An)
11、可以得到关于P(n)的递推式如下:因此,穷举法不是一个有效算法。因此,穷举法不是一个有效算法。呈指数增长呈指数增长17n计算量小的优先计算计算量小的优先计算qn个矩阵的连乘积共有个矩阵的连乘积共有n-1次乘法计算。首先在次乘法计算。首先在n-1次乘法计算中选择乘法计算量最小的两个矩阵优先次乘法计算中选择乘法计算量最小的两个矩阵优先计算,然后再在剩下的计算,然后再在剩下的n-2次乘法计算中选择计算次乘法计算中选择计算量最小的两个矩阵进行计算,依此往下。量最小的两个矩阵进行计算,依此往下。q该解决策略在某些情况下可得到最优解,但在很多该解决策略在某些情况下可得到最优解,但在很多情况下得不到最优解。
12、如上例的第情况下得不到最优解。如上例的第(5)种完全加括种完全加括号方式即采用该策略,但得到的显然不是最优解。号方式即采用该策略,但得到的显然不是最优解。18n矩阵维数大的优先计算矩阵维数大的优先计算q在在n个矩阵的个矩阵的n+1个维数序列个维数序列p0,p1,p2,pn中选择维数的中选择维数的最大值(设为最大值(设为pi),并把相邻两个含有维数),并把相邻两个含有维数pi的矩阵优先进的矩阵优先进行计算,然后在剩下的行计算,然后在剩下的n个维数序列中再次选择维数的最大个维数序列中再次选择维数的最大值,进行相应矩阵的乘法运算,依此往下。值,进行相应矩阵的乘法运算,依此往下。q该策略与上一种策略相
13、似,在某些情况下可得到最优解,但该策略与上一种策略相似,在某些情况下可得到最优解,但在有些情况下得不到最优解。如上例的第在有些情况下得不到最优解。如上例的第(3)种完全加括号种完全加括号方式就是采用该策略,显然它得到的是最优解。方式就是采用该策略,显然它得到的是最优解。q当个矩阵的维数改为当个矩阵的维数改为5010,1040,4030和和305时,时,可验证采用该策略得到的不是最优解。可验证采用该策略得到的不是最优解。以上两种策略实质都是基于某种贪心选择的贪心算法,这种算法不以上两种策略实质都是基于某种贪心选择的贪心算法,这种算法不一定能得到问题的全局最优解。在下一章我们将详细讨论此种策略。一
14、定能得到问题的全局最优解。在下一章我们将详细讨论此种策略。19n分治法分治法q将矩阵连乘积将矩阵连乘积AiAi+1Aj简记为简记为Ai:j。q设设n个矩阵的连乘积个矩阵的连乘积A1A2An的计算次序在矩阵的计算次序在矩阵Ak和和Ak+1之间将矩阵链断开,之间将矩阵链断开,1k1时,时,n该算法的计算时间该算法的计算时间T(n)有指数下界。有指数下界。n分治法是该问题的一个可行方法,但不是一个分治法是该问题的一个可行方法,但不是一个有效算法。有效算法。22n为何分治法的效率如此低下?为何分治法的效率如此低下?nrecurmatrixChain(1,4)计算计算A1:4的递归树。的递归树。n从图中
15、可看出,许多从图中可看出,许多子问题被重复计算子问题被重复计算。n这是分治法效率低下的根本原因。这是分治法效率低下的根本原因。23n该问题可用分治思想解决,并存在大量冗余,该问题可用分治思想解决,并存在大量冗余,可用动态规划求解。可用动态规划求解。24n动态规划动态规划矩阵连乘问题矩阵连乘问题将矩阵连乘积将矩阵连乘积 简记为简记为Ai:j Ai:j,i i j j。考察计算考察计算Ai:jAi:j的最优计算次序。设这个计算次序在矩阵的最优计算次序。设这个计算次序在矩阵A Ak k和和A Ak+1k+1之间将矩阵链断开,之间将矩阵链断开,i i kjkj,则其相应完全,则其相应完全加括号方式为加
16、括号方式为计算量为计算量为Ai:kAi:k的计算量加上的计算量加上Ak+1:jAk+1:j的计算量,再加上的计算量,再加上Ai:kAi:k和和Ak+1:jAk+1:j相乘的计算量相乘的计算量251、分析最优解的结构、分析最优解的结构n特征特征q计算计算Ai:j的最优次序所包含的计算矩阵子链的最优次序所包含的计算矩阵子链 Ai:k和和Ak+1:j的次序也是最优的。(反证可的次序也是最优的。(反证可得)得)n矩阵连乘计算次序问题的最优解包含着其子问题的矩阵连乘计算次序问题的最优解包含着其子问题的最优解。这种性质称为最优解。这种性质称为最优子结构性质最优子结构性质。n问题的最优子结构性质是该问题可用
17、动态规划算法问题的最优子结构性质是该问题可用动态规划算法求解的显著特征。求解的显著特征。2627n假设计算假设计算Ai:j(1ijn)Ai:j(1ijn)所需要的最少数乘所需要的最少数乘次数为次数为mi,jmi,j,则原问题的最优值为,则原问题的最优值为m1,n m1,n qi=ji=j时,时,Ai:j=AAi:j=Ai i,mi,i=0mi,i=0,i=1,2,ni=1,2,nqijij时,时,的维数为 2、建立递归关系、建立递归关系28n递归地定义递归地定义mi,jk的位置只有的位置只有j-i种种可能可能取得的k为Ai:j最优次序中的断开位置,并记录到表sij中,即sijk。注:mij实际
18、是子问题最优解的解值,保存下来避免重复计算。29n对于对于1ijn不同的有序对不同的有序对(i,j)对应于不同的对应于不同的子问题。不同子问题的个数最多只有子问题。不同子问题的个数最多只有n由此可见,在递归计算时,由此可见,在递归计算时,许多子问题被重复计算多次。这也是该问题可用动态规划算法求解的。这也是该问题可用动态规划算法求解的又一显著特征。又一显著特征。3、计算最优值计算最优值30n用动态规划算法解此问题,可依据其递归式以用动态规划算法解此问题,可依据其递归式以自自底向上底向上的方式进行计算。的方式进行计算。n在计算过程中,保存已解决的子问题答案。在计算过程中,保存已解决的子问题答案。n
19、每个子问题只计算一次,而在后面需要时只要简每个子问题只计算一次,而在后面需要时只要简单查一下,从而避免大量的重复计算,最终得到单查一下,从而避免大量的重复计算,最终得到多项式时间的算法。多项式时间的算法。31svoid MatrixChain(int*p,int n,int*m,int*s)/n是连乘矩阵数目,A1A2An;p是矩阵维数,Ai的维数为pi-1pi(1in);/m是n个矩阵连乘的数乘次数最小值;s存储矩阵连乘的最优计算次序 for(int i=1;i=n;i+)mii=0;/对角线置0,计算Ai.Ai的乘法次数,链长为1 for(int r=2;r=n;r+)/分别计算r个矩阵连
20、乘的最小数乘次数 for(int i=1;i=n-r+1;i+)int j=i+r-1;mij=mi+1j+pi-1*pi*pj;/Ai.Aj在矩阵i处断开时的数乘次数 sij=i;/记录取得Ai.Aj当前数乘次数的断开位置 for(int k=i+1;k j;k+)/计算Ai.Aj的最小数乘次数 int t=mik+mk+1j+pi-1*pk*pj;if(t mij)mij=t;sij=k;3233A1A2A3A4A5A630 3535 1515 55 1010 2020 25算法复杂度分析:算法复杂度分析:算法MatrixChain的主要计算量取决于算法中对r,i和k的3重循环。循环体内的
21、计算量为O(1),而3重循环的总次数为O(n3)。因此算法的计算时间上界为O(n3)。算法所占用的空间显然为O(n2)。设要计算矩阵连乘积中各矩阵的维数分别为:344、用动态规划法求最优解用动态规划法求最优解nMatrixChain已记录了构造最优解所需要的全部信息。已记录了构造最优解所需要的全部信息。qSij 表明计算矩阵表明计算矩阵Ai,j的最佳方式应在矩阵的最佳方式应在矩阵Ak和和Ak+1之间断开,即之间断开,即最优的加括号方式应为最优的加括号方式应为(Ai:k)(Ak+1:j)。n从从s1n记录的信息可知记录的信息可知A1:n的最优加括号方式为的最优加括号方式为(Ai:s1n)(As1
22、n+1:n)。qAi:s1n的最优加括号方式为的最优加括号方式为(Ai:s1s1n)(As1s1n+1:s1s1n)qAs1n+1:n的最优加括号方式在的最优加括号方式在ss1n+1n处断开。处断开。n照此递推,最终可确定照此递推,最终可确定A1:n的最优完全加括号方式,即构的最优完全加括号方式,即构造出问题的一个最优解。造出问题的一个最优解。35n算法算法traceback:按照:按照MatrixChain计算出的计算出的断点断点s指示加括号方式输出计算指示加括号方式输出计算Ai:j的最优计的最优计算次序。算次序。Void traceback(int i,int j,int*s)/按算法按算
23、法MatrixChain计算计算出的断点矩阵出的断点矩阵s指示的加括号方式输出计算指示的加括号方式输出计算Ai:j的最优计的最优计算次序算次序 if(i=j)return;traceback(s,i,sij);traceback(s,sij+1,j);cout“Multiply A”i“,”sij;cout“and A”(sij+1)“,”j 0)return mij;if(i=j)return 0;int u=LookupChain(i,i)+LookupChain(i+1,j)+pi-1*pi*pj;sij=i;for(int k=i+1;k j;k+)int t=LookupChain(
24、i,k)+LookupChain(k+1,j)+pi-1*pk*pj;if(t u)u=t;sij=k;mij=u;return u;n备忘录方法的控制结构与备忘录方法的控制结构与直接递归方法直接递归方法的控制结构相同,的控制结构相同,区别在于备忘录方法为每个解过的子问题建立了备忘录以区别在于备忘录方法为每个解过的子问题建立了备忘录以备需要时查看,避免了相同子问题的重复求解。备需要时查看,避免了相同子问题的重复求解。39n动态规划的设计技巧:动态规划的设计技巧:阶段的划分、状态的表示阶段的划分、状态的表示和和存储表存储表的设计的设计n在动态规划的设计过程中,在动态规划的设计过程中,阶段的划分阶
25、段的划分和和状态的表示状态的表示是其是其中最重要的两步,这两步会直接影响该问题的计算复杂性中最重要的两步,这两步会直接影响该问题的计算复杂性和存储表设计,有时候阶段划分或状态表示的不合理还会和存储表设计,有时候阶段划分或状态表示的不合理还会使得动态规划法不适用。使得动态规划法不适用。n问题的阶段划分和状态表示,需要具体问题具体分析,没问题的阶段划分和状态表示,需要具体问题具体分析,没有一个清晰明朗的方法。有一个清晰明朗的方法。n在实际应用中,许多问题的阶段划分并不明显,这时如果在实际应用中,许多问题的阶段划分并不明显,这时如果刻意地划分阶段法反而麻烦。一般来说,只要该问题可以刻意地划分阶段法反
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机算法设计与分析 计算机算法设计与分析PPT第三章 动态规划 计算机 算法 设计 分析 PPT 第三 动态 规划
限制150内