收藏 分享(赏)

算法设计技巧与分析 第7章 动态规划.ppt

上传人:dreamzhangning 文档编号:2174156 上传时间:2018-09-04 格式:PPT 页数:48 大小:519KB
下载 相关 举报
算法设计技巧与分析 第7章 动态规划.ppt_第1页
第1页 / 共48页
算法设计技巧与分析 第7章 动态规划.ppt_第2页
第2页 / 共48页
算法设计技巧与分析 第7章 动态规划.ppt_第3页
第3页 / 共48页
算法设计技巧与分析 第7章 动态规划.ppt_第4页
第4页 / 共48页
算法设计技巧与分析 第7章 动态规划.ppt_第5页
第5页 / 共48页
点击查看更多>>
资源描述

1、算法设计技巧与分析 Algorithms Design Techniques and Analysis,南方医科大学医工学院信息技术系,第7章 动态规划,理解动态规划的基本原理 掌握动态规划的算法实例(难点) 掌握用动态规划设计算法的方法(重点),Teaching Request,Content,动态规划原理 算法实例 最长公共子序列问题 矩阵链相乘 最短路径问题 0-1背包问题 动态规划范式,1 n=0f (n)= 1 n=1 f (n-1)+f (n-2) n1,F(4),F(3),F(2),F(2),F(1),F(1),F(0),Fibonacci Serial Problem,Recu

2、rsion Form,算法过程:1. procedure f(n)2. if (n=1) or (n=2) then return 13. else return f(n-1)+f(n-2),时间复杂性:,1,若n=1 或 n=2,若n3,Dynamic Programming Form,计算过程: 从f1开始,自底向上计算到fn。 时间复杂性:(n) 空间复杂性:(1),Dynamic Programming Principle,将待求解的问题分解成若干个子问题,先求解子问题,并存储子问题的解而避免计算重复的子问题,再由子问题的解得到原问题的解。,Difference between DC

3、and DP,都是分解成子问题,由子问题的解得到原问题的解。 分治中子问题相互独立,而动态规划中子问题互相有联系,且存在重复计算,即存在重叠子问题。,7.2 Longest Common Serial,Problem: 给出两个长度为n和m的字符串A和B,A=a1a2an,B=b1b2bm,确定在A和B中最长公共子序列的长度。,Example: 若A=zxyxyz,B=xyyzx, 则A和B的最长公共子序列为xyyz,其长度为4。,令Li,j表示a1a2ai和b1b2bj的最长公共子序列的长度,如果i和j都大于0,那么 若ai=bj,Li,j=Li-1,j-1+1 若aibj,Li,j=max

4、Li,j-1,Li-1,j,观察结论7.1,算法 7.1 LCS,输入: 字母表 上的两个字符串A和B,长度分别为n和m 。 输出: A和B最长公共了序列的长度。,1. for i 0 to n,2. L i,0 0,3. end for,4. for j 0 to m,5. L 0,j 0,6. end for,7. for i 1 to n,8. for j 1 to m,9. if then Li,j Li-1,j-1+1,10. else Li,j maxi,j-1,Li-1,j,11. end if,12. end for,13. end for,14. return Ln,m,定理

