收藏 分享(赏)

算法设计第三章 动态规划.ppt

上传人:hskm5268 文档编号:7020222 上传时间:2019-05-01 格式:PPT 页数:84 大小:881KB
下载 相关 举报
算法设计第三章 动态规划.ppt_第1页
第1页 / 共84页
算法设计第三章 动态规划.ppt_第2页
第2页 / 共84页
算法设计第三章 动态规划.ppt_第3页
第3页 / 共84页
算法设计第三章 动态规划.ppt_第4页
第4页 / 共84页
算法设计第三章 动态规划.ppt_第5页
第5页 / 共84页
点击查看更多>>
资源描述

1、2019/5/1,1,第一节主要内容,动态规划的原理 多阶段决策过程、特点及实例 动态规划的术语 最优值函数 最优值基本方程 最优性定理和基本方程 最优性定理 两种方式的动态规划 动态规划求解的基本步骤 动态规划实例计算 动态规划特点、条件和步骤 动态规划特点、适用条件和实例 逆序、正序递推法的可归纳为以下四个步骤,2019/5/1,2,教学目标,动态规划的原理 理解多阶段决策过程及特点 理解动态规划的术语 熟悉最优值函数、最优值基本方程 最优性定理和基本方程 充分理解最优性定理 熟记、理解两种动态规划的基本方程 掌握动态规划求解的基本步骤 动态规划特点、条件和步骤 熟记动态规划的适用条件 熟

2、记逆序、正序递推法的可归纳为以下四个步骤,2019/5/1,3,动态规划的原理(多阶段决策问题),多阶段决策过程多阶段决策过程是活动过程可按时间或空间顺序分解成若干相互独立、相互联系的阶段,在每个阶段的状态下做出决策,整个过程的决策构成一个决策序列,则称多阶段决策过程为序贯决策过程。称问题为多阶段决策问题。,多阶段决策问题的特点过程可分为若干个相互联系的阶段;每一阶段都对应着一组可供选择的决策;每一决策的选定即依赖于当前面临的状态,又影响以后总体的效果。,2019/5/1,4,动态规划的原理(单源最短路径),动态规划把多阶段过程的问题转化为一系列单阶段的问题,逐个阶段求解的最优化数学方法。,2

3、019/5/1,5,动态规划的原理,动态规划的术语 阶段:将过程划分为k个阶段,1k n。 状态:第k个阶段的状态变量为 。 为初态, 为终态。 状态集合: 允许的取值范围,记为 。 决策: 表示第k阶段 状态的决策变量,简记为 。 允许决策集合: 允许的取值范围 。 策略:一个按顺序排列的决策序列,记 。 状态转移方程:从上一阶段的某一状态值转变为下一阶段某一状态值的转移规律,记为 。 子策略:称决策序列 为k子过程策略。简称子策略,记为,2019/5/1,6,动态规划的原理,当k=1时, 成为全过程的一个策略,简称策略,简记为 。 阶段指标函数:指第k阶段从状态 出发,采取 决策时的效益,

4、用表示 。 过程指标函数:从第k阶段的 状态出发,采取子策略 获得最佳效益记为 。 最优性函数:若采用最优子策略 ,从第k阶段的 出发获得最佳效益,2019/5/1,7,动态规划的原理,2019/5/1,8,最优性定理和基本方程,两种方式的动态规划 初始状态出发到终止状态的正序寻优; 从终止状态出发到初始状态逆序寻优。动态规划求解的基本步骤1.划分阶段 2.定义决策变量,确定决策集合,2019/5/1,9,最优性定理和基本方程,式中opt 可根据题意取 max 或 min。,正序基本方程:此为逐段递推计算的依据,一般为:,式中opt 可根据题意取 max 或 min。,逆序基本方程:此为逐段递

5、推计算的依据,一般为:,3.确定阶段指标函数 4.建立状态转移方程 5.确定过程指标函数 6.建立递归方程,2019/5/1,10,动态规划实例计算,逆序递推计算方法(单源最短路径)用 表示在第k阶段由初始状态 到下一阶段的状态 的距离。用 表示从第k阶段的 状态到终点E的最短距离。1阶段k = 4 第4阶段有两个初始状态 和 。若全过程最短路径经过状态 ,则有 = 4 ;若全过程最短路径经过 状态,则有 = 3 。2阶段 k = 3 假设全过程最短路径在第3阶段经过 状态,若由,则有 。3 , 及其它阶段的计算类似。 ,最短路径为 。,2019/5/1,11,动态规划特点、条件和步骤,动态规

6、划的适用条件适用动态规划的问题必须满足以下三个条件最优化原理 无后效性 子问题的重叠性,动态规划特点 优点 离散性问题:使解析数学无用武之地; 建模:可用计算机计算; 缺点 无统一处理方法:需要数学技巧与解题经验; 组合爆炸:只能解决中小规模的问题,2019/5/1,12,动态规划特点、条件和步骤,最优性定理(最优子结构性质) 一个最优性策略具有这样的性质:不论过去状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略。简而言之,一个最优化策略的子策略总是最优的。一个问题满足最优性原理又称其具有最优子结构性质。 无后向性 将各阶段按照一定的次序排列好之后,对于某个给定的阶段

7、状态,只能通过当前给定的状态,直接影响未来的决策,而与以前各阶段的状态无关,这就是无后向性,又称为无后效性。换句话说,每个状态都是过去历史的一个完整总结。,2019/5/1,13,动态规划特点、条件和步骤,子问题的重叠性 动态规划算法的关键在于解决冗余,这是动态规划算法的根本目的。动态规划实质上是一种以空间换时间的技术,它在实现的过程中,不得不存储产生过程中的各种状态,所以它的空间复杂度可能要大于其它的算法。选择动态规划算法是因为动态规划算法在空间上可以承受,而搜索算法在时间上却无法承受,所以我们舍空间而取时间。,举例1:求二项式系数的计算(用分治递归),时间复杂性:T(n)= (2n),20

8、19/5/1,14,动态规划特点、条件和步骤,动态规划的逆序递推法的可归纳为以下四个步骤 最优子结构:找出最优解的性质,并刻画其结构特征。 最优值定义:递归定义最优值。 计算最优值:自底向上或自顶向下计算出最优值。 构造最优解:由计算最优值的信息,构造最优解。,时间复杂性:T(n)= O(n-1) =1.61803,n1,举例2:Fibonacci序列问题,动态规划的正序递推法的步骤与逆序类似,2019/5/1,15,本节作业,1.用动态规划方法,编写一个循环迭代算法计算如下的组合数。要求如下 时间复杂性为(mn) 空间复杂性为(m)思考:若用分治法计算同样的组合数,时间复杂性如何推导计算?,

9、2019/5/1,16,第二节主要内容,动态规划条件 子问题的重叠性 逆序、正序递推法的可归纳为以下四个步骤 最优子结构:找出最优解的性质,并刻画其结构特征。 最优值定义:递归定义最优值。 计算最优值:自底向上或自顶向下计算出最优值。 构造最优解:由计算最优值的信息,构造最优解。 运用动态规划求解经典实例 单源最短路径 所有点对的最短路径,2019/5/1,17,教学目标,动态规划适用条件 充分理解子问题的重叠性 理解动态规划的术语 熟悉最优值函数、最优值基本方程 动态规划的解题步骤 熟练利用基本方程刻划最优子结构 熟练利用基本方程递归定义最优值 掌握自底向上方法计算最优值 掌握用最优值相关信

10、息,求最优解 理解实例的解题步骤,2019/5/1,18,动态规划(单源最短路径),问题提出G=是一个多级图,如下图所示。,决策1,决策2,决策4,决策3,2019/5/1,19,动态规划(单源最短路径),最优子结构 假设第 i +1 级的状态集V i +1中的任意一个顶点u到终点H的最短路径已经确定, 第i 级的状态集V i 中的任意一个顶点v到终点H的最短路径,是顶点v经过集V i +1中某个顶点u到终点H的所有路径中最短的那条路径。这说明问题具有最优子结构性质。 最优值定义设过程共有k个级,即k1个阶段。又设Piv表示从V i 中的顶点v到H的一条最短路径,Cost(i,v)表示这条路径

