KMP算法的基本操作和自我理解

Posted kv-stalin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KMP算法的基本操作和自我理解相关的知识,希望对你有一定的参考价值。

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数组

  我们首先需要进行这样一步操作.将这个字串分成

  

 

以上是关于KMP算法的基本操作和自我理解的主要内容,如果未能解决你的问题,请参考以下文章

KMP的自我理解

理解kmp算法

数据结构关于串的KMP算法的理解高手请进

KMP算法和LPS表构建的运行时间

KMP算法解析(转自图灵社区)

KMP