您的位置:首页 > 其它

浅谈KMP算法

2018-07-26 16:05 507 查看

 

一、介绍

烤馍片KMP算法是用来处理字符串匹配问题的。比如说给你两个字符串A,B,问B是不是A的子串?

比如,eg就是aeggx的子串

一般讲字符串A称为主串,用来匹配的B串称为模式串

 定义n为字符串A的长度,m为字符串B的长度(m≤n)

如果用暴力枚举法,时间复杂度为O(NM)

而KMP算法的时间复杂度在最坏的情况下为O(N),十分搞笑高效

//这里数组从1开始
p[1]=j=0;
for(i=1;i<m;i++)
{
while(j>0 && b[i+1]!=b[j+1]) j=nxt[j];//j未减小到0且不能继续匹配,退一步
if(b[i+1]==b[j+1]) j++;//能继续匹配,j的值增加
//若j==0仍不能匹配,由于循环i的值会自动增加
nxt[i+1]=j;//nxt数组赋值
}
这是代码3  有没有觉得预处理和匹配的代码很像?因为预处理的过程其实就是B串一个“自我匹配”的过程。预处理和烤的都是馍片能不像吗

于是美味的馍片就烤好了

 

一不小心好像烤糊了

 

推荐例题の传送门:

洛谷P3375 【模板】KMP字符串匹配 

洛谷UVA10298 Power Strings 

洛谷P4391 [BOI2009]Radio Transmission 无线传输 

 

本文部分图片来源于网络

部分内容参考《信息学奥赛一本通.提高篇》第二部分第二章 KMP算法

若需转载,请注明https://www.cnblogs.com/llllllpppppp/p/9371218.html

 

~祝大家编程顺利~

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: