ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:51.90KB ,
资源ID:30738187      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/30738187.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(算法设计与分析讲义chapter4.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

算法设计与分析讲义chapter4.docx

1、算法设计与分析讲义chapter4第四章 Dynamic Programming技术4.1 Dynamic Programming 概述 优化问题: 一个优化问题可能有很多解,每个解有一 个代价,我们希望选择一个具有最少代价 的解。一个优化问题可能有多个优化解。 动态规划方法:Dynamic Programming方法适用于:当一个优化问 题可分为多个子问题,子问题的解被重复使用。 Dynamic Programming方法求解每个子问题仅一次, 并保存其结果,以后用到时直接存取,不重复计算, 节省计算时间。 Dynamic Programming方法自底向上,而divid- and-conq

2、ue方法自顶向下。 动态规划算法的书记步骤 分析优化解的结构 递归地定义最优解的代价 自底向上地计算优化解的代价保存之, 并获取构造最优解的信息。 根据构造最优解的信息构造优化解4.2. Matrix-chain Multiplication4.2.1 问题的提出 矩阵链乘法问题 输入: Ai是矩阵 输出:矩阵乘积 A1A2An 矩阵链乘法的实现 矩阵乘法满足结合率。 计算一个矩阵链的乘法可有多种方法: 例如:(A1A2A3A4)=(A1(A2(A3A4) =((A1A2)(A3A4)) . =((A1A2)A3)A4) 两个矩阵的乘法AB的代价依赖于计算的顺序 复杂性测度:乘法的次数 AB的

3、代价:设A是pq矩阵,B是qr矩阵, 则计算AB的时间是0(pqr). 矩阵链乘法的代价 设A1=10100矩阵, A2=1005矩阵, A3=550矩阵, 则 T(A1A2)A3)=101005+10550=5000+2500=7500 T(A1A2) A3)=100550+1010050 =25000+50000=750000. 结论: 不同解法有不同的代价。 矩阵链乘法优化问题 输入:, Ai是pi-1pi矩阵 输出:代价最小的计算A1A2.An的方法 矩阵链乘法优化问题的解空间设p(n)=计算具有n个矩阵的矩阵链乘积的方法数 1 if n=1 p(n)= if n2 p(n)=C(n-

4、1)=Catalan数= (4n/n) *如此之大的解空间是无法用枚举方法求出最优解的!4.2.2 优化解的结构几个记号 Ai-j=AiAi+1.Aj cost(Ai-j)=计算Ai-j的代价 优化解的结构 对于任意k,1kn,A1n=A1kAk+1n cost(A1n)=cost(A1k)+cost(Ak+1n)+cost(A1kAk+1n) 在A1n的优化解中,子问题A1k的解法必须是A1-k的优化 解,子问题Ak+1n的解必须是Ak+1n的优化解。 -问题的优化解包括子问题优化解 -Dynamic-programming可用的原因4.2.3. 优化解的代价方程 假设 mi,j=计算Ai-

5、j的最小乘法数 m1,n=计算Ain的最小乘法数 A1.AkAk+1.An是优化解 代价方程 mi,i=计算Aii=Ai的最小乘法数=0 mi,j=mi,k+mk+1,j+pi-1pkpj,其中, pi-1pkpj是计算 Ai-kAi-k所需要完成的乘法数, AI和Ak分别是pI-1pI和 pk-1pk矩阵. *k实际上是不可预知. 0 if i=j mi,j= minikjmi,k+mk+1,j+pI-1pkpj if ij *以下令Si,j是Aij的优化解对应的k值.4.2.4 优化解代价方程的计算 1. 递归计算方法 0 if i=j m1,n= min1knm1,k+mk+1,n+po

