扩展KMP算法.ppt
《扩展KMP算法.ppt》由会员分享,可在线阅读,更多相关《扩展KMP算法.ppt(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、扩展的扩展的KMP算法算法刘雅刘雅琼 【扩展的扩展的KMPKMP算法算法】扩扩展的展的KMPKMP问题问题:给定母串S,和子串T。定义n=|S|,m=|T|,extendi=Si.n与T的最长公共前缀长度。请在线性的时间复杂度内,求出所有的extend1.n。容易发现,如果有某个位置i满足extendi=m,那么T就肯定在S中出现过,并且进一步知道出现首位置是i而这正是经典的KMP问题。因此可见“扩展的KMP问题”是对经典KMP问题的一个扩充和加难。例子 S=aaaaaaaaaabaaa,T=aaaaaaaaaaa。extend2=9。为了计算extend2,我们是不是也要进行10次比较运算呢
2、?不然。因为通过计算extend1=10,我们可以得到这样的信息:S1.10=T1.10 S2.10=T2.10。计算extend2的时候,实际上是S2开始匹配T。因为S2.10=T2.10,所以在匹配的开头阶段是“以T2.10为母串,T为子串”的匹配。设辅助函数nexti表示Ti.m与T的最长公共前缀长度。对上述例子,next2=10。也就是说:T2.11=T1.10 T2.10=T1.9 S2.10=T1.9。这就是说前9位的比较是完全可以避免的!我们直接从S11T10开始比较。这时候一比较就发现失配,因此extend2=9。下面提出一般的算法。设extend1.k已经算好,并且在以前的匹
3、配过程中到达的最远位置是p。最远位置严格的说就是i+extendi-1的最大值,其中i=1,2,3,k;不妨设这个取最大值的i是a。(下图黄色表示已经求出来了extend的位置)第一种情况第一种情况第二种情况第二种情况整个算法描述结束。上述算法是线性线性算法。原因如下:容易看出,在计算的过程中,凡是访问过的点,都不需要重新访问了。一旦比较,都是比较以前从不曾探访过的点开始。因此总的时间复杂度是O(n+m),是线性的。如何求解如何求解nextnext数组数组还剩下一个问题:next这个辅助数组怎么计算?复杂度是多少?我们发现计算next实际上以实际上以T为母串、为母串、T为子串的一个特殊为子串的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 扩展 KMP 算法
限制150内