11、的代价,按照由后向前推进,可得:,2019/5/1,20,动态规划(单源最短路径),计算最优值算法:Min_PathCost输入:邻接矩阵A1n,1n输出:从源点1到汇点n的最短路径长度在Cost1dist Min_PathCost (A,n)过程: Min_PathCost (C,n)1. for i1 to n12. Cost i 3. endfor4. Cost n 05. for jn1 downto 16. 设u使得(j, u)边集且C ju+ Cost u为最小7. Cost j Cju+ Cost u8. D j u9. endfor10. return Cost1,2019/5

12、/1,21,动态规划(单源最短路径),构造最优解计算最优值时用数组D1k记录顶点u,因为(j, u)边集且C ju+ Cost u为最小,所以u是j的后继顶点。从而p1 1pk nfor j2 to k1p j Dpj1end for 算法复杂性分析时间复杂性:T (n) = (n2) 空间复杂性:S (n) = = (n) 若A为邻接表:则T (n) = O (n + |E|),其中n为顶点数,|E|为边集大小。,2019/5/1,22,动态规划(所有点对的最短路径),问题提出 设G=是一个简单有向图,其中每条边长度wi,j 0。若顶点i到顶点j没有边,则wi,j= ,若i = j,则wi,

13、j=0。G用邻接矩阵W表示。问题是找出每个顶点到其它所有顶点的最短路径。显然,邻接矩阵W本身表示V中每个顶点i到其它所有顶点j,而不经过任何中间顶点的最短路径,记为pij0 。 定义pijk是顶点i到其它所有顶点j,且经过中间顶点序号不大于k的最短路径 。pijn表示顶点i到其它所有顶点j,任意一个顶点都可作为最短路径上的中间顶点。 最优子结构 由pijk定义知:当顶点i到其它所有顶点j,经过中间顶点序号不大于k1的最短路径恰好为pijk1 ,即有pijk = pijk1 。,2019/5/1,23,动态规划(所有点对的最短路径),另一方面,由pijk定义又知: pikk1是顶点i到顶点k ,

14、且经过中间顶点序号不大于k1的最短路径,而pkjk1是从顶点k到顶点j,且经过中间顶点序号不大于k1的最短路径。这正说明pijk的最短路径包含pikk1和pkjk1的最短路径。综上所述,可知问题具有最优子结构的性质, 即得:pijk =minpijk1 ,pikk1 + pkjk1。 设Dk(i,j)是任一顶点i到其它所有顶点j,且经过中间顶点序号不大于k的最短路径长度。特别 D0(i,j) = W。Dk1 (i,j)是任一顶点i到其它所有顶点j,且经过中间顶点序号不大于k1的最短路径长度。 Dk1(i,k)任一顶点i到顶点k ,且经过中间顶点序号不大于k1的最短路径长度。,2019/5/1,

15、24,动态规划(所有点对的最短路径),Dk1(k,j) 任一顶点k 到顶点 j,且经过中间顶点序号不大于k1的最短路径长度。 最优值定义综上所述可得:,计算最优值算法:Floyd输入:邻接矩阵W输出: D1n,1n及next1n,1n分别为最优值及最 短路径矩阵Floyd (W,next)过程: Floyd (D,next),2019/5/1,25,动态规划(所有点对的最短路径),1. for i1 to n2. for j1 to n3. next i j j4. end for5. end for6. for k1 to n7. for i1 to n8. for j1 to n9. if

