十分钟搞定LCS.ppt

上传人:b****2 文档编号:2669295 上传时间:2022-11-06 格式:PPT 页数:21 大小:486KB
下载 相关 举报
十分钟搞定LCS.ppt_第1页
第1页 / 共21页
十分钟搞定LCS.ppt_第2页
第2页 / 共21页
十分钟搞定LCS.ppt_第3页
第3页 / 共21页
十分钟搞定LCS.ppt_第4页
第4页 / 共21页
十分钟搞定LCS.ppt_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

十分钟搞定LCS.ppt

《十分钟搞定LCS.ppt》由会员分享,可在线阅读,更多相关《十分钟搞定LCS.ppt(21页珍藏版)》请在冰豆网上搜索。

十分钟搞定LCS.ppt

十分钟搞定LCS2/主要内容oLCS的定义o暴力求解LCSo分析LCS的性质n导出LCS的递推公式o实现算法涉及的数据结构o降低LCS空间复杂度的方法oLCS的多解性oLCS的应用3/LCS的定义o最长公共子序列,即LongestCommonSubsequence,LCS。

o一个序列S任意删除若干个字符得到新序列T,则T叫做S的子序列;o两个序列X和Y的公共子序列中,长度最长的那个,定义为X和Y的最长公共子序列。

n字符串13455与245576的最长公共子序列为455n字符串acdfg与adfc的最长公共子序列为adfo注意区别最长公共子串(LongestCommonSubstring)n最长公共字串要求连续4/LCS的意义o求两个序列中最长的公共子序列算法,广泛的应用在图形相似处理、媒体流的相似比较、计算生物学方面。

生物学家常常利用该算法进行基因序列比对,由此推测序列的结构、功能和演化过程。

oLCS可以描述两段文字之间的“相似度”,即它们的雷同程度,从而能够用来辨别抄袭。

另一方面,对一段文字进行修改之后,计算改动前后文字的最长公共子序列,将除此子序列外的部分提取出来,这种方法判断修改的部分,往往十分准确。

简而言之,百度知道、百度百科都用得上。

5/暴力求解:

穷举法o假定字符串X,Y的长度分别为m,n;oX的一个子序列即下标序列1,2,m的严格递增子序列,因此,X共有2m个不同子序列;同理,Y有2n个不同子序列,从而穷举搜索法需要指数时间O(2m.2n);o对X的每一个子序列,检查它是否也是Y的子序列,从而确定它是否为X和Y的公共子序列,并且在检查过程中选出最长的公共子序列;o显然,不可取。

6/LCS的记号o字符串X,长度为m,从1开始数;o字符串Y,长度为n,从1开始数;oXi=x1,xi即X序列的前i个字符(1im)(Xi不妨读作“字符串X的i前缀”)oYj=y1,yj即Y序列的前j个字符(1jn)(字符串Y的j前缀);oLCS(X,Y)为字符串X和Y的最长公共子序列,即为Z=z1,zk。

n注:

不严格的表述。

事实上,X和Y的可能存在多个子串,长度相同并且最大,因此,LCS(X,Y)严格的说,是个字符串集合。

即:

ZLCS(X,Y).7/LCS解法的探索:

xm=yno若xm=yn(最后一个字符相同),则:

Xm与Yn的最长公共子序列Zk的最后一个字符必定为xm(=yn)。

nzk=xm=ynnLCS(Xm,Yn)=LCS(Xm-1,Yn-1)+xm8/结尾字符相等,则LCS(Xm,Yn)=LCS(Xm-1,Yn-1)+xmo记LCS(Xm,Yn)=W+xm,则W是Xm-1的子序列;同理,W是Yn-1的子序列;因此,W是Xm-1和Yn-1的公共子序列。

n反证:

若W不是Xm-1和Yn-1的最长公共子序列,不妨记LCS(Xm-1,Yn-1)=W,且|W|W|;那么,将W换成W,得到更长的LCS(Xm,Yn)=Wxm,与题设矛盾。

