动态规划 近似串匹配.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《动态规划 近似串匹配.ppt》由用户(hyngb9260)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 动态规划 近似串匹配 动态 规划 近似 匹配
- 资源描述:
-
1、1计算机算法计算机算法设计与分析导论设计与分析导论南开大学南开大学 计算机科学与技术系计算机科学与技术系刘璟2v 7.1 动态规划的基本原理动态规划的基本原理v 7.2 最优二分搜索树最优二分搜索树(Optimal Binary Search Tree)v 7.3 近似串匹配近似串匹配(Approximate String Matching)问题问题37.1 动态规划的基本原理动态规划的基本原理v7.1.1 Fibonacci数的计算数的计算 Fibonacci数又称为数又称为Fibonacci数列,定义为:数列,定义为:F0=0,F1=1,Fn=Fn-1+Fn-2(n 2)计算计算Fibon
2、acci数列可由递归函数数列可由递归函数fibo完成。完成。递归函数递归函数fibo 由此可知,函数由此可知,函数fibo的计算量随的计算量随n的增加而急剧增加,的增加而急剧增加,n=6时时需需25次调用,次调用,n=10时需时需177次调用,次调用,n=15时需时需1974次调用。次调用。进一步的研究表明,调用次数进一步的研究表明,调用次数 An=2Fn+1-1,其中,其中 ,。可以估计,可以估计,其计算量是,其计算量是n的指数函数。的指数函数。)(nnF 618.1)15(21 )2()(/2 nnAnT 4从从Fig.7.1中可以看出,大量的调用过程是重复的,此算法可中可以看出,大量的调
3、用过程是重复的,此算法可以改进。以改进。函数函数fibo的改进函数的改进函数fib这个程序的时间代价为这个程序的时间代价为O(n)阶。阶。5v7.1.2 矩阵连乘的顺序问题矩阵连乘的顺序问题 1.一个实例一个实例四个矩阵四个矩阵A1、A2、A3、A4相乘,设其阶数分别为相乘,设其阶数分别为A1:301,A2:140,A3:4010,A4:1025。因为矩阵相乘满足结合因为矩阵相乘满足结合律律,所以可有下面五种(实际为六种)所以可有下面五种(实际为六种)不同的运算次序,而且不同的运算次序所需的元素间乘法的不同的运算次序,而且不同的运算次序所需的元素间乘法的次数不同,如下面所列:次数不同,如下面所
4、列:(A1 A2)A3)A4 30140+304010+301025=20700(A1 A2)(A3 A4)30140+401025+304025=41200(A1(A2 A3)A4 14010+30110+301025=8200A1(A2 A3)A4)14010+11025+30125=1400A1(A2(A3 A4)401025+14025+30125=117506五种运算次序的计算结果相同,但所花费的时间代价相差极五种运算次序的计算结果相同,但所花费的时间代价相差极大。如果某一应用问题需要经常进行矩阵连乘运算,应首先大。如果某一应用问题需要经常进行矩阵连乘运算,应首先确定最优的矩阵连乘的
5、次序。确定最优的矩阵连乘的次序。2.最优矩阵连乘次序(最优矩阵连乘次序(Optimal Matrix Multiplication Order)问题问题给定给定n个矩阵个矩阵A1,A2,.,An的维数为的维数为d0,d1,d2,.,dn,即:即:Ai的维数的维数为为di-1di(1in)。求一种连乘次序,使得计算时所需的元素求一种连乘次序,使得计算时所需的元素乘法的总数最少。乘法的总数最少。3.算法的思路算法的思路如同上面实例中所做的那样,把所有可能的运算次序所需的如同上面实例中所做的那样,把所有可能的运算次序所需的计算量全计算出来,选择最小者,这种方法称为穷举法。不计算量全计算出来,选择最小
6、者,这种方法称为穷举法。不过,当过,当n值较大时,这种方法的计算量过高。值较大时,这种方法的计算量过高。n个矩阵相乘应个矩阵相乘应有(有(n-1)!)!种不同的运算次序,计算每种运算次序所需的时种不同的运算次序,计算每种运算次序所需的时间代价需要间代价需要2(n-1)次乘法和次乘法和n-2次加法运算。当次加法运算。当n=11时需要时需要7257.6万次乘法万次乘法。7由于由于不能事先决定最初在何处进行划分,所以分治策略难以不能事先决定最初在何处进行划分,所以分治策略难以解决这个问题。解决这个问题。但但这个问题满足最优子结构性质:即,当选这个问题满足最优子结构性质:即,当选择了进行最外层相乘的位
7、置之后,其左右两边的矩阵相乘序择了进行最外层相乘的位置之后,其左右两边的矩阵相乘序列都必须是时间代价最小的,可以考虑采用贪心策略。列都必须是时间代价最小的,可以考虑采用贪心策略。一种使用贪心策略的解决方法是:每次优先选择其相乘代价一种使用贪心策略的解决方法是:每次优先选择其相乘代价最小的两个矩阵。例如在本实例中,最小的两个矩阵。例如在本实例中,A1A2A3A4有三个可能有三个可能的相邻矩阵乘积,其中的相邻矩阵乘积,其中A2A3的代价的代价400为最小。那么首先完为最小。那么首先完成成A2A3,在余下的两个可能的相邻矩阵乘积中:在余下的两个可能的相邻矩阵乘积中:30110和和11025相比较,后
8、者较小。于是得到的解为相比较,后者较小。于是得到的解为A1(A2 A3)A4),与穷举法的最优结果一致。不过该贪心策略不能保证得与穷举法的最优结果一致。不过该贪心策略不能保证得到最优解。例如反例:到最优解。例如反例:矩阵矩阵A、B、C,维数分别为:维数分别为:401,120,2050,(AB)C 40120+402050=40800 A(BC)12050+40150=30008另外一种采用贪心策略的方法是,对于另外一种采用贪心策略的方法是,对于n个矩阵个矩阵A1.An的维数的维数序列序列d0.dn,每次从每次从d1.dn-1中取最大值中取最大值di,首先进行首先进行Ai与与Ai+1的乘法使最大
9、的维数仅参加一次乘法运算,这样做有可能有的乘法使最大的维数仅参加一次乘法运算,这样做有可能有利于减少矩阵连乘的计算量。使用这一策略,对上面的两个利于减少矩阵连乘的计算量。使用这一策略,对上面的两个简单实例进行计算,其结果都是正确的。但是这个贪心算法简单实例进行计算,其结果都是正确的。但是这个贪心算法仍然不能总是找出最优解。仍然不能总是找出最优解。可以从可以从Fibonacci数的计算得到启发,采用动态规划的方法设数的计算得到启发,采用动态规划的方法设计算法。最简单的递归算法描述如下:计算法。最简单的递归算法描述如下:递归算法递归算法MinCost nknkdddnkMinCostkMinCos
10、tnnMinCost01,1,1min1,0,19此算法的递归过程中,存在与此算法的递归过程中,存在与fibo函数相似的地方,即会有大函数相似的地方,即会有大量的重复调用,其调用关系如量的重复调用,其调用关系如Fig7.2所示,其中所示,其中n=4。10递归函数递归函数MinCost的调用过程在的调用过程在n=4时共时共27次,次,n=5时为时为81次,次,n=6时为时为249次,当次,当n增大时,计算量急剧增加。如果采用自底增大时,计算量急剧增加。如果采用自底向上的计算方式,函数向上的计算方式,函数MinCost(1,n)的计算代价将大大减少。的计算代价将大大减少。其计算过程为:其计算过程为
11、:MinCost(1,1)=MinCost(2,2)=MinCost(3,3)=MinCost(4,4)=0MinCost(1,2)=MinCost(1,1)+MinCost(2,2)+d0d1d2=30140=1200类似地,类似地,Mincost(2,3)=d1d2d3=14010=400;Mincost(3,4)=d2d3d4=401025=10000;在第二步计算在第二步计算MinCost(1,3)和和MinCost(2,4),最后计算最后计算MinCost(1,4)。由此可以看出,由此可以看出,n=4时函数时函数MinCost(1,4)的计算量是的计算量是4+3+2+1=10次,次,
12、n=5时为时为15次,次,n=6时为时为21次。次。114.矩阵连乘的矩阵连乘的DP算法算法设矩阵个数为设矩阵个数为n,维数为维数为dimn+1(n+1个值),同时用数组个值),同时用数组MultiOrdern保存程序运行时得到的最优乘法顺序,可得:保存程序运行时得到的最优乘法顺序,可得:算法算法7.1 最优矩阵连乘算法最优矩阵连乘算法 MatrixOrder 函数函数MatrixOrder返回最优连乘次序所需的最小时间代价,同返回最优连乘次序所需的最小时间代价,同时将最优次序保存在数组时将最优次序保存在数组MultiOrder中,从此数组中得到最中,从此数组中得到最优乘法次序的算法为:优乘法
13、次序的算法为:ExtractOrder 用上述算法计算本节给出的实例,其结果为:用上述算法计算本节给出的实例,其结果为:最小代价为最小代价为cost0n=1400,最优乘法次序最优乘法次序MultiOrder1.3=2,3,1,即即A1(A2A3)A4)。*0*100000*6504000*140070012000*cos t *1*31*321*1111*last12v7.1.3 动态规划(动态规划(DP)算法的基本条件)算法的基本条件 1.最优子结构性质最优子结构性质最优化原理。最优化原理。其特征是:当要求一个问题的最优解时,构成其特征是:当要求一个问题的最优解时,构成整体解的子问题的解也
14、必须是最优的。整体解的子问题的解也必须是最优的。例如,例如,为了使计算为了使计算n个个矩阵连乘矩阵连乘A1A2.An的代价最小,无论最后一次乘法的位置的代价最小,无论最后一次乘法的位置k在何处(在何处(1kn),),其左右两部分其左右两部分A1.Ak,Ak+1.An的乘积的乘积也必须是代价最小的。这也可用最短路径问题来说明:若也必须是代价最小的。这也可用最短路径问题来说明:若V1V2.Vn是一条从是一条从V1到到Vn的最短路径,那么这条路径的任何的最短路径,那么这条路径的任何一段,比如从一段,比如从Vi到到Vj(1ijn)也必须是一条最短路径。也必须是一条最短路径。2.子结构重迭性质子结构重迭
15、性质 简单的递归程序解法都是一种自顶向下进行递归分解的过程,简单的递归程序解法都是一种自顶向下进行递归分解的过程,其中包含了大量的重复调用,在这种情况下采用动态规划方其中包含了大量的重复调用,在这种情况下采用动态规划方法特别有效。因此,问题法特别有效。因此,问题中中这种这种子结构重迭性质子结构重迭性质是采用动态是采用动态规划方法的另一个条件。动态规划算法的一个特征是自底向规划方法的另一个条件。动态规划算法的一个特征是自底向上,它可以大幅度减少计算代价。上,它可以大幅度减少计算代价。13解决这类具有子结构重迭性质的问题还有另外一种被称为解决这类具有子结构重迭性质的问题还有另外一种被称为备备忘录(
16、忘录(memorization)方法的自顶向下的递归方式。方法的自顶向下的递归方式。其思想是其思想是:由程序设置由程序设置“备忘录备忘录”,每计算出一个新的子结,每计算出一个新的子结构的解时,都保存起来。当遇到一次递归时,判断是否已经构的解时,都保存起来。当遇到一次递归时,判断是否已经计算,如果已经计算,只需取出先前保存的结果即可。这种计算,如果已经计算,只需取出先前保存的结果即可。这种方式与动态规划算法相比,要增加保存与检索中间结果的代方式与动态规划算法相比,要增加保存与检索中间结果的代价。价。算法算法7.2 求求Fibonacci数的备忘录算法数的备忘录算法 MemoFib 147.2 最
17、优二分搜索树最优二分搜索树(Optimal Binary Search Tree)v7.2.1 OBST问题问题 二分字典树是构造数据存储与检索系统的一种方便形式,例二分字典树是构造数据存储与检索系统的一种方便形式,例如一个翻译系统需要一个字典数据库。可以按照单词的字典如一个翻译系统需要一个字典数据库。可以按照单词的字典顺序构造一个二分搜索树,能获得较高的搜索效率。顺序构造一个二分搜索树,能获得较高的搜索效率。假定字典中只包含假定字典中只包含15个单词:个单词:and,cabbage,come,has,king,of,pig,ring,said,talk,the,thing,time,walr
18、us,wing。按照字典顺序插入显然形成一个退化的二分树即线性链表,按照字典顺序插入显然形成一个退化的二分树即线性链表,其平均搜索代价是其平均搜索代价是(1+15)/2=8次单词比较。次单词比较。15采用采用Fig7.3中的二分搜索树,最多仅需中的二分搜索树,最多仅需4次比较,平均需要次比较,平均需要(1+22+34+48)/15=3.17次比较,因此完全二分搜索树具次比较,因此完全二分搜索树具有最小的平均搜索代价。有最小的平均搜索代价。16在实用系统中,还要考虑到不同的单词在实际使用过程中被在实用系统中,还要考虑到不同的单词在实际使用过程中被搜索的概率不同,例如,搜索的概率不同,例如,and
19、、the等经常被搜索,而等经常被搜索,而pig、cabbage等则很少被搜索。因此若把等则很少被搜索。因此若把and、the放在树的最底层放在树的最底层必然增大词典的平均搜索代价,这时的必然增大词典的平均搜索代价,这时的平均搜索代价平均搜索代价应为:应为:即,二分搜索树即,二分搜索树T的平均搜索代价应为从根到各个单词节点在的平均搜索代价应为从根到各个单词节点在T中的路长中的路长Ci与其查找概率与其查找概率Pi乘积之和。当各个单词的查找概乘积之和。当各个单词的查找概率不同时,完全二分搜索树就不一定最优了。率不同时,完全二分搜索树就不一定最优了。例如,例如,假定词假定词典仅由典仅由4个单词个单词c
20、at、come、of、the组成,它们的查找概率分组成,它们的查找概率分别为:别为:cat:0.12,come:0.08,of:0.35,the:0.45 niiiCPTA1)(17由这四个单词可以组成许多种不同的二分字典树,由这四个单词可以组成许多种不同的二分字典树,Fig7.4中给中给出了其中的三个。出了其中的三个。按照上面给出的计算方法,三棵树(按照上面给出的计算方法,三棵树(a,b,c)的平均搜索代价的平均搜索代价分别为:分别为:(a)0.08+2(0.12+0.35)+30.45=2.37次比较;次比较;(a)0.35+2(0.08+0.45)+30.12=1.77次比较;次比较;(
21、a)0.35+2(0.12+0.45)+30.08=1.73次比较。次比较。18平均搜索代价的差别说明,不同的二分搜索树在一定的查找平均搜索代价的差别说明,不同的二分搜索树在一定的查找概率条件下,性能是不同的。概率条件下,性能是不同的。因此,在单词集合及其查找概因此,在单词集合及其查找概率给定的条件下,构造一个平均搜索代价最小的二分搜索树率给定的条件下,构造一个平均搜索代价最小的二分搜索树的意义是很明显的。的意义是很明显的。在实际问题中,还要考虑不成功的搜索在实际问题中,还要考虑不成功的搜索,即查找给定单词集,即查找给定单词集合之外的单词。合之外的单词。这时可以把二分搜索树加以扩充,例如这时可
22、以把二分搜索树加以扩充,例如Fig7.4Fig7.4中的中的(c)(c),可以为这棵,可以为这棵4 4个节点的树增加个节点的树增加5 5个外部节点,个外部节点,形成一棵新树,如形成一棵新树,如Fig7.5Fig7.5所示。所示。其中其中4 4个内部节点表示单词集个内部节点表示单词集的的4 4个单词,个单词,5 5个外部节点则表个外部节点则表示检索其它单词时不成功的搜示检索其它单词时不成功的搜索路径。例如:搜索单词索路径。例如:搜索单词asas,将到达最左边的外部节点,其将到达最左边的外部节点,其代价为两次比较。代价为两次比较。19最优二分搜索树(最优二分搜索树(OBST)问题可以描述为:问题可
23、以描述为:已知:已知:n个单词的查找概率个单词的查找概率p1,p2,.,pn和对应于和对应于n+1个外部个外部节点的不成功查找概率节点的不成功查找概率q0,q1,q2,.,qn,。求:构造一种二分搜索树求:构造一种二分搜索树T,使平均搜索代价使平均搜索代价A(T)最小。最小。解这个问题最简单的方法是把由解这个问题最简单的方法是把由n个单词(节点)组成的所有个单词(节点)组成的所有二分搜索树的平均搜索代价全算出来,取其最小者。不过,二分搜索树的平均搜索代价全算出来,取其最小者。不过,4个单词的二分搜索树有个单词的二分搜索树有14种,种,7个单词的二分搜索树有个单词的二分搜索树有429种种就可知道
24、,就可知道,n较大时,这种方法是根本行不通的。较大时,这种方法是根本行不通的。v7.2.2 动态规划算法的思路动态规划算法的思路设设n个单词为个单词为a1,a2,.,an,则由它们构成二分搜索树则由它们构成二分搜索树T1,n可以表可以表示为示为Fig7.6的形式。其中的形式。其中ak(1kn)为为T1,n的根,其左子树的根,其左子树T1,k-1由由a1.ak组成,右子树组成,右子树Tk+1,n由由ak+1.an组成。组成。101 niiniiqp20用代价函数用代价函数Cost(low,high)表示由表示由alow.ahigh及相应的外部节点及相应的外部节点blow-1,blow,.,bhi
25、gh组成的二分搜索树的最小代价。特别地,当组成的二分搜索树的最小代价。特别地,当high=low-1时表示空树,时表示空树,Cost(i,i-1)=0。Cost(low,high,r)表示指定以表示指定以ar为根时,组成的二分搜索树的最为根时,组成的二分搜索树的最小搜索代价。小搜索代价。如果如果T1,n是最优的,那么是最优的,那么T1,k-1,Tk+1,n两个子树也必然是最优的,两个子树也必然是最优的,因此,因此,该问题具有最优子结构该问题具有最优子结构性质性质;另一方面,单词序列中;另一方面,单词序列中任意几个相邻单词组成的子树任意几个相邻单词组成的子树将同时出现在多个包含它们的将同时出现在
展开阅读全文