16、 D i k + D k jD i j then10. D i j D i k + D kj11. nextij next i k12. end if13. end for14. end for15. end for,2019/5/1,26,动态规划(所有点对的最短路径),构造最优解在计算最优值时, 利用数组next1n,1n记载当前经过的中间顶点信息k,即数组next1n,1n 记载任一顶点i到其它所有顶点j最短路径。算法:Print_Path输入:最短路径矩阵next1n,1n 及i,j输出: i到j的最短路径 next1n,1n Print_Path(next,i,j)过程:Print_

17、Path(next,i,j)1. if nextij=j then2. print(ij)3. return,2019/5/1,27,动态规划(所有点对的最短路径),4. end if5. print(i )6. print_path(next,nextij,j)算法复杂性分析Floyd算法时间复杂性为T (n) = (n3) ,而Print_Path算法时间复杂性为T (n) = (n)。算法时间复杂性:T (n) = (n3)算法空间复杂性:S (n) = (n2) Warshall传递闭包算法(略),2019/5/1,28,本节作业,1. 设G=(V,E)是n个顶点的简单有向图,A是G的

18、关系R的关系矩阵。要求用动态规划方法,编写一个循环迭代算法,求R的传递闭包 (即称Warshall算法)。,2019/5/1,29,第三节主要内容,动态规划条件 子问题的重叠性 逆序、正序递推法的可归纳为以下四个步骤 最优子结构:找出最优解的性质,并刻画其结构特征。 最优值定义:递归定义最优值。 计算最优值:自底向上或自顶向下计算出最优值。 构造最优解:由计算最优值的信息,构造最优解。 运用动态规划求解经典实例 最长公共子序列问题,2019/5/1,30,教学目标,动态规划适用条件 充分理解子问题的重叠性 理解动态规划的术语 熟悉最优值函数、最优值基本方程 动态规划的解题步骤 熟练利用基本方程

19、刻划最优子结构 熟练利用基本方程递归定义最优值 掌握自底向上方法计算最优值 掌握用最优值相关信息,求最优解 理解实例的解题步骤,2019/5/1,31,动态规划(最长公共子序列问题),相关概念若给定序列A=a1,a2,an,则另一序列C=c1,c2,ck为A的子序列是指存在一个严格递增下标序列i1,i2,ik使得对于所有j=1,2,k有:cj=aij。例如,序列C=b,c,d,b是序列A=a,b,c,b,d,a,b的子序列,相应的递增下标序列为2,3,5,7。公共子序列给定2个序列A和B,当另一序列C既是A的子序列又是B的子序列时,称C是序列A和B的公共子序列。问题提出最长公共子序列。给定2个

20、序列A=a1,a2,an和B=b1,b2,bm,找出A和B的最长公共子序列。显然,用蛮力策略,A有2n个子序列。若用(m)时间内可确定它也是B的一个子序列,其时间复杂性(m2n) 。,2019/5/1,32,动态规划(最长公共子序列问题),最优子结构性质设序列A=a1,a2,an和B=b1,b2,bm的最长公共子序列为C=c1,c2,ck ,则(1)若an=bm,则ck=an=bm,且Ck-1是An-1和Bm-1的最长 公共子序列。(2)若anbm且ckan,则C是An-1和B的最长公共子 序列。(3)若anbm且ckbm,则C是A和Bm-1的最长公共子 序列。,由此可见,(1)说明A、B两个

21、序列的最长公共子序列包含了它们前缀An-1、Bm-1的最长公共子序列。因此,最长公共子序列问题具有最优子结构性质。,2019/5/1,33,动态规划(最长公共子序列问题),递归定义最优值由最优子结构性质知:计算A和B的最长公共子序列时,都要计算A和Bm-1及An-1和B的最长公共子序列,而这两个子问题都包含一个公共子问题(重迭子问题),即计算Bm-1和An-1 最长公共子序列。从上述可知:最长公共子序列问题的最优子结构性质决定了建立子问题最优值的递归关系。于是,令Li,j记录a1,a2,ai 和b1,b2,bj的最长公共子序列的长度。显然,当i=0或j=0时,则Li,j=0表示Ai和Bj的最长

