第4章动态规划.ppt
《第4章动态规划.ppt》由会员分享,可在线阅读,更多相关《第4章动态规划.ppt(94页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第4章章 动态规划动态规划第四章 动态规划目录目录概述概述矩阵连乘问题矩阵连乘问题凸多边形最优三角剖分凸多边形最优三角剖分最长公共子序列问题最长公共子序列问题加工顺序问题加工顺序问题0-1背包问题背包问题最优二叉查找树最优二叉查找树教学目标理解动态规划的思想理解动态规划的思想掌握动态规划、分治法及贪心法的异同掌握动态规划、分治法及贪心法的异同掌握动态规划的基本要素掌握动态规划的基本要素掌握动态规划的设计步骤掌握动态规划的设计步骤通过实例学习,掌握动态规划设计的策略通过实例学习,掌握动态规划设计的策略学习动态规划的意义学习动态规划的意义动态规划问世以来,在经济管理、生产调度、工动态规划问世以来
2、,在经济管理、生产调度、工程技术和程技术和最优控制最优控制等方面得到了广泛的应用,例等方面得到了广泛的应用,例如最短路线、库存管理、资源分配、设备更新、如最短路线、库存管理、资源分配、设备更新、排序、装载等问题,用动态规划方法比用其它方排序、装载等问题,用动态规划方法比用其它方法求解更为方便。虽然动态规划主要用于求解法求解更为方便。虽然动态规划主要用于求解以以时间划分阶段时间划分阶段的动态过程的优化问题,但是一些的动态过程的优化问题,但是一些与时间无关的静态规划(如线性规划、非线性规与时间无关的静态规划(如线性规划、非线性规划),只要人为地引进时间因素,把它视为多阶划),只要人为地引进时间因素
3、,把它视为多阶段决策过程,也可以用动态规划方法方便地求解,段决策过程,也可以用动态规划方法方便地求解,因此研究该算法具有很强的实际意义。因此研究该算法具有很强的实际意义。动态规划算法通常用于求解具有动态规划算法通常用于求解具有某种最优性质的某种最优性质的问题,问题,动态规划的基本思想动态规划的基本思想基本思想基本思想 将待求解问题分解成若干个子问题,经将待求解问题分解成若干个子问题,经分解得到的子问题往往分解得到的子问题往往不是互相独立不是互相独立的。先的。先求解子问题,然后从这些子问题的解求解子问题,然后从这些子问题的解构造构造得得到原问题的解。到原问题的解。动态规划的解题步骤动态规划的解题
4、步骤(1)分析最优解的性质,刻画最优解的结构特)分析最优解的性质,刻画最优解的结构特征征考察是否适合采用动态规划法。考察是否适合采用动态规划法。(2)递归地定义最优值(即建立递归式或动态)递归地定义最优值(即建立递归式或动态规划方程)。规划方程)。(3)以自底向上的方式计算出最优值,并记录)以自底向上的方式计算出最优值,并记录相关信息。相关信息。(4)根据计算最优值时得到的信息,构造出最)根据计算最优值时得到的信息,构造出最优解。优解。动态规划的基本要素最优子结构性质最优子结构性质子问题重叠性质子问题重叠性质递归算法求解问题时,每次产生的子问题并不总是新问递归算法求解问题时,每次产生的子问题并
5、不总是新问题,有些子问题出现多次,这种性质称为子问题的重叠题,有些子问题出现多次,这种性质称为子问题的重叠性质。性质。在应用动态规划时,对于重复出现的子问题,只需在第在应用动态规划时,对于重复出现的子问题,只需在第一次遇到时就加以解决,并把已解决的各个子问题的解一次遇到时就加以解决,并把已解决的各个子问题的解储存在表中,便于以后遇到时直接引用,从而不必重新储存在表中,便于以后遇到时直接引用,从而不必重新求解,可大大提高解题的效率。求解,可大大提高解题的效率。自底向上的求解方式自底向上的求解方式矩阵连乘矩阵连乘问题描述问题描述给定给定n个矩阵个矩阵A1,A2,A3,An,其中,其中Ai与与Ai+
6、1(i=1,2,3,n-1)是可乘的。是可乘的。用加括号的方法表示矩阵连乘的次序,不同加括用加括号的方法表示矩阵连乘的次序,不同加括号的方法所对应的计算次序是不同的。号的方法所对应的计算次序是不同的。完全加括号的矩阵连乘积(1)单个矩阵是完全加括号的;(2)矩阵连乘积 是完全加括号的,则 可 表示为2个完全加括号的矩阵连乘积 和 的乘积并加括号,即 16000,10500,36000,87500,34500u完全加括号的矩阵连乘积可递归地定义为:完全加括号的矩阵连乘积可递归地定义为:u设有四个矩阵设有四个矩阵 ,它们的维数分别是:,它们的维数分别是:u总共有五中完全加括号的方式总共有五中完全加
7、括号的方式矩阵连乘问题n给定给定n n个矩阵个矩阵 ,其中其中 与与 是可乘是可乘的,的,。考察这。考察这n n个矩阵的连乘积个矩阵的连乘积 n由于矩阵乘法满足结合律,所以计算矩阵的连乘可以由于矩阵乘法满足结合律,所以计算矩阵的连乘可以有许多不同的计算次序。这种计算次序可以用加括号有许多不同的计算次序。这种计算次序可以用加括号的方式来确定。的方式来确定。n若一个矩阵连乘积的计算次序完全确定,也就是说该若一个矩阵连乘积的计算次序完全确定,也就是说该连乘积已完全加括号,则可以依此次序反复调用连乘积已完全加括号,则可以依此次序反复调用2 2个矩个矩阵相乘的标准算法计算出矩阵连乘积阵相乘的标准算法计算
8、出矩阵连乘积矩阵连乘问题 给定给定n个矩阵个矩阵A1,A2,An,其中,其中Ai与与Ai+1是可乘的,是可乘的,i=1,2,n-1。如何确定计算矩阵连乘积的计算次序,使。如何确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。得依此次序计算矩阵连乘积需要的数乘次数最少。u穷举法穷举法:列举出所有可能的计算次序,并计算出每一种计列举出所有可能的计算次序,并计算出每一种计算次序相应需要的数乘次数,从中找出一种数乘次数最少的算次序相应需要的数乘次数,从中找出一种数乘次数最少的计算次序。计算次序。算法复杂度分析:算法复杂度分析:对于n个矩阵的连乘积,设其不同的计算次序为P(n)
9、。由于每种加括号方式都可以分解为两个子矩阵的加括号问题:(A1.Ak)(Ak+1An)可以得到关于P(n)的递推式如下:矩阵连乘问题u穷举法穷举法u动态规划动态规划将矩阵连乘积将矩阵连乘积 简记为简记为Ai:j,这里,这里ij 考察计算考察计算Ai:j的最优计算次序。设这个计算次序在矩阵的最优计算次序。设这个计算次序在矩阵Ak和和Ak+1之间将矩阵链断开,之间将矩阵链断开,ikj,则其相应完全,则其相应完全加括号方式为加括号方式为计算量:计算量:Ai:k的计算量加上的计算量加上Ak+1:j的计算量,再加上的计算量,再加上Ai:k和和Ak+1:j相乘的计算量相乘的计算量分析最优解的结构特征:计算
10、特征:计算Ai:j的最优次序所包含的计算矩的最优次序所包含的计算矩阵子链阵子链 Ai:k和和Ak+1:j的次序也是最优的次序也是最优的。的。矩阵连乘计算次序问题的最优解包含着其子问矩阵连乘计算次序问题的最优解包含着其子问题的最优解。这种性质称为题的最优解。这种性质称为最优子结构性质最优子结构性质。问题的最优子结构性质是该问题可用动态规划问题的最优子结构性质是该问题可用动态规划算法求解的显著特征。算法求解的显著特征。建立递归关系n设计算设计算Ai:j,1ijn,所需要的最少数乘次数,所需要的最少数乘次数mi,j,则原问题的最优值为,则原问题的最优值为m1,n n当当i=j时,时,Ai:j=Ai:
11、i,因此,因此,mi,i=0,i=1,2,nn当当ij时,时,可以递归地定义可以递归地定义mi,j为:为:这里 的维数为 的位置只有的位置只有 种种可能可能计算最优值n对于对于1ijn不同的有序对不同的有序对(i,j)对应于不同的子问对应于不同的子问题。因此,不同子问题的个数最多只有题。因此,不同子问题的个数最多只有n由此可见,在递归计算时,由此可见,在递归计算时,许多子问题被重复计算多许多子问题被重复计算多次次。这也是该问题可用动态规划算法求解的又一显著。这也是该问题可用动态规划算法求解的又一显著特征。特征。n用动态规划算法解此问题,可依据其递归式以自底向用动态规划算法解此问题,可依据其递归
12、式以自底向上的方式进行计算。在计算过程中,保存已解决的子上的方式进行计算。在计算过程中,保存已解决的子问题答案。每个子问题只计算一次,而在后面需要时问题答案。每个子问题只计算一次,而在后面需要时只要简单查一下,从而避免大量的重复计算,最终得只要简单查一下,从而避免大量的重复计算,最终得到多项式时间的算法到多项式时间的算法例:要计算矩阵连乘积A1A2A3A4A5A6,其中各矩阵的维数分别为:A1A2A3A4A5A630*3535*1515*55*1010*2020*25计算最优值计算最优值:设计算设计算Ai:j,1ijn,所需要的最少数乘次,所需要的最少数乘次数数mi,j,则原问题的最优值为,则
13、原问题的最优值为m1,n。那么,得到最优值的过程如下:那么,得到最优值的过程如下:(1)m11=0,m22=0,m33=0,m44=0,m55=0,m66=0(2)m12=30*35*15=15750(3)m13有如下两种情况:有如下两种情况:m12+m33+p0p2p3=15750+0+30*15*5=18000 m11+m23+p0p1p3=0+m23+30*35*5=7875(4)m23=35*15*5=2625 m13的值取以上的值取以上2个的最小值。个的最小值。(5)m14有如下有如下3种情况:种情况:m11+m24+p0p1p4 m12+m34+p0p2p4 m13+m44+p0p
14、3p4=7875+0+30*5*10=9375在此,需计算在此,需计算m24和和m34,取以上,取以上3个的最小值。个的最小值。(6)m15有如下有如下4种情况:种情况:m11+m25+p0p1p5 m12+m35+p0p2p4 m13+m45+p0p3p4=7875+1000+30*5*20=11875 m14+m55+p0p4p5在此,需计算在此,需计算m25、m35和和m45,取以上,取以上4个的最小个的最小值。值。(7)m16有如下有如下5种情况:种情况:m11+m26+p0p1p6 m12+m36+p0p2p6 m13+m46+p0p3p6=7875+m46+30*5*25=1512
15、5 m14+m56+p0p4p6 m15+m66+p0p5p6在此,需计算在此,需计算m26、m36、m46和和m56,取以,取以上上5个的最小值。个的最小值。m46=m44+m56+5*10*25=6250 m46=m45+m66+5*20*25=3500例如例如:求求m26有有4中情况,如下:中情况,如下:m22+m36+p1p2p6 m23+m46+p1p3p6 m24+m56+p1p4p6 m25+m66+p1p5p6 M26的值是这的值是这4个值中的最小值。个值中的最小值。矩阵连乘问题的最优值public static void matrixChain(int p,int m,int
16、 s)int n=p.length-1;for(int i=1;i=n;i+)mii=0;for(int r=2;r=n;r+)for(int i=1;i=n-r+1;i+)int j=i+r-1;mij=mi+1j+pi-1*pi*pj;sij=i;for(int k=i+1;k j;k+)int t=mik+mk+1j+pi-1*pk*pj;if(t mij)mij=t;sij=k;A1A2A3A4A5A63035351515551010202025算法复杂度分析:算法复杂度分析:算法matrixChain的主要计算量取决于算法中对r,i和k的3重循环。循环体内的计算量为O(1),而3重循
17、环的总次数为O(n3)。因此算法的计算时间上界为O(n3)。算法所占用的空间显然为O(n2)。矩阵连乘问题的最优解构造最优解构造最优解 Sij中的数据中的数据k告诉我们计算矩阵告诉我们计算矩阵Ai:j的最佳方式应在矩阵的最佳方式应在矩阵Ak和和Ak+1之间之间断开断开,即最优的加括号方式为即最优的加括号方式为(Ai:k)(Ak+1:j),由于,由于sij=k,用,用sij替换替换k.。从。从s1n记录的信息可知计记录的信息可知计算算A1:n的最优加括号方式为:的最优加括号方式为:(A 1:s1n)(A s1n+1:n)矩阵连乘问题的最优解构造最优解算法描述构造最优解算法描述:Void Trac
18、eback(int i,int j,int*a)if(i=j)return;Traceback(i,sij,s);Traceback(sij+1,j,s);Cout”Multiply A”i”,”sij;Cout”and A”(sij+1)”,”jendl;要输出要输出A1:n的最优计算次序只要调用的最优计算次序只要调用Traceback(1,n,s)即可。上面例子的最优计即可。上面例子的最优计算次序为:算次序为:(A1(A2A3)(A4A5)A6)算法设计算法设计步骤步骤1:确定合适的数据结构。采用数组:确定合适的数据结构。采用数组m来存放各个子问题的最优值,数组来存放各个子问题的最优值,数
19、组s来存放各个子问题的最优决策来存放各个子问题的最优决策;步骤步骤2:初始化。令:初始化。令mii=0,sii0,其中,其中i=1,2,n;步骤步骤3:循环阶段。:循环阶段。步骤步骤3-1:按照递归关系式计算:按照递归关系式计算2个矩阵个矩阵AiAi+1相乘时的最优值并将其存入相乘时的最优值并将其存入mii+1,同时将最优决策记入,同时将最优决策记入sii+1,i=1,2,n-1;步骤步骤3-2:按照递归关系式计算:按照递归关系式计算3个矩阵个矩阵AiAi+1Ai+2相乘时的最优值并将其存入相乘时的最优值并将其存入mii+2,同时将最优决策记入,同时将最优决策记入sii+2,i=1,2,n-2
20、;依此类推,直到依此类推,直到 步骤步骤3-(n-1):按照递归关系式计算:按照递归关系式计算n个矩阵个矩阵A1A2An相乘时的最优值并将其相乘时的最优值并将其存入存入m1n,同时将最优决策记入,同时将最优决策记入s1n。至此,至此,m1n即为原问题的最优值。即为原问题的最优值。步骤步骤4:根据数组:根据数组s记录的最优决策信息来构造最优解。记录的最优决策信息来构造最优解。步骤步骤4-1:递归构造:递归构造A1As1n的最优解,直到包含一个矩阵结束;的最优解,直到包含一个矩阵结束;步骤步骤4-2:递归构造:递归构造As1n+1An的最优解,直到包含一个矩阵结束;的最优解,直到包含一个矩阵结束;
21、步骤步骤4-3:将步骤:将步骤4-1和步骤和步骤4-2递归的结果加括号。递归的结果加括号。构造实例求矩阵求矩阵A1(32)、)、A2(25)、)、A3(510)、)、A4(102)和)和A5(23)连乘的最佳计算次序。)连乘的最佳计算次序。表4-6 实例最优值mij 表4-7 实例最优决策sijmijA1A2A3A4A5sijA1A2A3A4A5A1030160132150A101111A20100120132A20224A30100130A3034A4060A404A50A50递归构造最优解算法分析语句语句int t=mik+mk+1j+pi-1*pk*pj;为算法为算法MatrixChai
22、n的基本语句,最坏情况下该语句的执行次数为的基本语句,最坏情况下该语句的执行次数为O(n3),故该算法的最坏时间复杂性为,故该算法的最坏时间复杂性为O(n3)。构造最优解的构造最优解的Traceback算法的时间主要取决于递归。最坏算法的时间主要取决于递归。最坏情况下时间复杂性的递归式为:情况下时间复杂性的递归式为:解此递归式得解此递归式得T(n)=O(n)。凸多边形最优三角剖分凸多边形最优三角剖分 基本概念基本概念一个简单多边形及其内部构成一个闭凸集时,称该简单一个简单多边形及其内部构成一个闭凸集时,称该简单多边形为凸多边形多边形为凸多边形。凸多边形的不相邻的两个顶点连接的直线段称为凸多边凸
23、多边形的不相邻的两个顶点连接的直线段称为凸多边形的弦形的弦。凸多边形的三角剖分指将一个凸多边形分割成互不相交凸多边形的三角剖分指将一个凸多边形分割成互不相交的三角形的弦的集合的三角形的弦的集合。给定凸多边形及定义在边、弦构成的三角形的权函数,给定凸多边形及定义在边、弦构成的三角形的权函数,最优三角剖分即不同剖分方法所划分的各三角形上权函最优三角剖分即不同剖分方法所划分的各三角形上权函数之和最小的三角剖分。数之和最小的三角剖分。三角剖分的结构将图将图4-6中的叶子结点中的叶子结点vivi+1与矩阵与矩阵Ai+1(i=0,1,2,3,4)对应,则图对应,则图4-6和图和图4-4所示的二叉树是一样的
24、。因此,所示的二叉树是一样的。因此,n+1边形的三角剖分边形的三角剖分与与n个矩阵连乘的计算次序是一一对应的。可见,个矩阵连乘的计算次序是一一对应的。可见,凸多边形最优剖凸多边形最优剖分问题的解决方法和矩阵连乘问题相似。分问题的解决方法和矩阵连乘问题相似。三角剖分和矩阵连乘的对应设有四个矩阵A1A2A3A4连乘的情况有:A1(A2(A3A4)(A1(A2A3)A4(A1A2)(A3A4)A1(A2A3)A4)(A1A2)A3)A4凸多边形三角剖分:三角剖分和矩阵连乘的对应A1(A2(A3A4)(A1(A2A3)A4(A1A2)(A3A4)A1(A2A3)A4)(A1A2)A3)A4三角剖分和矩
25、阵连乘的对应结论:凸多边形的最优三角剖分等价于矩阵连乘积问题。最优子结构性质分析将v0v6的凸多边形分为三部分:(v0v1v2v3):源凸多边形的一个子凸多边形(v0v3v6):三角形(v3v4v5v6):源凸多边形的一个子凸多边形三角形(v0v3v6)的两条边(v0v3)和(v3v6)是源凸多边形三角剖分的两条玄。那么,如果(v0v3)和(v3v6)的和最小,有v0v3一定是子凸多边形(v0v1v2v3)的最小三角剖分玄,v3v6一定是凸多边形(v3v4v5v6)的最小三角剖分玄最优子结构性质分析设设v0vkvn是将是将n+1边形边形P=v0,v1,vn分成三部分分成三部分v0,v1,vk、
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 章动 规划
限制150内