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

理解kmp算法

时间:2020-04-05 22:07:42      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:margin   总结   color   技术   ima   size   das   问题   快速   

KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。

暴力匹配算法

    假设现在我们面临这样一个问题:有一个文本串S,和一个模式串P,现在要查找P在S中的位置,怎么查找呢?

    如果用暴力匹配的思路,并假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置,则有:

  • 如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配下一个字符;
  • 如果失配(即S[i]! = P[j]),令i = i - (j - 1),j = 0。相当于每次匹配失败时,i 回溯,j 被置为0。

kmp算法类似。

匹配的步骤:
技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 技术图片

 

 一直到匹配成功,或者没有匹配到结果。

简单的总结kmp的算法实现:

1。匹配字符串的字符是否匹配。如果匹配

                  匹配的字符串自身有匹配。有匹配多少的字符将意味这会享有移动的个数如:abad:abaj,移动2步

                  如果不存在,直接移动字符串已经匹配的个数如:absjg:abc,移动2步

2。向后移动一步

理解kmp算法

标签:margin   总结   color   技术   ima   size   das   问题   快速   

原文地址:https://www.cnblogs.com/topass123/p/12639228.html

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