您的位置:首页 > 其它

浅谈KMP算法

2017-06-09 14:52 239 查看
KMP算法用于解决一些比较简单的字符串匹配问题,在双文本比较中,效率是很高的

假设有两个字符串,一个为文本,一个为模板,我们要在文本中找到模板从头至尾匹配出来的字符串的开头



对于这次匹配,我们可以发现匹配点是6和l,从6开始,6,7,8,9可以和模板串匹配上,l,m,o,p可以和模板匹配上



有一个朴素的算法,我们可以for每个开始点,如果没有和模板匹配上就直接开始点后移,然后重复以上操作

朴素算法其实对于随机数据表现非常好

—-刘汝佳

那么KMP算法是什么呢?先用O(m)的时间预处理模板(其中m是模板的长度),然后再O(n)的时间内完成匹配

网上讲解KMP的博客不少,大家可以进行搜索,下面给出代码(233我好像根本没讲KMP,好嘛反正是浅谈)

getfail指针的操作

void getfail(char* P,int* f){
int m=strlen(P);
f[0]=0;f[1]=0;
for(register int i=0;i<m;i++){
int j=f[i];
while(j&&P[i]!=P[j]) j=f[j];
f[i+1]=P[i]==P[j]?j+1:0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: