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

kmp算法

时间:2018-06-16 15:12:22      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:ref   因此   快速   目的   数组   href   利用   next   tps   

  KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。

  设主串(下文中我们称作T)为:a b a c a a b a c a b a c a b a a b b
  模式串(下文中我们称作W)为:a b a c a b

  在native朴素匹配算法中,遍历T的每个位置,对每个位置逐个比较T[i]与W[j],这样的算法效率比较低。kmp算法通过寻找W中的重复信息,不是遍历每个T的位置,在一次位置匹配中跳出,下次匹配位置可以根据这次匹配信息跳过几步,而不是简单的i++,这里跳过多少步就是用next[]数组表示,数组长度等于W的长度。

  用法:求next[]数组,next数组中k位置的值next[k]等于W[0:k]中包含的最长相同子串

 

kmp算法

标签:ref   因此   快速   目的   数组   href   利用   next   tps   

原文地址:https://www.cnblogs.com/undefined-name/p/9190442.html

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