码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-02-05 23:23:44      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:基本操作   kmp算法   位置   问题   移动   操作   mp算法   class   文本   

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算法   位置   问题   移动   操作   mp算法   class   文本   

原文地址:https://www.cnblogs.com/Kv-Stalin/p/8419594.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!