算法设计与分析课件.pptx
《算法设计与分析课件.pptx》由会员分享,可在线阅读,更多相关《算法设计与分析课件.pptx(141页珍藏版)》请在三一办公上搜索。
1、主要内容介绍,7.1 一般方法和基本要素7.2 最大字段和7.3 每对结点间的最短路径7.4 矩阵连乘问题7.5 最长公共子序列问题7.6最优二叉搜索树,主要内容介绍,7.7 0-1背包问题7.8流水作业调度,引言,动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题。经分解得到的子问题往往不是互相独立的。不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被重复计算了许多次。如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,就可以避免大量重复计算,从而得到多项式时间算法。,Those who cannot remember the past are
2、 doomed to repeat it.George Santayana, The life of Reason, Book I: Introduction and Reason in Common Sense (1905),第七章 动态规划,7.1 一般方法1. 多阶段决策问题 多阶段决策过程:问题的活动过程分为若干相互联系的阶段,任一阶段i以后的行为仅依赖于i阶段的过程状态,而与i阶段之前的过程如何达到这种状态的方式无关。在每一个阶段都要做出决策,这决策过程称为多阶段决策过程(multistep decision process) 。 最优化问题:问题的每一阶段可能有多种可供选择的决策,
3、必须从中选择一种决策。各阶段的决策构成一个决策序列。决策序列不同,所导致的问题的结果可能不同。 多阶段决策的最优化问题就是:求能够获得问题最优解的决策序列最优决策序列。,2. 多阶段决策过程的求解策略1)枚举法 穷举可能的决策序列,从中选取可以获得最优解的决策序列2)动态规划 20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,创立了解决这类过程优化问题的新方法动态规划。 动态规划(dynamic programming)是运筹学的一个分支,是求解决
4、策过程(decision process)最优化的数学方法。 应用领域:动态规划问世以来,在经济管理、生产调度、工程技术和最优控制等方面得到了广泛的应用。例如最短路线、库存管理、资源分配、设备更新、排序、装载等问题,用动态规划方法比用其它方法求解更为方便。,3. 最优性原理(Principle of Optimality) 过程的最优决策序列具有如下性质:无论过程的初始状态和初始决策是什么,其余的决策都必须相对于初始决策所产生的状态构成一个最优决策序列。 利用动态规划求解问题的前提 1) 证明问题满足最优性原理 如果对所求解问题证明满足最优性原理,则说明用动态规划方法有可能解决该问题 2) 获
5、得问题状态的递推关系式 获得各阶段间的递推关系式是解决问题的关键。,Divide-and-conquer技术的问题子问题是相互独立的如果子问题不是相互独立的,分治方法将重复计算公共子问题,效率很低优化问题给定一组约束条件和一个代价函数,在解空间中搜索具有最小或最大代价的优化解很多优化问题可分为多个子问题,子问题相互关联,子问题的解被重复使用,Why?,Dynamic Programming特点把原始问题划分成一系列子问题求解每个子问题仅一次,并将其结果保存在一个表中,以后用到时直接存取,不重复计算,节省计算时间自底向上地计算适用范围一类优化问题:可分为多个相关子问题,子问题的解被重复使用,Wh
6、at?, 牛牛文库文档分享,使用Dynamic Programming的条件Optimal substructure(优化子结构)当一个问题的优化解包含了子问题的优化解时,我们说这个问题具有优化子结构。缩小子问题集合,只需那些优化问题中包含的子问题,减低实现复杂性优化子结构使得我们能自下而上地完成求解过程Subteties(重叠子问题)在问题的求解过程中,很多子问题的解将被多次使用,How?, 牛牛文库文档分享,Dynamic Programming算法的设计步骤分析优化解的结构递归地定义最优解的代价自底向上地计算优化解的代价保存之, 并获取构造最优解的信息根据构造最优解的信息构造优化解,多段
7、图问题多段图G=(V,E)是一个有向图,且具有特性: 结点:结点集V被分成k2个不相交的集合Vi,1ik, 其中V1和Vk分别只有一个结点:s(源结点)和t(汇点)。 段: 每一集合Vi定义图中的一段共k段。 边: 所有的边(u,v)均具有如下性质: 若E,则 若uVi,则uVi1,即该边将是从某段i指向i+1段, 1ik1。 成本:每条边(u,v)均附有成本c(u,v)。 s到t的路径:是一条从第1段的源点s出发,依次经过第2段的某结点v2,i,经第3段的某结点v3,j、最后在第k段的汇点t结束的路径。 该路径的成本是这条路径上边的成本和。 多段图问题:求由s到t的最小成本路径。,7.1.2
8、 多段图问题,7.1.2 多段图问题,1. 问题的描述 在多段图中求从s到t的一条最小成本的路径,可以看 作是在k-2个段作出某种决策的结果。 第i次决策决定Vi+1中的哪个结点在这条路径上,这里 1ik-2; 最优性原理对多段图问题成立,多段图问题的多阶段决策过程:生成从s到t的最小成本路径是在k-2个阶段(除s和t外)进行某种决策的过程:从s开始,第i次决策决定Vi+1(1ik-2)中的哪个结点在从s到t的最短路径上。 最优性原理对多段图问题成立 假设s,v2,v3,vk-1,t是一条由s到t的最短路径。 初始状态:s 初始决策:(s,v2), v2V2 初始决策产生的状态:v2 则,其余
9、的决策:v3,.,vk-1相对于v2将构成一个最优决策序列最优性原理成立。 反证:若不然,设v2,q3,qk-1,t是一条由v2到t的更短的路径,则s, v2,q3,qk-1,t将是比s,v2,v3,vk-1,t更短的从s到t的路径。与假设矛盾。 故,最优性原理成立,即,是v2 v3,.,vk-1t构成从v2至t的最短路径,4. 最优决策序列的表示 设 S0:问题的初始状态 n次决策:问题需要做n次决策 xi:i阶段的决策值,1in。 设X1=r1,1,r1,2,r1,p1是x1可选决策值的集合,S1,j1是在选择决策值r1,j1之后所产生的状态“初始决策”所产生的状态。 设1,j1是相应于状
10、态S1,j1的最优决策序列。则,相应于S0的最优决策序列就是r1,j11,j1|1j1p1中最优的序列,记为,就一个特定的r1,j1而言,若已经做了k-1次决策,1k-1n,设x1,x2,xk-1的最优决策值是r1,r2,rk-1,所产生的状态依次为S1,S2,Sk-1。 设Xk=rk,1,rk,2,rk,pk是xk可能的决策值的集合,Sk,jk是在选择决策值rk,jk之后所产生的状态, 1jkpk。 k,jk是相应于状态Sk,jk的最优决策序列。则,相应于Sk-1的最优决策序列是 相应于S0的最优决策序列为r1,rk-1,rk, k,就一个特定的rk,jk而言,2. 向前处理策略求解 设 P
11、(i,j)是一条从Vi中的结点j到汇点t的最小成本路径, COST(i,j)是这条路径的成本。 1) 向前递推式 2) 递推过程 第k-1段 c(j,t) E COST(k-1,j) = ,l1,l2,.,lpi+1,t,j,Vi,Vi+1,各递推结果第4段 COST(4,9) = c(9,12) = 4 COST(4,10) = c(10,12) = 2 COST(4,11) = c(11,12) = 5第3段 COST(3,6) = min6+COST(4,9),5+COST(4,10) = 7 COST(3,7) = min4+COST(4,9),3+COST(4,10) = 5 COS
12、T(3,8) = min5+COST(4,10),6+COST(4,11) = 7第2段 COST(2,2) = min4+COST(3,6) , 2+COST(3,7), 1+COST(3,8) = 7 COST(2,3) = 9 COST(2,4) = 18 COST(2,5) = 15第1段 COST(1,1) = min9+COST(2,2),7+COST(2,3), 3+COST(2,4),2+COST(2,5) = 16S到t的最小成本路径的成本 16, 最小成本路径的求取 记 D(i,j)每一COST(i,j)的决策 即,使c(j,l)+COST(i+1,l)取得最小值的l值。
13、例:D(3,6) = 10, D(3,7)= 10 D(3,8) = 10 D(2,2) = 7, D(2,3) = 6,D(2,4) = 8,D(2,5) = 8 D(1,1) = 2 根据D(1,1)的决策值向后递推求取最小成本路径: v2=D(1,1)=2 v3 = D(2,D(1,1) = 7 v4 = D(3,D(2,D(1,1) = D(3,7) = 10 故由s到t的最小成本路径是:1271012,3) 算法描述 结点的编号规则 源点s编号为1,然后依次对V2、V3Vk-1中的结点编号,汇点t编号为n。 目的:使对COST和D的计算仅按n-1,n-2,1的次序计算即可,无需考虑标
14、示结点所在段的第一个下标。 算法描述,算法7.1 多段图的向前处理算法 procedure FGRAPH(E,k,n,P) /输入是按段的顺序给结点编号的,有n个结点的k段图。E是边 集,c(i,j)是边的成本。P(1:k)带出最小成本路径/ real COST(n); integer D(n-1),P(k),r,j,k,n COST(n)0 for jn-1 to 1 by -1 do /计算COST(j)/ 设r是具有性质:E且使c(j,r)+COST(r)取最小值的结点 COST(j)c(j,r) + COST(r) D(j) r /记录决策值/ repeat P(1)1; P(k)n
15、for j2 to k-1 do /找路径上的第j个结点/ P(j) D(P(j-1) /回溯求出该路径/ repeat end FGRAPH,算法的时间复杂度 若G采用邻接表表示,总计算时间为:,3. 向后处理策略求解 设 BP(i,j)是一条从源点s到Vi中的结点j的最小成本路径, BCOST(i,j)是这条路径的成本。 1) 向后递推式 2) 递推过程 第2段 c(1,j) E COST(2,j) = ,各递推结果第2段 BCOST(2,2) = 9 BCOST(2,3) = 7 BCOST(2,4) = 3 BCOST(2,5) = 2第3段 BCOST(3,6) = minBCOST
16、(2,2)+4,BCOST(2,3)+2 = 9 BCOST(3,7) = minBCOST(2,2)+2,BCOST(2,3)+7, BCOST(2,5)+11 = 11 BCOST(3,8) = minBCOST(2,4)+11, BCOST(2,5)+8 = 10第4段 BCOST(4,9) = minBCOST(3,6)+6,BCOST(3,7)+4 = 15 BCOST(4,10) = minBCOST(3,6)+5,BCOST(3,7)+3, BCOST(3,8)+5 = 14 BCOST(4,11) = minBCOST(3,8)+6 = 16第5段 BCOST(5,12) =
17、minBCOST(4,9)+4,BCOST(4,10)+2, BCOST(4,11)+5 = 16S到t的最小成本路径的成本 16, 最小成本路径的求取 记 BD(i,j)每一COST(i,j)的决策 即,使COST(i-1,l)+c(l,j)取得最小值的l值。 例:BD(3,6) = 3, BD(3,7)= 2 ,BD(3,8) = 5 BD(4,9) = 6, BD(4,10) = 7, BD(4,11) = 8 BD(5,12) = 10 根据D(5,12)的决策值向前递推求取最小成本路径: v4 = BD(5,12)=10 v3 = BD(4,BD(5,12) = 7 v2 = BD(
18、3,BD(4,BD(5,12) = BD(3,7) = 2 故由s到t的最小成本路径是:1271012,算法7.2 多段图的向后处理算法 procedure BGRAPH(E,k,n,P) /输入是按段的顺序给结点编号的,有n个结点的k段图。E是边 集,c(i,j)是边的成本。P(1:k)带出最小成本路径/ real BCOST(n); integer BD(n-1),P(k),r,j,k,n BCOST(1)0 for j2 to n do /计算BCOST(j)/ 设r是具有E且使BCOST(r)+ c(r,j)取最小值性质的结点 BCOST(j) BCOST(r)+ c(r,j) BD(
19、j) r /记录决策值/ repeat P(1)1; P(k)n for jk-1 to 2 by -1 do /找路径上的第j个结点/ P(j) D(P(j+1) /回溯求出该路径/ repeat end BGRAPH,4. 多段图问题的应用实例资源的分配问题 将n个资源分配给r个项目的问题:如果把j个资源,0jn,分配给项目i,可以获得N(i,j)的净利。 问题:如何将这n个资源分配给r个项目才能使各项目获得的净利之和达到最大。 转换成一个多段图问题求解。,用r1段图描述该问题: 段: 1到r之间的每个段i表示项目i。 结点: i=1时,只有一个结点源点s =V(1,0) 当2ir时,每段
20、有n+1个结点,每个结点具有形式 V(i,j):表示到项目i之前为止,共把j个资源分配给了 前i-1个项目,j=0,1,n。 汇点t=V(r+1,n) 边的一般形式:,jl,1ir 成本: 当jl且1ir时,边赋予成本 N(i,l-j),表示给项目i分配l-j个资源所可能获得的净利。 当jn且i=r时,此时的边为:,该边赋 予成本:,指向汇点的边,注,并不是分给的资源越多,得到的净利就越大,实例:将4个资源分配给3个项目。构成一个4段图。 问题的解:资源的最优分配方案由一条s到t的最大成本路径给出改变边成本的符号,从而将问题转换成为求取最小成本路径问题。,7.2 最大子段和,问题描述:给定由n
21、个整数(包含负整数)组成的序列a1,a2,.,an,求该序列子段和的最大值。当所有整数均为负值时定义其最大子段和为0。依此定义,所求的最优值为: 例如,当(a1,a2, a3, a4, a5,a6)=(-2,11,-4,13,-5,-2)时,最大子段和为:,1. 一个简单算法,一个简单算法:int MaxSum(int n, a, 算法有3重循环,复杂性为O(n3)。,由于有:算法可作如下改进:int MaxSum(int n, a, 改进后的算法复杂性为O(n2) 。,2. 分治方法求解,从问题的解的结构可以看出,它适合于用分治策略求解:如果将所给的序列a1:n分为长度相等的两段a1:n/1
22、和an/2+1:n,分别求出这两段的最大子段和,则a1:n的最大子段和有三种情形:a1:n的最大子段和与a1:n/2的最大子段和相同;a1:n的最大子段和与an/2+1:n的最大子段和相同;a1:n的最大子段和为下面的形式。A、B这两种情形可递归求得。对于情形C,容易看出,an/2与an/2+1在最优子序列中。因此,我们可以在a1:n/2和an/2+1:n中分别计算出如下的s1和s2。则s1+s2即为出现情形C使得最优值。 从而设计出下面所示的分治算法。,int MaxSubSum(int a, int left, int right) int sum=0; if (left=right)su
23、m=aleft0?aleft:0; elseint center=(left+right)/2; int leftsum=MaxSubSum(a,left,center); int rightsum=MaxSubSum(a,center+1,right); int s1=0;lefts=0; for (int i=center;i=left;i-) lefts+=ai; if (leftss1) s1=lefts; int s2=0;rights=0; for (int i=center+1;is2) s2=rights; sum=s1+s2; if (sumleftsum) sum=left
24、sum; if (sumsightsum) sum=rightsum; return sum;,3. 动态规划方法求解,在对上述分治算法的分析中我们注意到,由bj的定义易知,当bj-10时bj=bj-1+aj,否则bj=aj。由此可得计算bj的动态规划递归式bj=maxbj-1+aj,aj,1jn。据此,可设计出求最大子段和的动态规划算法如下:int MaxSum(int n, int a)int sum=0; b=0;for (i=1;i0) b+=ai; else b=ai;if (bsum) sum=b;return sum;显然该算法的计算时间为O(n)。,4. 算法的推广,最大矩阵和
25、问题,略最大m子段和问题,略,7.3 每对结点之间的最短路径,1. 问题描述 设G=(V,E)是一个有n个结点的有向图,C是G的成本邻接矩阵,C中元素有: 0 ,i j c(i,j)= 边的成本,ij且E(G) ,ij且 其中,1i,jn 每对结点之间的最短路径问题:求满足下述条件的矩阵A,A中的任一元素A(i,j)代表结点i到结点j的最短路径长度。,分析: 利用单源最短路径算法求解 计算n个结点的单源最短路径。 时间复杂度:(n3)利用动态规划策略求解 将求解G中每对结点之间的最短路径问题转化成一个多阶段决策过程。 决策什么? 最优性原理对于该问题是否成立?,2. 动态规划求解策略1)最优性
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 设计 分析 课件

链接地址:https://www.31ppt.com/p-1830099.html