5、 7.1,最长公共子序列问题的最优解能够在 时间 和 空间内得到。,7.3 Matrix Chain,给定n个矩阵A1, A2, , An,其中Ai 是一个ri-1ri 矩阵( 1in),即AiAi+1是可乘的,求出n个矩阵相乘的最优计算次序,使得计算量最小。,Base Principle,考查两个矩阵相乘的情形:C=AB。如果矩阵A,B分别是pr和rq矩阵,则它们的乘积C 将是pq矩阵,其(i, j)元素为,则共需要prq次数乘。,Base Algorithm,void MatrixMultiply(int *a, int *b, int *c, int ra, int ca, int rb

6、, int cb) if(ca! = rb ) error(“矩阵不可乘”);for(int i = 0; i ra; i +)for(int j = 0; j cb; j +)int sum = ai0* b0j;for(int k = 1; k ca; k +)sum + = aik* bkj;cij = sum;,矩阵连乘积A是完全加括号的,则A可表示为2个完全加括号的矩阵连乘积B和C的乘积并加括号,即A=(B*C)。,考虑n=4 的情况,此时矩阵运算A*B*C*D可按以下方式(顺序)计算(完全加括号方式):A* ( (B*C) *D) ,A* (B* (C*D) ,(A*B) * (C

7、*D) ,(A* (B*C) ) *D , ( (A*B) *C )*D,Matrix Multiplication with Bracket,矩阵相乘满足结合律,连乘积可以有许多不同的次序,可以用加括号的方式确定。,设三个矩阵A1, A2, A3大小分别为210,102,210,考虑(A1( A2 A3), (A1A2) A3)的结果与相乘的次数。,对于n个矩阵的连乘积,设有f(n)个计算次序。我们可以在第k个和第k1个矩阵之间将原矩阵划分为两个子矩阵序列,则:,Catalan,其中f (n)=C (n-1),,Analyze the structure of the Optimizatio

8、n Result,设Mi: j为矩阵连乘积MiMi+1Mj。 计算M1: n的最优次序,设该次序在矩阵Mk-1和Mk之间断开,1kn,则完全加括号方式为(M1Mk-1) (MkMn)。总计算量为M1: k-1的计算量加上Mk: n的计算量,再加上M1: k-1和Mk: n相乘的计算量。,考虑M1:k-1 和Mk:n相乘所需的计算量?,M1:k -1的结果为r1*rk的矩阵,Mk:n的结果为rk*rn+1的矩阵,则它们相乘的计算量为r1*rk*rn+1,Optimization Sub-structure,计算M1:n的一个最优次序所包含的计算矩阵子链M1:k和Mk+1:n的次序也是最优的。 矩

9、阵连乘积计算次序问题的最优解包含着其子问题的最优解,也就是最优子结构性质。,设计算Mi: j所需的最少次数为Cij,原问题的最优解为C1n。 当 i = j 时,Mi : j= Mi ,Cii = 0,i=1,2,n。当 i j 时,Cij=Cik-1+Ckj+rirkrj+1 ki+1, i+2, , j ,Recursive Formula,对于1i j n不同的有序对(i,j)对应于不同的子问题Cij,因此,不同的子问题的个数最多只有,Size of Sub_Problem,用动态规划解此问题时,在计算过程中,保存已解决的子问题答案,每个子问题只计算一次,而在后面用到时简单地查一下,从而

10、避免了大量的重复计算。,24,22,12,34,33,44,11,14,13,23,Optimization Realization,C11 C12 C13 C14 C1nC22 C23 C24 C2nC33 C34 C3nCn-1n-1 Cn-1nCnn,计算C i j 时,只用到已计算出的C i k 和C k+1 j ,Basic Ideal,置所有只有一个矩阵的矩阵链计算量为0,即mii=0, i=1,2,n。 通过上一步的结果可以得到所有矩阵链长度为2的子问题的最优计算量。 通过上两步的结果可以得到所有矩阵链长度为3的子问题的最优计算量。,Problem,设要计算矩阵连乘积A1A2A3

11、A4A5,其中各矩阵的维数分别为:A1 A2 A3 A4 A5 510 104 46 610 102,1 2 3 4 5 1 2 3 4 5,m11+m23+r1r2r(3+1)=240+300=540 m13=minm12+m33+r1r3r(3+1)=200+120=320,i,j,算法 7.2 MATCHAIN,输入: n 个矩阵的链的维数对应于正整数数组 r1n1,其中r1n是n个矩阵的行数,rn+1是 的列数。 输出: n 个矩阵相乘的数量乘法的最小次数。,2. C i,i 0,3. end for,6. j i + d,1. for i 1 to n 填充对角线 ,4. for d

12、 1 to n-1 填充对角线 到 ,5. for i1 to n-d 填充对角线 的项目,7. comment: 下列三行计算 Ci,j,9. for k i + 1 to j,8. Ci,j ,Ci,j minCi,j,Ci,k-1 Ck,j+rirkrj+1,11. end for,12. end for,13. end for,14. return C1,n,Time Complexity,算法MATCHAIN 的主要计算量取决于程序中对r, i 和k 的三重循环, 循环体内的计算量为O(1),三重循环的总次数是O(n3),所以,算法的计算时间上界为O(n3)。 算法需要的空间取决于三

13、角数组的大小,即(n2)。,定理 7.2,一个由 n 个矩阵组成的链相乘,它所需要数量乘法的最小次数可以在 时间和 空间找出。,令人惊讶的结论:该问题可以在O(nlogn)时间内解出!,Program,void MatrixChain(int p, int n, int * *m, int * *s) for (int i=1; i=n; i+) mii= ;/单个矩阵的计算量for (int r=2; r=n; r+)/r为每次循环矩阵链的长度for (int i=1; i= ; i+)int j=i+r-1;mij= mi+1j+pi-1*pi*pj;sij=i;for (int k=i+

14、1; kj; k+)int t= mik+ mk+1j+ ;if (t mij) mij=t;sij=k; ,0,nr+1,取第一个可取位置,即断开位置为i,循环取k的可取位置,pi-1*pk*pj,Content,动态规划原理 算法实例 最长公共子序列问题 矩阵链相乘 最短路径问题 0-1背包问题 动态规划范式,Dynamic Programming Pattern,基础: 把子问题的解存储起来以避免重复计算。 重要发现: 对于算法考虑的原问题的每一个子问题,算法都计算了一个最优解。 最优化原理: 给出一个最优的决策序列,每个子序列自身必须是最优的决策序列。,Content,动态规划原理 算

15、法实例 最长公共子序列问题 矩阵链相乘 最短路径问题 0-1背包问题 动态规划范式,All-Pairs Shortest Paths,设G=(V,E)是一个有向图,其中的每条边(i,j)有一个非负的长度li,j,若顶点i到j没有边,则li,j=。 问题: 找出从每个顶点到其他所有顶点的距离(即:两个顶点之间的最短路径的长度)。,Solution,假设V=1,2,n,若i和j是V中两个不同的顶点,定义 是从i到j,并且不经过k+1,K+2,n中任何顶点的最短路径的长度。 则:,算法 7.3 FLOYD,输入: nn维矩阵l1n,1 n,以便对于有向图 G(1,2, ,n,E)中的边(i,j)的长

16、度为li,j。 输出: 矩阵 D,使得 Di,j 等于 i 到 j 的距离。,1. D l 将输入矩阵 l 复制到 D,2. for k 1 to n,3. for i 1 to n,4. for j 1 to n,5. Di,j=minDi,j,Di,k+Dk,j ,6. end for,7. end for,8. end for,0-1 Package Problem,设U=u1,u2,un是一个准备放入容量为C的背包中的n项物品的集合,对于1jn,令sj和vj分别为第j项物品的体积和价值。 求:子集合 ,使得在容量约束条件下,背包内物品价值最大。,Example,考虑有三种物品, 它们的

17、体积为 ( v1, v2, v3 ) = ( 2, 3, 4 ), 价值为( s1, s2, s3 ) = ( 1, 2, 5 ), 当背包容量为c = 6时,如何装背包总价值最大?,v1, v2, v3 = 1, 0, 1 s1* v1 + s2*v2 + s3*v3= 6,v1, v2, v3 = 0, 0, 0 1, 0, 0 0, 1, 0 0, 0, 1 1, 1, 0 1, 0, 1,设Vi,j用来表示从前i项u1,u2,ui中取出来的装入体积为j的背包的物品的最大价值,则要寻求的是值Vn,C。,算法 7.4 KNAPSACK,1. for i 0 to n,2. V i,0 0,

18、3. end for,4. for j 0 to C,5. V 0,j 0,6. end for,输入: 物品集合 ,体积分别为 , 价值分别为 ,容量为 C 的背包 。 输出: 的最大总价值,且满足 ,其中S U。,7. for i 1 to n,8. for j 1 to C,9. Vi,j Vi-1,j,11. end for,12. end for,13. return Vn,C,10. if thenVi,j maxVi,j,Vi - 1,j - + ,Example,0,4,4,0,3,7,0,0,S=2,3,4,5,v=3,4,5,7,max,定理 7.3,背包问题的最优解能够在

19、 的时间和 的空间内得到。,缺点:算法要求每个物品的重量为整数,当背包容量C很大时,算法需要的计算时间较多。,Optimal Solution,Template Void Traceback(Type *m,int w,int c,int n,int x) for(int i=1;in;i+)if(mic=mi+1c)xi=0;else xi=1;c-=wi;xn=(mnc)?1:0; ,证明:,因为,若(z2, zn )是下述子问题的一个最优解,而(y2, yn)不是它的最优解,这说明(y1,z2, zn )是所给问题的一个更优解, 从而(y1, y2, yn )不是原问题的最优解,矛盾。,则,因此,

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

当前位置:首页 > 高等教育 > 大学课件

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


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

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

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