9/举例:

xm=yn1234567XBDCABAYABCBDABu对于上面的字符串X和Y:

ux3=y3=C,则:

LCS(BDC,ABC)=LCS(BD,AB)+Cux5=y4=B,则:

LCS(BDCAB,ABCB)=LCS(BDCA,ABC)+B10/LCS解法的探索:

xmyno若xmyn,则:

要么LCS(Xm,Yn)=LCS(Xm-1,Yn),要么LCS(Xm,Yn)=LCS(Xm,Yn-1)。

o证明:

令Zk=LCS(Xm,Yn);由于xmyn则zkxm与zkyn至少有一个必然成立,不妨假定zkxm(zkyn的分析与之类似)。

n因为zkxm,则最长公共子序列Zk是Xm-1和Yn得到的,即:

Zk=LCS(Xm-1,Yn)n同理,若zkyn,则Zk=LCS(Xm,Yn-1)o即,若xmyn,则:

nLCS(Xm,Yn)=maxLCS(Xm-1,Yn),LCS(Xm,Yn-1)11/举例:

xmyn1234567XBDCABAYABCBDABu对于字符串X和Y:

ux2y2,则:

LCS(BD,AB)=maxLCS(BD,A),LCS(B,AB)ux4y5,则:

LCS(BDCA,ABCBD)=maxLCS(BDCA,ABCB),LCS(BDC,ABCBD)12/LCS分析总结o显然,属于动态规划问题。

13/算法中的数据结构:

长度数组o使用二维数组Cm,noci,j记录序列Xi和Yj的最长公共子序列的长度。

n当i=0或j=0时,空序列是Xi和Yj的最长公共子序列,故ci,j=0。

14/算法中的数据结构:

方向变量o使用二维数据Bm,n,其中,bi,j标记ci,j的值是由哪一个子问题的解达到的。

即ci,j是由ci-1,j-1+1或者ci-1,j或者ci,j-1的哪一个得到的。

取值范围为Left,Top,LeftTop三种情况。

15/实例oX=oY=16/计算LCS长度17/根据b提供的方向,构造最长公共子序列18/进一步思考的问题o方向数组b是完全可以省略的:

n数组元素ci,j的值仅由ci-1,j-1,ci-1,j和ci,j-1三个值之一确定,因此,在计算中,可以临时判断ci,j的值是由ci-1,j-1,ci-1,j和ci,j-1中哪一个数值元素所确定,代价是

(1)时间。

o若只计算LCS的长度,则空间复杂度为min(m,n)。

n在计算ci,j时,只用到数组c的第i行和第i-1行。

因此,只要用2行的数组空间就可以计算出最长公共子序列的长度。

19/最大公共子序列的多解性:

求所有的LCSo当xmyn时:

若LCS(Xm-1,Yn)=LCS(Xm,Yn-1),会导致多解:

有多个最长公共子序列,并且它们的长度相等。

oB的取值范围从1,2,3扩展到1,2,3,4o广度优先遍历20/LCS的应用:

最长递增子序列LISoLongestIncreasingSubsequenceo给定一个长度为N的数组,找出一个最长的单调递增子序列。

o例如:

给定数组5,6,7,1,2,8,则其最长的单调递增子序列为5,6,7,8,长度为4。

n分析:

其实此LIS问题可以转换成最长公子序列问题,为什么呢?

21/使用LCS解LIS问题o原数组为A5,6,7,1,2,8o排序后:

A1,2,5,6,7,8o因为,原数组A的子序列顺序保持不变,而且排序后A本身就是递增的,这样,就保证了两序列的最长公共子序列的递增特性。

如此,若想求数组A的最长递增子序列,其实就是求数组A与它的排序数组A的最长公共子序列。

n此外,本题也可以直接使用动态规划来求解

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

当前位置:首页 > 高中教育 > 英语

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

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