22、公共子序列为空序列。其它情况,则由最优子结构性质建立递归关系如下:,2019/5/1,34,动态规划(最长公共子序列问题),举例:X=abcbdab,Y=bdcaba,4,4,3,2,2,1,0,b,7,4,3,3,2,2,1,0,a,6,3,3,2,2,2,1,0,d,5,3,3,2,2,1,1,0,b,4,2,2,2,2,1,1,0,c,3,2,2,1,1,1,1,0,b,2,1,1,1,0,0,0,0,a,1,0,0,0,0,0,0,Xi,0,a,b,a,c,d,b,6,5,4,3,2,1,0,b,a,c,b,递归推导得解: bcba,Yj,i,j,nul,nul,0,2019/5/1,

23、35,动态规划(最长公共子序列问题),计算最优值算法由递归关系直接计算,公共子问题求解会被重复计算。基于空间考虑,总共有(mn)个不同的子问题,用动态规划算法自底向上地计算最优值能提高算法的效率。,算法:LCSLENGTH输入:字母表上的两个字符串A和B及长度n,m输出:最长公共子序列的长度及最优解数组s1n1mLLCSLENGTH(n,m)过程:LCSLENGTH(n,m)1 for i0 to n 2 Li,003 end for4 for j0 to m5 L0,j06 end for,2019/5/1,36,动态规划(最长公共子序列问题),7 for i1 to n 8 for j1

24、to m9 if Ai =Bj then 10 Li,jLi-1,j-1+112 si,j13 else if Li-1,j= Li,j-1 then14 Li,jLi-1,j 15 si,j 16 else 17 Li,jLi,j-1 18 si,j 19 end if20 end if21 end for22 end for23 return Ln,m 和s,复杂性分析T(n)= (nm) 改进 T(n)= minm,n,2019/5/1,37,构造最优解算法:LCS输入:s1n,1m及n,m输出:输出最长公共子序列xLCS(n,m,x,s)过程: LCS(i,j,x,s)1 if i=0

25、 or j=0 then return 2 if si,j = then3 LCS(i-1,j-1,x,s)4 输出xi5 else if si,j= then 6 LCS(i-1,j,x,s)7 else8 LCS(i,j-1,x,s)9 end if10 end if,动态规划(最长公共子序列问题),复杂性分析T(n)= O(n+m),2019/5/1,38,本节思考题,1.用动态规划方法,编写一个循环迭代算法,求解给定序列的最长递增子序列。,2019/5/1,39,第四节主要内容,动态规划条件 子问题的重叠性 逆序、正序递推法的可归纳为以下四个步骤 最优子结构:找出最优解的性质,并刻画其

26、结构特征。 最优值定义:递归定义最优值。 计算最优值:自底向上或自顶向下计算出最优值。 构造最优解:由计算最优值的信息,构造最优解。 运用动态规划求解经典实例 矩阵连乘积问题,2019/5/1,40,教学目标,动态规划适用条件 充分理解子问题的重叠性 理解动态规划的术语 熟悉最优值函数、最优值基本方程 动态规划的解题步骤 熟练利用基本方程刻划最优子结构 熟练利用基本方程递归定义最优值 掌握自底向上方法计算最优值 掌握用最优值相关信息,求最优解 理解实例的解题步骤,2019/5/1,41,动态规划(矩阵连乘积问题),问题提出 设有矩阵M1,M2 和M3 及其维数分别是210, 102和210 ,

27、计算它们的乘积,即M1M2 M3 。矩阵的乘法顺序若按M1 (M2 M3 )顺序计算,共有10210 + 21010 =400数乘次数。而若按(M1M2) M3顺序计算,则数乘次数只有2102 + 2210 =80。由上述可知:高效的矩阵乘积算法与矩阵的乘法结合律有关。这种结合顺序数随矩阵个数增长而增加。显然,算法就是寻找一个数乘次数最少的乘法运算顺序。蛮力的方法考察n个可乘的矩阵的M1M2 Mn,共有n-1个乘法运算顺序。如(M1 M2 M3M4)有3个乘法运算顺序,但它们的结合顺序数则有5种:,2019/5/1,42,动态规划(矩阵连乘积问题),显然,结合顺序数是n个矩阵加括弧的方法数。设

28、f(n)为求n个矩阵乘积的所有放置括弧的方法数,假定矩阵乘法为:(M1M2 Mk ) (Mk+1Mk+2 Mn ) 则有:,复杂性分析,见数据结构P152的解法,2019/5/1,43,动态规划(矩阵连乘积问题),每个括弧化表达式,有n-1次的矩阵乘法次数,即矩阵乘法时间是(n)。因此,数乘次数的时间复杂性为 :最优子结构性质设对于任意矩阵Mi,其行数为ri,列数为ri+1且1in,则(Mi Mi+1) 可乘是Mi列数等于Mi+1行数。于是,M1,M2,Mn的行数分别为r1, r2, ,rn及rn+1, 其中rn+1为Mn的列数。令Mi,j为矩阵乘积,Mi,j= MiMi+1Mj ,1i j

29、n 。由上述可知存在k, i+1 k j,Mi,j = Mi,k-1 M k,j。 Mi,j的数乘次数记为Ci,j ,则计算Ci,j :Ci,j= Ci,k1+ Ck,j+ ri rk rj+1,复杂性分析,2019/5/1,44,动态规划(矩阵连乘积问题),这导致寻找一个k, i+1 k j,使得 Ci,j最少,即特别地 计算M1,n 的一个最优顺序包含计算矩阵子链M1,k-1 和Mk,n,1k=n的最优顺序。若不然,存在一个数乘次数更少的子链M1,k-1,替换原来的M1,k-1的顺序,于是得到M1,n另一个最优的顺序,这是一个矛盾。同理可知,计算M1,n 的一个最优顺序包含计算矩阵子链Mk

30、,n的最优顺序。递归定义最优值,2019/5/1,45,动态规划(矩阵连乘积问题),显然Ci,j是Mi,j的一个最优顺序, i+1 k j,即数乘次数最少,而原问题M1,n的一个最优顺序便是C1,n。当i=j时,即为单一矩阵,数乘次数显然为0 。当ij时,即存在k, i+1 k j,使得Ci,j是Mi,j的一个最优顺序。从而Ci,j可递归定义:,计算最优值算法从 (1ijn)知:不同的有序对(i,j)对应于不同的子问题。因此,不同子问题的个数最多只有,2019/5/1,46,动态规划(矩阵连乘积问题),举例计算5 个矩阵乘积最少数乘次数。设: M1:510 M2:104 M3:46 M4:61

