- 1
- 0
- 约1.8千字
- 约 5页
- 2015-08-15 发布于湖北
- 举报
KMP字符串(DOC可编).doc
KMP算法过程
KMP,也就是字符串的匹配算法,这个KMP不是电脑上的那种播放器,KMP是D.E.Knuth与V.R.Pratt和J.H.Morris 我们来看看KMP是怎么工作的。我们用两个指针i和j分别表示,A[i-j+ 1..i]与B[1..j]完全相等。
也就是说,i是不断增加的,随着i的增加j相应地变化,且j满足以A[i]结尾的长度为j的字符串正好匹配B串的前 j个字符(j当然越大越好),现在需要检验A[i+1]和B[j+1]的关系。当A[i+1]=B[j+1]时,i和j各加一;
什么时候j=m了,我们就说B是A的子串(B串已经整完了),并且可以根据这时的i值算出匹配的位置。当A[i+1]B[j+1],KMP的策略是调整j的位置(减小j值)使得A[i-j+1..i]与B[1..j]保持匹配且新的B[j+1]恰好与A[i+1]匹配(从而使得i和j能继续增加)。
注:蓝色段落转自
OK,模拟KMP算法过程!
A[]=abcaabababaca
B[]=ababc
(本来想写成Pascal格式的,但是写了之后还是觉得C语言的形式比较好写,将就着看吧)
在这看来,这个一对字符串是没有匹配位置的,这都不管,能匹配的话大家都能看出,我们这要的是遇到那些不能匹配的时候的过程
初始化状态...
在这里,我们要做的第一个条件是求出NEXT指针,这个NEXT指针是在子串上做的,就是子串的自匹
原创力文档

文档评论(0)