1.1 KMP所需要的解决的问题
KMP,是三个人名字的总和缩写.它主要解决的问题就是字符串匹配问题.即给出一个一定长度的字串和一个文本,要求你找出这个字串在文本中出现第一次的位置,然后字串和文本的长度可能很大.
如这样一个题:POJ-3461
题意大概就是找出第一个字符串在第二个字符串中出现次数.
1.2 传统暴力算法
暴力算法就是,通过暴力搜索,从第一个字母开始匹配.如果不匹配,那么就将整个字串往后移动一位.再重新进行匹配.这样的算法(On^2)显然在一些情况下复杂度会变得不可承受.但是我们通过理解可以发现,这个算法慢的主要原因就是因为当发现有字母不匹配时,就只能往后移动一位.然后KMP就是优化了这个往后跳的方式.以此达到优化时间的目的.
1.3 KMP算法的具体操作过程
先不说这个算法的原理,因为我就是先知道的操作过程,然后才大概理解的.
1.3.1 最长前后缀字串
我们引进一个概念,最长前后缀字串
如同这样一些字符串:
abccsab 它的最长前后缀字串就是 ab
abssc 它没有最长前后缀字串
aaaaa 它的最长前后缀字串是aaaa
1.3.2 next数组
我们首先需要进行这样一步操作.将这个字串分成