严蔚敏数据结构kmp算法详解.ppt
《严蔚敏数据结构kmp算法详解.ppt》由会员分享,可在线阅读,更多相关《严蔚敏数据结构kmp算法详解.ppt(18页珍藏版)》请在优知文库上搜索。
1、 4.3.2 KMP 4.3.2 KMP算法算法 KMP算法是算法是D.E.Knuth、J.H.Morris和和V.R.Pratt共同提出的共同提出的,简称简称KMP算法。该算法较算法。该算法较BF算法有较算法有较大改进大改进,主要是消除了主串指针的回溯主要是消除了主串指针的回溯,从而使算法效从而使算法效率有了某种程度的提高。率有了某种程度的提高。 所谓所谓真子串真子串是指模式串是指模式串t存在某个存在某个k(0kj),使,使得得t0t1tk = tj-ktj-k+1tj 成立。成立。 例如,例如,t= abab, 即即t0t1t2t3 也就是说,也就是说, “ab”是真子串。是真子串。 真子
2、串就是模式串中隐藏的信息,利用它来提高真子串就是模式串中隐藏的信息,利用它来提高模式匹配的效率。模式匹配的效率。 一般情况一般情况:设主串设主串s=s0s1sn-1,模式模式t=t0t1tm-1,在进行第在进行第i趟匹配时,出现以下情况:趟匹配时,出现以下情况:这时,应有这时,应有t0t1tj-1=si-jsi-j+1si-1 (4.1)如果在模式如果在模式t中,中,t0t1tj-1t1t2tj (4.2) s: s0 s1 si-j si-j+1 si-1 si si+1 sn-1 t: t0 t1 tj-1 tj tj+1 sm-1 则回溯到则回溯到si-j+1开始与开始与t匹配,必然匹配
3、,必然“失配失配”,理由,理由很简单:由很简单:由(4.1)式和式和(4.2)式综合可知:式综合可知:t0t1tj-1si-j+1si-j+2si 既然如此,回溯到既然如此,回溯到si-j+1开始与开始与t匹配可以不做。那匹配可以不做。那么,回溯到么,回溯到si-j+2开始与开始与t匹配又怎么样?从上面推理匹配又怎么样?从上面推理可知,如果可知,如果 t0t1tj-2t2t3tj仍然有仍然有 t0t1tj-2si-j+2si-j+3si 这样的比较仍然这样的比较仍然“失配失配”。依此类推,直到对于。依此类推,直到对于某一个值某一个值k,使得:,使得: t0t1tk-2 tj-k+1tj-k+2
4、tj-1 且且 t0t1tk-1=tj-ktj-k+1tj-1“才有才有 tj-ktj-k+1tj-1=si-ksi-k+1si-1=t0t1tk-1 说明下一次可直接比较说明下一次可直接比较si和和tk,这样,我们可以,这样,我们可以直接把第直接把第i趟比较趟比较“失配失配”时的模式时的模式t从当前位置直从当前位置直接右滑接右滑j-k位。而这里的位。而这里的k即为即为nextj。 s: s0 s1 si-j si-j+1 si-k si-k+1 si-1 si si+1 sn-1 t: t0 t1 tk-1 tk tj-1 tj tj+1 sm-1 s: s0 s1 si-j si-j+1
5、si-k si-k+1 si-1 si si+1 sn-1 t: t0 t1 tk-1 tk tj-1 tj tj+1 sm-1 t 右滑右滑 j-k 位位 例如例如t=abab,由于由于t0t1 =t2t3(这里这里k=1,j=3),则则存在真子串。设存在真子串。设s=abacabab,t=abab,第一次匹第一次匹配过程如下所示。配过程如下所示。 第第 1 次匹配次匹配 s=a b a c a b a b i=3 t=a b a b j=3 失败 此时不必从此时不必从i=1(i=i-j+1=1),j=0重新开始第二次匹重新开始第二次匹配。因配。因t0t1,s1=t1,必有必有s1t0,又因
6、又因t0 =t2,s2=t2,所以必有所以必有s2=t0。因此。因此,第二次匹配可直接从第二次匹配可直接从i=3,j=1开始。开始。 为此为此,定义定义nextj函数如下函数如下: maxk|0kj,且且“t0t1tk-1”=“tj-ktj-k+1tj-1” 当此集合非空时当此集合非空时 -1 当当j=0时时 0 其他情况其他情况nextj=j0123tjababnextj-1001t=“ababt=“abab”对应的对应的nextnext数组如下数组如下:void GetNext(SqString t,int next) int j,k; j=0;k=-1;next0=-1; while (
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 严蔚敏 数据结构 kmp 算法 详解
