浅谈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串一个“自我匹配”的过程。预处理和烤的都是馍片能不像吗
于是美味的馍片就烤好了
一不小心好像烤糊了
推荐例题の传送门:
洛谷P4391 [BOI2009]Radio Transmission 无线传输
本文部分图片来源于网络
部分内容参考《信息学奥赛一本通.提高篇》第二部分第二章 KMP算法
若需转载,请注明https://www.cnblogs.com/llllllpppppp/p/9371218.html
~祝大家编程顺利~
相关文章推荐
- 浅谈字符串匹配的KMP算法
- 浅谈KMP算法——Chemist
- 浅谈KMP算法
- 浅谈KMP算法
- 浅谈KMP算法
- 浅谈扩展KMP算法
- 浅谈kmp算法
- 浅谈KMP算法
- 浅谈KMP算法及实现
- BZOJ 3670 浅谈KMP算法的拓展应用
- 浅谈字符串匹配算法—BF算法及KMP算法
- 浅谈KMP算法的延伸
- 浅谈WordPress的五大搜索优化功能
- 管理是什么——浅谈开发经理的管理
- 浅谈Set集合类
- 浅谈Jmeter之中文乱码问题解决方法
- 浅谈Java中的final,finally以及finalize
- 浅谈Android解决65535问题的方法
- 浅谈任务分解
- 浅谈Android五大布局—LinearLayout、FrameLayout、AbsoulteLayout、RelativeLayout和TalbeLayout。