31、0 M5:102,(M1 ( M2 ( M3 ( M4 M5 ),例如:n=6的计算形式,2019/5/1,47,动态规划(矩阵连乘积问题),由此可见,用递归计算,许多子问题被重复计算多次。动态规划算法恰好可克服这缺陷。用动态规划算法解此问题,可依据其最优值递归定义以自底向上的方式进行计算。在计算过程中,保存已解决的子问题答案。每个子问题只计算一次,而在后面需要时只要简单查一下,从而避免大量的重复计算,最终得到多项式时间的算法,算法如下。算法: MATCHAIN输入: n个矩阵的链的维数r1n+1,其中r1n是n 个矩阵的行数, rn+1是Mn列数输出: C1,n最优值和最优计算次序的s1n

32、, 1n 1. MATCHAIN(n)过程 MATCHAIN(n),2019/5/1,48,动态规划(矩阵连乘积问题),1 for i 1 to n2 Ci,i03 end for4 for d1 to n15 for i1to nd 6 ji+d7 Ci,j Ci,i+C i+1,j+riri+1rj+18 si,ji+19 for ki+2 to j10 t C i,k-1+ C k,j+ri*rk*rj+1 11 if t Ci,j then 12 Ci,jt 13 si,jk14 end if15 end for16 end for17 end for18 return C1,n和s,

33、算法复杂度分析:MATCHAIN算法的计算时间上界为O(n3)。算法所占用的空间显然为O(n2)。,2019/5/1,49,动态规划(矩阵连乘积问题),构造最优解(最少数乘的矩阵链)MATCHAIN算法用si,j记录矩阵乘积的最优计算次序全部信息,即计算Mi,j矩阵时,保存断开矩阵Mi,k-1和Mk,j断开点k。因为s1,n 记录M1,n的最优括弧表达式,即有:M1,n= (M1,s1,n-1) (Ms1,n,n) = (M1,s1,s1,n-1-1) (M s1,s1,n-1,s1,n-1 ) (Ms1,n,ss1,n,n-1) (Mss1,n,n,n) 以此类推构造最优解。显然,若要输出矩

34、阵链的最优计算顺序,还要有一个输出最优解的算法,请参见教材P66一节。下列MChainMuliply算法输出Mi,j的最优计算次序的运算结果。,2019/5/1,50,动态规划(矩阵连乘积问题),算法:MChainMuliply输入:s1n, 1n及1和n输出:输出最优计算次序的Mi,jMChainMuliply(1,n,s)过程 MChainMuliply(i,j,s)1 if i=j return Mi2 X MChainMuliply(i,si,j-1,s)3 Y MChainMuliply(si,j, j,s)4 return Multiply(X Y),首先,假设算法Multiply

35、(X,Y)表示矩阵X与Y的两个矩阵一般乘积,那么,MChainMuliply算法描述如下:,2019/5/1,51,动态规划(矩阵连乘积问题),动态规划的基本要素1.最优子结构性质;2.重叠子问题; 1.最优子结构性质自底向上求解子问题的最优解,逐步构造问题最优解。 2.重叠子问题用自顶向下的直接递归方式求解子问题,子问题有重复。,计算M1,4的递归树,2019/5/1,52,算法: RecMatChain输入: n个矩阵的链的维数r1n+1,其中r1n是n个矩阵的行数 ,rn+1是Mn列数输出:记录矩阵乘积的最优计算次序的s1n , 1n RecMatChain(1,n)过程 RecMatC

36、hain(i,j)1 if i=j return 02 uRecMatChain(i,i)+RecMatChain(i+1,j)+ri*ri+1*rj+13 si,ji+14 for ki+2 to j5 tRecMatChain(i,k)+RecMatChain(k+1,j)+ri*rk*rj+16 if ut then 7 ut8 si,jk9 end if10 end for11 return s,动态规划(矩阵连乘积问题),最坏情况下复杂性分析,2019/5/1,53,动态规划(矩阵连乘积问题),3.备忘录方法备忘录方法与自顶向下的直接递归方式的控制结构相同,区别在于备忘录方法备忘了每

37、个子问题的解,以备需要时查看。它是动态规划的一种变形。,算法:MemMatChain输入:整数n输出:最优值数组C1n , 1n 和最优计算次序的s1n , 1n MemMatChain(n)过程 MemMatChain(n)1 for i1 to n2 for ji to n3 Ci,j04 end for5 end for6 return LookupChain(1,n),2019/5/1,54,动态规划(矩阵连乘积问题),1 if (Ci,j 0) then return Ci,j2 if i = j then return 03 uLookupChain(i,i) + LookupCh

38、ain(i+1,j) + ri*ri+1*rj+1;4 si,j i+1;5 for ki+2 to j6 t LookupChain(i,k) + LookupChain(k+1,j) + ri*rk*rj+1;7 if t u then 8 ut9 si,jk10 end if11 Ci,ju12 end for13 return s,复杂性分析,算法:LookupChain输入:维数数组r1n+1 及C1n , 1n 输出:最优计算次序的s1n , 1n 1. LookupChain(1,n)过程 LookupChain(i,j),2019/5/1,55,本节作业,1. 对于以下5个矩阵

39、应用本节算法MATCHAIN。M1:23, M2:36, M3:64, M4:42, M5:42 找出这5 个矩阵相乘需要的最少数乘乘法次数。 请给出一个括号表达式,使在这种次序下达到乘法的次 数最少。 2. 用备忘录方法,编写一个递归算法,计算斐波那契序列。,2019/5/1,56,第五节主要内容,动态规划条件 子问题的重叠性 逆序、正序递推法的可归纳为以下四个步骤 最优子结构:找出最优解的性质,并刻画其结构特征。 最优值定义:递归定义最优值。 计算最优值:自底向上或自顶向下计算出最优值。 构造最优解:由计算最优值的信息,构造最优解。 运用动态规划求解经典实例 0/1背包问题,2019/5/

40、1,57,教学目标,动态规划适用条件 充分理解子问题的重叠性 理解动态规划的术语 熟悉最优值函数、最优值基本方程 动态规划的解题步骤 熟练利用基本方程刻划最优子结构 熟练利用基本方程递归定义最优值 掌握自底向上方法计算最优值 掌握用最优值相关信息,求最优解 理解实例的解题步骤,2019/5/1,58,动态规划(0/1背包问题),问题提出 设有n个物品的集合W=w1,w2,,wn, wj和vj分别为的物品体积和价值,C为背包容量,且C, wj, vj为正整数。要求从W中选择物品装入背包,使得装入背包的物品总价值最大。数学模型 0-1背包问题是一个特殊的整数规划问题,最优子结构性质1设(x1, x

41、2, , xn)为0/1背包问题的一个最优解,则(x2, , xn)是相应子问题的一个最优解:,2019/5/1,59,动态规划(0/1背包问题),若不然,设 (z2, , zn )是上述子问题的一个最优解,而(x2 , , xn)不是它的最优解。由此可知:且 因此,2019/5/1,60,动态规划(0/1背包问题),这说明(x1,z2, , zn )是所给0/1背包问题的一个更优解,而(x1, x2, , xn)不是问题0/1背包问题的一个最优解,此为矛盾。这说明(x1, x2, , xn)不是问题0/1背包问题的一个最优解。,最优子结构2设Vi, j表示从W中选择最前面i个物品组成的物品子

42、集w1, w2, , wi 装入容量为j的背包总价值。于是得到:,2019/5/1,61,动态规划(0/1背包问题),递归定义最优值根据以上分析,定义如下递推关系:,若Vi, j对应子集不包含第i个物品wi,有Vi, j= Vi1, j 。若Vi, j对应子集包含第i个物品wi,即最优子集由第i个 物品wi及在最前面i1个物品中适合容量为j wi的子集 构成的,有Vi, j= Vi1, j wi + vi。综上所述,最前面i个物品的所有可行的子集中,最 优解的价值是上述两者中的最大者。,2019/5/1,62,动态规划(0/1背包问题),举例 设物品体积集W=2,3,4,5,V=3,4,5,7

43、及C=9,V0n, 0C ,H1n, 0C和X1n,2019/5/1,63,动态规划(0/1背包问题),算法: KNAPSACK 输入: n种物品体积数组W1n和V0n ,0C价值数 组,背包容量C 输出: 最优 值Vn,C及最优解信息数组H0n, 0C KNAPSACK(n,C)过程 KNAPSACK(n,C)1 for i0 to n 2 Vi,003 end for4 for j0 to C5 V0, j06 end for,计算最优值及算法1.自底向上方法算法如下,2019/5/1,64,动态规划(0/1背包问题),7 for i1 to n8 for j1 to C 9 Vi,jVi-1,j 10 if wi = j then 11 if Vi,jVi-1,j-wi+vi then12 Vi,jVi-1,j-wi+vi13 Hi,j114 else 15 Hi,j0 16 end if17 end if18 end for19 end for20 return Vn,C和H,复杂性分析T(n)= (nC),2019/5/1,65,动态规划(0/1背包问题),2.备忘录方法用自顶向下的直接递归方法(并非所有的子问题都需要解),数组V0n, 0C存储各子问题的最优值,数组X0n, 0C存储最优解的信息。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 实用文档 > 工作计划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报