6、pkpn if ij 算法: IF i=j THEN Return 0; m=; For k=1 to n-1 Do x=m1,k+mk+1,n+popkpn; IF xm THEN m=x; Return m; 算法复杂性分析 T(n)= (T(k)+T(n-k)+(1) =(1)+ (T(k)+T(n-k) =(1)+2T(k) =(n)+ 2T(k) (n)+2T(n-1) (n)+(n-1)+22T(n-2) (n)+(n-1)+.+(1)+2n-1T(1) (2n) *递归算法并不好于枚举算法 2.动态规划算法 数据结构 矩阵Ai: Pi-1Pi for i=1,2,.n, 以为数组

7、p= 二维数组m1.n,1.n,存储mi,j 二维年数组s1.n,1.n, 存储计算mi,j时确定的 优化解对应的k值. 基本思想 对于ikj, mi,j=mini,k+mk+1,j+pi-1pkpj 对于ikj,必须在计算mi,j之前计算出所有 mi,k,mk+1,j,并加以存储。 算法 Matrix-Chain-Order(p) n=length(p)-1; FOR i=1 TO n DO Mi,i=0; FOR =2 TO n DO FOR i=1 TO n-+1 DO j=i+-1; mi,j=; /* 以下计算mi,j=minikji,k+mk+1,j+pi-1pkpj */ FOR

8、 ki To j-1 DO q=mi,k+mk+1,j+pi-1pkpj IF qmi,j THEN mi,j=q;si,j=k; Return m and s. 算法注释 =2: i=1,2,.,n-+1=n-1 j=i+-1=i+1 计算mk,k+1,1kn-1; =3: i=1,2,.,n-+1=n-2 j=i+-1=i+3-1=i+2 计算mk,k+2,1kn-2; =4: i=1,2,.,n-+1=n-3 j=i+l-1=i+4-1=i+3 计算mk,k+3, 1kn-3; =n: i=1,.n-+1=n-n+1=1 j=i+-1=1+n-1=n 计算m1,n =2时:计算mi,i+

9、1需要mi,k和mk+1,i+1, iki+1,即mi,i, mi+1,i+1 =3时:计算mi,i+2 需要mi,k,mk+1,i+2,iki THEN X=Matrix-Chain-Multiply(A,s,i,si,j); Y=Matrix-Chain-Multiply(A,s,si,j+1,j); Return Matrix-Multiply(X,Y); Else Return Aj4.3 动态规划原理问题:什么情况下可以应用 Dynamic Programming可用动态规划方法求解的问题必须满足: 1. 具有Optimal substructure 2. 具有Overlapping

10、 sub-problems 4.3.1 Optimal substructure 1优化结构定义1. 如果一个问题的优化解包含了他的子问题的优化解, 则称此问题具有优化结构。*优化结构是应用动态规划方法的一个条件,也是应用Greedy 方法的一个条件,是否用动态规划方法,尚需看是否满足 Overlapping subproblems条件。 例1. Matrix-Chain-Multiply问题具有优化结构,因为 A1.An的优化解(A1.An) (Ak+1.An)包含 子问题(A1.An)和(Ak+1An)的优化解。 2.子问题空间 理想情况:子问题空间越小越好,可减少时间和空间复杂性。 例1

11、 Matrix-Chain-Multiply问题的子问题是所有子链 的集合。 我们也可以使子空间为任意的矩阵子序例太多 的无必要的子问题不得不被求解。 合适子空间地确定 在分析问题的结构时,用循环方法可以得到一个好的子问题 空间。 例2(A1An)=(A1.Ak1)(Ak+1.An) =(A1.Ak2)(Ak2+1.A1) (Ak+1.Ak3)(Ak3+1.An) 最后得到子问题空间为S=AiAi+1.Aj1ijn. 我们来计算S的大小。S包括: 长为1的矩阵子链n个, 长为2的矩阵子链n-1个, 长为n-1的矩阵子链2个, 长为n的矩阵子链1个. 于是,S的大小为n(n+1)/2。4.3.2

12、 Overlapping sub-problems 1.相交子问题 定义2.如果递归算法求解一个优化问题时,反复求解相同的 子问题,则称该优化问题有相交子问题。 *Dynamic Programming方法利用这种特点,只计算每个子问 题一次并保存,避免反复计算相同子问题多次。 *Divid-and-conguer方法每次都产生新问题并计算之,而不 管是否该子问题已计算过。 2Matrix-Chain-Multiply的递归分解算法 算法 Recursive-Matrix-chain(p,i,j) If i=j Then Return 0; Mi,j=; For k=i To j-1 Do q

13、=Recursive-Matrix-chain(p,i,k)+ Recursive-Matrix-chain(p,k+1,j)+pi-1pkpj If qmi,j Then mi,j=q Return mi,j. 复杂性分析 求m1,n的复杂性: T(1)1 T(n)1+ (T(k)+T(n-k)+1) 2T(k)+n2T(n-1)+n22T(n-2)+2(n-1)+n 23T(n-3)+.2n-1T(1)=0(2n)4.3.3. Memoization基本思想 使低效的递归算法记忆化用表记住子问题的解,供以后查 找,控制结构仍然是自顶向下的递归结构。 Matrix-Chain-Multipl

14、y记忆算法 Matrix-Chain-Multiply(p)1. n=length(p)-12. For i=1 To n Do3. For j=i To n Do4. mi,j=;5. Return Lookup-chain(p,1,n).Lookup-chain(p,i,j)1. IF mi,j THEN Return mi,j;2. IF i=j THEN mi,j=0;3. ELSE FOR k=i To j-1 Do q=Lookup-china(p,i,k)+Lookupchina(p,k+1,j)+ pi-1pkpj4. If qmi,j THEN mi,jq5. Return

15、mi,j.Matrix-Chain-Multiply算法的复杂性 共有0(n2)表项,每个表项调用一次Lookup-chain, 每次调用 0(n)时间, T(n)=0(n3) S(n)=0(n2)m1:n,1:n4.4 最长公共子序列问题4.4.1. 问题定义 1. 子序列 定义1. 设x=(x1,x2,.xm)是一个序列,z=(z1,z2,.zm)是x的一个子序列,如果存在1i1i2.ikm,使xij=zj 例1. X=(A,B,C,B,D,A,B),Z=(B,C,D,B)是X的子序例。 2公共子序列 定义2. Z是序列X与Y的公共子序列如果Z是X的子序列且Z是Y的子序列。 3最长公共子序

16、列问题(LCS) 输入:X=(x1,x2,.xn),Y=(y1,y2,.ym) 输出:Z=X与Y的最长公共子序列6.4.2.最长公共子序列结构分析 定义3.设X=(x1,x2,.xn)是一个序列,X的第I前缀Xi是一个序列,定义为Xi=(x1,.xi)例2. X=(A,B,D,C,A),X1=(A),X2=(A,B),X3=(A,B,D) 1. 优化解的结构 定理1(LCS的优化结构)设X=(x1,.xm), Y=(y1,y2,.yn)是两个序列,Z=(z1,z2,.zk)是X与Y的LCS。下列结论成立: 如xm=yn, 则zk=xm=yn, Zk-1是Xm-1和Yn-1的LCS,即,LCSX

17、Y=LCSXm-1Yn-1+. 若xmyn,且zkxm,则Z是Xm-1和Y的LCS,即LCSXY=LCSXm-1Y 若xm=yn,且zkyn,则Z是X与Yn-1的LCS,即LCSXY=LCSXYn-1证明. 设zkxm,则可加xm=yn到Z,得到一个长为k+1的X与Y的公共序列,与Z是X和Y的LCS矛盾。于是zk=xm=yn。 现在证明Zk-1是Xm-1与Yn-1的LCS。显然Zk-1是Xm-1与Yn-1的公共序列,我们需要证明Zk-1是LCS。设不然,则存在X与Y的公共子序列W,W的长大于k-1。增加xm=yn到W,我们得到一个长大于k的X与Y的公共序列,与Z是LCS矛盾。于是,Zk-1是X

18、m-1与Yn-1的LCS。 由于zkxm,Z是Xm-1与Y的公共子序列。我们来证Z是Xm-1与Y的LCS。设Xm-1与Y有一个公共子序列W,W的长大于k, 则W也是X与Y 的公共子序列,与Z是LCS矛盾。 同可证。证毕 *X和Y的LCS的优化解结构为 LCSXm-1Yn-1+ if xm=yn LCSXY= LCSXm-1Y if xmyn,zkxm LCSXYn-1 if xmyn,zkyn 2.相交子问题 (见下边的递归图)LCSXY LCSXm-1Yn-1 LCSXm-1Y LCSXYn-1LCSXm-2Yn-2 LCSXm-2Yn-1 LCSXm-1Yn-2 LCSXm-2Yn-1 L

19、CSXm-2Y LCSXm-1Yn-1 . *求LCSXm-1Y和LCSXYn-1时都需要LCSXm-1Yn-1 . 3.子问题空间X与Y的LCS问题空间由求X与Y的前缀的LCS问题构成。 由于X的前缀个数为m个,Y的前缀个数为n个,求X与Y 的前缀的LCS问题的个数为m*n个。于是子问题空间的大小 为(m*n)。4.4.3 建立求解LCS长度的递归方程定理1说明: If xm=yn, xm属于X和Y的LCS,须求解Xm-1和Yn-1的LCS。 If xmyn,必须求解须求解Xm-1和Y的LCS以及须求解X和Yn-1 的LCS,长者是X和Y的LCS。 令Ci,j=Xi与Yj的LCS的长度,则

20、0 if i=0或j=0 Ci,j= Ci-1,j-1+1 if i,j0 and xi=yj Max(Ci,j-1,Ci-1,j) if i,j0 and xiyj4.4.4 LCS长度的计算 1基本思想 计算Ci,j需先计算Ci-1,j-1、Ci,j-1、Ci-1,jCi-1,j-1Ci-1,jCi,j-1Ci,j 先计算出第0行与第0列,然后逐行计算。 2算法 数据结构 C0:m,0:n: Ci,j是Xi与Yj的LCS的长度 B1:m,1:n: Bi,j是指针,指向计算Ci,j时所选择的 子问题的优化解所对应的C表的表项。 算法 LCS-length(x,y) mlength(x);nl

21、ength(y); For i1 To m Do Ci,00; For j1 To n Do C0,j0; For i1 To m Do For j1 To n Do If xi=yj Then Ci,jCi-1,j-1+1;Bi,j“”; Else If Ci-1,jCi,j-1 Then Ci,jCi-1,j; Bi,j“”; Else Ci,jCi,j-1; Bi,j“”; Return C and B.4.4.5.构选优化解-LCS 1. 基本思想 从Bm,n开始按指针搜索, 若Bi,j=“”,则xi=yj是LCS的一个元素。如此找到的“LCS”是X与Y的LCS的Inverse。2算法

22、Print-LCS(B,X,i,j) IF i=0 or j=0 THEN Return; IF Bi,j=“”THEN Print-LCS(B,X,i-1,j-1); Print xi; ELSE If Bi,j=“”THEN Print-LCS(B,X,i-1,j); ELSE Print-LCS(B,X,i,j-1). *Print-LCS(B,X,length(X),length(Y)可打印出x与y的LCS。 例2.I j01234567BDCABA000000001A00001112B01111223C01122224B01122335D01222336A01223347B01223

23、444.5 优化的多边形三角4.5.1. 基本概念 多边形:一个多边形可以表示为顶点坐标的集合P=(v0,v1,.vn+1)或顶点序列 v0v1,.vn-1vn。 定义1.一个多边形是简单的如果除了顶点以外没有任何边交叉点。 定义2.平面上由多边形封闭的点集合称为多边形的内部,多边形上的点集合称为多边形的边界,平面上除多边形内部和边界以外的点集合称为多边形的外部。 定义3.设P是一个多边形。若P的边界或内部的任意两点的连线上的所有点都在P的内部或边界上,则称P是凸多边形。 定义4.多边形P上的任意两个不相邻结点vi、vi+1所对应的 线段vivi+1称为弦。 定义5.(三角剖分) 一个多边形P

24、的三角剖分是将P划分为不相交三角形的弦的集合。 定义6.(优化三角剖分问题) 设S是由多边形P的边和弦构成的三角形集合,W是S上的代价函数。优化三角剖分问题定义为: 输入:多边形P和代价函数W 输出:求一个P的三角分T,使得最小,其中ST是T 所对应的三角形集合。4.5.2 优化三角分的结构分析 设P=(v0,v1,.vn)是n+1点的多边形, Tx是X的优化三角剖分, 则 TP=T(v0, ., vk)T(vk+1, ., vn)v0vk,vkvn4.5.3 优化三角剖分的代价函数 代价函数 设ti,j=的优化三角剖分的代价,则: ti,i=tj,j=0 ti,j= minjkj-1ti,k+tk+1,j+w(vi-1vkvj). 算法 与矩阵链乘法问题一致,把Matrix-chain-Order和Matrix- chain-Multiply 算法略加修改即可计算ti,j并构造优化 三角剖分解。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1