《算法设计与分析》第07章.ppt
《《算法设计与分析》第07章.ppt》由会员分享,可在线阅读,更多相关《《算法设计与分析》第07章.ppt(122页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第7章章动态规划法动态规划法 7.17.1一般方法和基本要素一般方法和基本要素一般方法和基本要素一般方法和基本要素7.27.2每对结点间的最短路径每对结点间的最短路径每对结点间的最短路径每对结点间的最短路径 7.37.3矩阵连乘矩阵连乘矩阵连乘矩阵连乘 7.47.4最长公共子序列最长公共子序列最长公共子序列最长公共子序列7.57.5最优二叉搜索树最优二叉搜索树最优二叉搜索树最优二叉搜索树 7.60/17.60/1背包背包背包背包 7.77.7流水作业调度流水作业调度流水作业调度流水作业调度 7.1一般方法和基本要素一般方法和基本要素 动动动动态态态态规规规规划划划划法法法法的的实实质质也也是
2、是将将较较大大问问题题分分解解为为较较小小的的同同类类子子问问题题,这这一一点点上上它它与与分分治治法法和和贪贪心心法法类类似似。但但动动态态规规划划法法有有自自己己的的特特点点。分分治治法法的的子子问问题题相相互互独独立立,相相同同的的子子问问题题被被重重复复计计算算,动动态态规规划划法法解解决决这这种种种种子子子子问问问问题题题题重重重重叠叠叠叠现现现现象象象象。贪贪心心法法要要求求针针对对问问题题设设计计最最优优量量度度标标准准,但但这这在在很很多多情情况况下下并并不不容容易易。动动动动态态态态规规规规划划划划法法法法利利利利用用用用最最最最优优优优子子子子结结结结构构构构,自自自自底底
3、底底向向向向上上上上从从从从子子子子问问问问题题题题的的的的最最最最优优优优解解解解逐逐逐逐步步步步构构构构造造造造出出出出整整整整个个个个问问问问题题题题的的的的最最最最优优优优解解解解,动动态态规规划划则则可可以以处处理理不不具具备备贪贪心心准准则则的问题。的问题。引例:引例:Fibonacci数(数列)的计算其定义为其定义为F0=0,F1=1,Fn=Fn-1+Fn-2 (n2)计算此数列可由递归函数完成计算此数列可由递归函数完成 intint fibo(intfibo(int n)n)intint f;f;if(n2)f=n;if(n2)f=n;else f=fibo(n-1)+fibo
4、(n-2);else f=fibo(n-1)+fibo(n-2);return f;return f;当当n=6n=6时,函数时,函数fibofibo()()的调用过程的调用过程65443323221211021101033101012345678910111213141516171819202122232425 改进:改进:intfibo(intn)intinti,f,f0,f1;i,f,f0,f1;f0=0;f1=1;f0=0;f1=1;for(i=2;i=for(i=2;i=n;in;i+)+)f=f0+f1;f0=f1;f1=f;f=f0+f1;f0=f1;f1=f;returnf;r
5、eturnf;关键:避免了重复计算,时间代价关键:避免了重复计算,时间代价关键:避免了重复计算,时间代价关键:避免了重复计算,时间代价O(n)O(n)与贪心算法的比较与贪心算法的比较贪心算法:局部的最优性依赖于其前面各部分是贪心算法:局部的最优性依赖于其前面各部分是贪心算法:局部的最优性依赖于其前面各部分是贪心算法:局部的最优性依赖于其前面各部分是否最优;且不能保证最终解的最优性。否最优;且不能保证最终解的最优性。否最优;且不能保证最终解的最优性。否最优;且不能保证最终解的最优性。动态规划:当前决策的最优性取决于其后续决策动态规划:当前决策的最优性取决于其后续决策动态规划:当前决策的最优性取决
6、于其后续决策动态规划:当前决策的最优性取决于其后续决策系列的是否最优。动态规划方法可以保证问题求系列的是否最优。动态规划方法可以保证问题求系列的是否最优。动态规划方法可以保证问题求系列的是否最优。动态规划方法可以保证问题求解是全局最优的。解是全局最优的。解是全局最优的。解是全局最优的。生活中的实例生活中的实例生活中的实例生活中的实例.如如如如:立志十年达到人生某一目标立志十年达到人生某一目标立志十年达到人生某一目标立志十年达到人生某一目标.分析现状分析现状,制定长期与短期愿景制定长期与短期愿景.贪心策略贪心策略:动态规划策略动态规划策略:当前当前2年年810年年24年年610年年46年年410
7、年年68年年210年年810年年当前当前10年年 设设计计一一个个动动态态规规划划算算法法,通通常常可可以以按按以以下下几几个个步步骤进行:骤进行:(1 1)刻画最优解的结构特性;)刻画最优解的结构特性;(2 2)递归定义最优解值;)递归定义最优解值;(3 3)以自底向上方式计算最优解值;)以自底向上方式计算最优解值;(4 4)根据计算)根据计算得到的信息得到的信息构造一个最优解。构造一个最优解。其中,第(其中,第(1 1)至()至(3 3)步是)步是动态规动态规划算法的基本划算法的基本步步骤骤。最。最优优解解值值是最是最优优解的目解的目标标函数的函数的值值。7.1动态规划算法的基本要素:一个
8、最优化多步决策问题适合用动态规划法求一个最优化多步决策问题适合用动态规划法求解有两个要素:解有两个要素:最优子结构特性和重叠子问题。最优子结构特性和重叠子问题。最优子结构特性和重叠子问题。最优子结构特性和重叠子问题。最优性原理最优性原理最优性原理最优性原理指出,一个问题的最优解包括了子问指出,一个问题的最优解包括了子问题的最优解时,则称该问题具有题的最优解时,则称该问题具有最优子结构特性。最优子结构特性。最优子结构特性。最优子结构特性。最优子结构特性最优子结构特性最优子结构特性最优子结构特性从较小子问题的解构造较大问题从较小子问题的解构造较大问题的最优解时只需考虑小问题的最优解。的最优解时只需
9、考虑小问题的最优解。子结构重叠性质:子结构重叠性质:子结构重叠性质:子结构重叠性质:递归算法求解问题时,每次产生递归算法求解问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算多的子问题并不总是新问题,有些子问题被反复计算多次。这种性质称为子问题的重叠性质。次。这种性质称为子问题的重叠性质。动态规划算法,动态规划算法,对每一个子问题只解一次,而后将其解保存在一个表对每一个子问题只解一次,而后将其解保存在一个表格中,当再次需要解此子问题时,只是简单地用常数格中,当再次需要解此子问题时,只是简单地用常数时间查看一下结果。时间查看一下结果。通常不同的子问题个数随问题的通常不同的子问题个数随问
10、题的大小呈多项式增长。因此用动态规划算法只需要多项大小呈多项式增长。因此用动态规划算法只需要多项式时间,从而获得较高的解题效率。式时间,从而获得较高的解题效率。7.1.3多段图问题多段图问题例例例例7 711多段图多段图G=(V,E)是一个带权有向图,它具有如下是一个带权有向图,它具有如下特性:图中的结点被划分成特性:图中的结点被划分成k 2个互不相交的子集个互不相交的子集Vi,1 i k。其中其中V1和和Vk分别只有一个结点,分别只有一个结点,V1包含源点包含源点(source)s,Vk包含汇点(包含汇点(sink)t。对所有边对所有边 E,多段图要求若多段图要求若u Vi,则,则v Vi1
11、,1 ik,每条边的权每条边的权值为值为c(u,v)。从从s s到到t t的路径长度是这条路径上边的权值之和,的路径长度是这条路径上边的权值之和,多段多段多段多段图问题图问题图问题图问题(multistage graph problemmultistage graph problem)是求从)是求从s s到到t t的的一条长度最短的路径。一条长度最短的路径。多段图的最优子结构多段图的最优子结构假定(假定(s,v2,v3vk-1,t)是一条从是一条从s到到t的最短路的最短路径,那么(径,那么(v2,v3vk-1,t)一定是从一定是从v2到到t的一条的一条最短路径。最短路径。多段图的向前递推关系多
12、段图的向前递推关系动态规划法每一步的决策依赖于子问题的解。在动态规划法每一步的决策依赖于子问题的解。在多段图中,一个阶段的决策与后面所要求解的子问多段图中,一个阶段的决策与后面所要求解的子问题相关,所以不能直接在某个阶段做出决定。题相关,所以不能直接在某个阶段做出决定。根据根据最优子结构特性最优子结构特性,我们可以从最后阶段开始,我们可以从最后阶段开始采用逐步向前递推的方法,由子问题的最优解计算采用逐步向前递推的方法,由子问题的最优解计算原问题的最优解。原问题的最优解。递推关系递推关系:cost(i,jcost(i,j):):从从从从i i阶段阶段阶段阶段j j结点到结点到结点到结点到t t的
13、最短路径长度,的最短路径长度,的最短路径长度,的最短路径长度,i i是阶段编号,是阶段编号,是阶段编号,是阶段编号,j j是是是是i i阶段中的结点编号,阶段中的结点编号,阶段中的结点编号,阶段中的结点编号,cost(k,tcost(k,t)=0)=0cost(i,jcost(i,j)=minc(j,p)+cost(i+1,p)=minc(j,p)+cost(i+1,p)j jV Vi i,p pV Vi+1i+1,E E例如例如例如例如:cost(2,1)=minc(1,5)+cost(3,5),:cost(2,1)=minc(1,5)+cost(3,5),c(1,6)+cost(3,6),
14、c(1,6)+cost(3,6),c(1,7)+cost(3,7)c(1,7)+cost(3,7)cost(5,11)=0,cost(5,11)=0,cost(4,10)=5,d(10)=11,cost(4,9)=2,d(9)=11,cost(4,8)=4,d(8)=11cost(4,10)=5,d(10)=11,cost(4,9)=2,d(9)=11,cost(4,8)=4,d(8)=11cost(3,7)=min6+cost(4,10)cost(3,7)=min6+cost(4,10),5+cost(4,9)=7,d(7)=95+cost(4,9)=7,d(7)=9cost(3,6)=5,
15、d(6)=9,cost(3,5)=7,d(5)=9cost(3,6)=5,d(6)=9,cost(3,5)=7,d(5)=9cost(2,1)=min4+cost(3,5)cost(2,1)=min4+cost(3,5),2+cost(3,6),1+cost(3,7)=7,d(1)=62+cost(3,6),1+cost(3,7)=7,d(1)=6cost(2,2)=min2+cost(3,5)cost(2,2)=min2+cost(3,5),7+cost(3,6)=9,d(2)=57+cost(3,6)=9,d(2)=5cost(2,3)=min11+cost(3,7)=18,d(3)=7c
16、ost(2,3)=min11+cost(3,7)=18,d(3)=7cost(2,4)=min11+cost(3,6)cost(2,4)=min11+cost(3,6),8+cost(3,7)=15,d(4)=78+cost(3,7)=15,d(4)=7cost(1,0)=min9+cost(2,1),7+cost(2,2),3+cost(2,3),cost(1,0)=min9+cost(2,1),7+cost(2,2),3+cost(2,3),2+cost(2,4)=16,d(0)=12+cost(2,4)=16,d(0)=1p(0)=0,p(k-1)=n-1=11,p(1)=d(p(0)=
17、d(0)=1;p(2)=d(p(1)=d(1)=6;p(3)=d(p(2)=d(6)=9;最短路径最短路径:(0,1,6,9,11)。一般。一般:p(i)=d(p(i-1)d(jd(j):):表示从结点表示从结点j j到终点的最到终点的最短路径上短路径上j j后的下一个结点。后的下一个结点。p(0)p(k-1):p(0)p(k-1):表示从源点表示从源点s s到到终点终点t t的最短路径上的结点。的最短路径上的结点。重叠子问题重叠子问题重叠子问题重叠子问题:cost(i,jcost(i,j)可能被反复计算。可能被反复计算。可能被反复计算。可能被反复计算。0 0 0 0 0 0 0 01 1 1
18、 12 2 2 24 4 4 45 5 5 53 3 3 3图的邻接表结构图的邻接表结构1 1 1 1 6 6 6 62 2 2 2 1 1 1 13 3 3 3 5 5 5 5 0 0 0 0 6 6 6 62 2 2 2 5 5 5 54 4 4 4 3 3 3 3 0 0 0 0 5 5 5 52 2 2 2 5 5 5 55 5 5 5 2 2 2 2 1 1 1 1 3 3 3 32 2 2 2 6 6 6 65 5 5 5 6 6 6 6 0 0 0 0 1 1 1 11 1 1 1 5 5 5 53 3 3 3 5 5 5 54 4 4 4 6 6 6 6 5 5 5 5 4 4
19、 4 42 2 2 2 4 4 4 43 3 3 3 2 2 2 24 4 4 4 6 6 6 6 0 0 0 01 1 1 12 2 2 23 3 3 34 4 4 45 5 5 5 【程序程序程序程序7 71 1】多段图的向前递推算法多段图的向前递推算法多段图的向前递推算法多段图的向前递推算法templatevoidGraph:FMultiGraph(intk,int*p)/采用程序采用程序68的邻接表存储图的邻接表存储图G。float*cost=newfloatn;intq,*d=newintn;costn-1=0,dn-1=-1;/设置向前递推的初值设置向前递推的初值cost(j)表示
20、从结点表示从结点j到终点到终点t的最短路径的最短路径d(j):表示从结点表示从结点j到终点的最短路径上到终点的最短路径上j后的下一个结点。后的下一个结点。p(0)p(k-1):表示从源点表示从源点s到终点到终点t的最短路径上的结点。的最短路径上的结点。for(for(intint j=n-2;j=0;j-)j=n-2;j=0;j-)/按按n n-2,0-2,0的次序计算的次序计算costcost和和d d float min=INFTY;/float min=INFTY;/计算最小值为计算最小值为costcostj j for(for(ENodeENode*r=*r=ajaj;r;r=r-;r
21、;r=r-nextArcnextArc)intint v=r-v=r-adjVexadjVex;if(r-if(r-w+costvw+costvw+costvw+costv;q=v;q=v;costjcostj=min;=min;djdj=q;/qq;/q是是j j在最短子路径上的后继结点在最短子路径上的后继结点 p0=0;pk-1=n-1;c=cost0;p0=0;pk-1=n-1;c=cost0;/p0/p0和和pn-1pn-1是源点和汇点是源点和汇点 for(jfor(j=1;j=k-2;j+)=1;j=k-2;j+)pjpj=dpj-1;=dpj-1;/pipi 是最短路径上第是最短路
22、径上第i i阶段的结点阶段的结点 delete cost;delete d;return c;delete cost;delete d;return c;7.1.4资源分配问题资源分配问题【例例例例7 72 2】将将n个个资资源源分分配配给给r个个项项目目,已已知知如如果果把把j个个资资源源分分配配给给第第i个个项项目目,可可以以收收益益N(i,j),0 j n,1 i r。求总收益最大的资源分配方案。求总收益最大的资源分配方案。动态规划算法的基本要素:一个最优化多步决策问题适合用动态规划法求一个最优化多步决策问题适合用动态规划法求解有两个要素:解有两个要素:最优子结构特性和重叠子问题。最优子
23、结构特性和重叠子问题。最优子结构特性和重叠子问题。最优子结构特性和重叠子问题。最优性原理最优性原理最优性原理最优性原理指出,一个问题的最优解包括了子问指出,一个问题的最优解包括了子问题的最优解时,则称该问题具有题的最优解时,则称该问题具有最优子结构特性。最优子结构特性。最优子结构特性。最优子结构特性。最优子结构特性最优子结构特性最优子结构特性最优子结构特性从较小子问题的解构造较大问题从较小子问题的解构造较大问题的最优解时只需考虑小问题的最优解。的最优解时只需考虑小问题的最优解。设设计计一一个个动动态态规规划划算算法法,通通常常可可以以按按以以下下几几个个步步骤进行:骤进行:(1 1)刻画最优解
24、的结构特性;)刻画最优解的结构特性;(2 2)递归定义最优解值;)递归定义最优解值;(3 3)以自底向上方式计算最优解值;)以自底向上方式计算最优解值;(4 4)根据计算)根据计算得到的信息得到的信息构造一个最优解。构造一个最优解。其中,第(其中,第(1 1)至()至(3 3)步是)步是动态规动态规划算法的基本划算法的基本步步骤骤。最。最优优解解值值是最是最优优解的目解的目标标函数的函数的值值。7.2每对结点间的最短路径每对结点间的最短路径 7.2.1问题描述问题描述设设G=(V,E)G=(V,E)是是一一个个有有n n个个结结点点的的带带权权有有向向图图,w(i,j)w(i,j)是是权权函数
25、,函数,每每对对结结点点间间的的最最短短路路径径问问题题是是指指求求图图中中任任意一意一对结对结点点i i和和j j之之间间的最短路径。的最短路径。7.2.2动态规划法求解动态规划法求解最优子结构最优子结构最优子结构最优子结构设设图图G=(V,E)是是带带权权有有向向图图,(i,j)是是从从结结点点i到到结结点点j的的最短路径长度。最短路径长度。(1)如如果果k是是这这条条路路径径上上的的一一个个结结点点,(i,k)和和(k,j)分分别别是是从从i到到k和和从从k到到j的的最最短短路路径径长长度度,则则必必有有(i,j)=(i,k)+(k,j)。因因为为若若不不然然,则则(i,j)代代表表的的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法设计与分析 算法 设计 分析 07
限制150内