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

[算法之美] KMP算法的直观理解

时间:2017-07-03 19:55:04      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:固定   pattern   子串   例子   效率   相同   kmp算法   ababc   位置   

  KMP算法是解决字符串匹配问题的,简单说来,其实就是问“P串(Pattern串)是不是T串(Text串)的子串,如果是的话就回答子串在P中的起始位置(即Index函数的返回值)”。

  穷举的算法是摆好T串并固定,然后手拿着P串一个一个比对。(我们假设i是指向T串的,j是指向P串的)

  现在我们拿着P串,看它的第1个字符和T串的第1个字符是不是相同的,是的话就看它的第2个字符和T串的第2个字符是不是相同的……不是的话就把P串右移一格,然后{

    看P串的第1个和T串的第2个是不是相同的,是的话就看它的第2个和T串的第3个是不是相同的……不是相同的话就把P串右移一格,然后

    看P串的第一个和T串的第二个是不是相同的,是的话就看它的第二个和T串的第三个是不是相同的……不是相同的话就把P串右移一格,循环往复。

 

    直到P串的最后一个字符也和T串相同时结束,此时(i-P串长度)就是子串在P中的起始位置。

 

  而这种方法效率是很低的,主要是每次一有不匹配的情况就只能右移1格然后从P串的第一个开始重新比较。

  KMP就是为了解决这样低效率的问题的。我们看这样一个例子:

        T串是:ababaab

        P串是:ababc

  

[算法之美] KMP算法的直观理解

标签:固定   pattern   子串   例子   效率   相同   kmp算法   ababc   位置   

原文地址:http://www.cnblogs.com/G-M-WuJieMatrix/p/7112671.html

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