关闭

KMP

44人阅读 评论(0) 收藏 举报
例如:  

                 1   2    3   4   5   6   7   8

   模式串    a   b    a   a   b   c    a    c 

   next值   0   1   1    2   2   3    1    2 

       next数组的求解方法是:第一位的next值为0,第二位的next值为1,后面求解每一位的next值时,根据前一位进行比较。首先将前一位与其next值对应的内容进行比较,如果相等,则该位的next值就是前一位的next值加上1;如果不等,向前继续寻找next值对应的内容来与前一位进行比较,直到找到某个位上内容的next值对应的内容与前一位相等为止,则这个位对应的值加上1即为需求的next值;如果找到第一位都没有找到与前一位相等的内容,那么需求的位上的next值即为1。 

       看起来很令人费解,利用上面的例子具体运算一遍。        

       1.前两位必定为0和1。 

       2.计算第三位的时候,看第二位b的next值,为1,则把b和1对应的a进行比较,不同,则第三位a的next的值为1,因为一直比到最前一位,都没有发生比较相同的现象。 
       3.计算第四位的时候,看第三位a的next值,为1,则把a和1对应的a进行比较,相同,则第四位a的next的值为第三位a的next值加上1。为2。因为是在第三位实现了其next值对应的值与第三位的值相同。 
       4.计算第五位的时候,看第四位a的next值,为2,则把a和2对应的b进行比较,不同,则再将b对应的next值1对应的a与第四位的a进行比较,相同,则第五位的next值为第二位b的next值加上1,为2。因为是在第二位实现了其next值对应的值与第四位的值相同。 
       5.计算第六位的时候,看第五位b的next值,为2,则把b和2对应的b进行比较,相同,则第六位c的next值为第五位b的next值加上1,为3,因为是在第五位实现了其next值对应的值与第五位相同。 
       6.计算第七位的时候,看第六位c的next值,为3,则把c和3对应的a进行比较,不同,则再把第3位a的next值1对应的a与第六位c比较,仍然不同,则第七位的next值为1。 
       7.计算第八位的时候,看第七位a的next值,为1,则把a和1对应的a进行比较,相同,则第八位c的next值为第七位a的next值加上1,为2,因为是在第七位和实现了其next值对应的值与第七位相同。
0
0
查看评论

KMP字符串查找

KMP算法 KMP字符串查找算法的目的是减少不必要的比较次数,举个简单的例子,从字符串A:"abcdeabcdfg"中查找字符串B:"abcdf"。 使用普通的查找法查找字符串的步骤是这样的: 先拿A[0:4]分别与B对应位置的字母比较,如果不相等则拿A[1:...
  • girlkoo
  • girlkoo
  • 2013-12-20 09:31
  • 4065

Oulipo 哈希代替KMP再做字符串处理

Oulipo Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 39845   Accepted: 16034 Description The ...
  • major_zhang
  • major_zhang
  • 2017-04-18 22:34
  • 385

hdu__KMP算法模板题【持续更新中】

剪花布条                                          ...
  • ACMore_Xiong
  • ACMore_Xiong
  • 2015-08-22 12:08
  • 3107

字符串匹配算法KMP详细解释——深入理解

1. 前言  字符串匹配是一个经典算法问题,展开来讲各类问题多达几十种,有名称的算法也不下三十种,所以需要深入学习的东西有很多。这次我们来探讨一个最简单的问题,假设现在随机输入一个长度为m的主串T,另外输入一个长度为n(n≤m)的字符串P,我们来判断字符串P是否是主串T的一个子串(即能否从T中随机取...
  • FX677588
  • FX677588
  • 2016-12-04 16:09
  • 3597

kmp习题大全

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=70325#overview kuangbin带你飞专题十六kmp&扩展kmp&manacher A. 题意:给T组数据,每组有长度为n和m的母串和模式串。判断模式串是否是母串...
  • qq_30241305
  • qq_30241305
  • 2016-02-19 20:28
  • 1525

扩展kmp详解

转自http://blog.csdn.net/dyx404514/article/details/41831947 算法总结第二弹,上次总结了下kmp,这次就来拓展kmp吧。 拓展kmp是对KMP算法的扩展,它解决如下问题: 定义母串S,和字串T,设S的长度为n,T的长度为m,求T与S的...
  • discreeter
  • discreeter
  • 2016-07-25 11:48
  • 3030

KMP入门(最详细最好用)

从头到尾彻底理解KMP 作者:July 时间:最初写于2011年12月,2014年7月21日晚10点 全部删除重写成此文,随后的半个多月不断反复改进。 1. 引言     本KMP原文最初写于2年多前的2011年12月,因当时初次接...
  • u013076044
  • u013076044
  • 2014-12-09 23:31
  • 1404

KMP与扩展KMP必须得过!!!

// first used normal KMP qiuxunhuanjie //then extend to do it KMP 扩展KMP未过,明日再看 #include<bits/stdc++.h> using namespace std; #define PER(i,a,b) ...
  • Timsei
  • Timsei
  • 2017-05-24 15:31
  • 308

【 题集 】 【kuangbin带你飞】专题十六 KMP & 扩展KMP & Manacher

这次的题目多的有点变态啊!     链接
  • xi__long
  • xi__long
  • 2015-02-25 21:48
  • 1058

一些扩展kmp的总结

花了一天多时间学了下ex_kmp。。。。 可以看刘雅琼的ppt,讲的非常清楚: 下载地址:http://url.cn/Rvjxa9 ex_kmp可以在线性时间内求文本串的每个位置与模板串的最大公共前缀 ,写法和普通kmp差不多。。 我的写法是: next[i]: P[i....
  • u012797220
  • u012797220
  • 2014-04-01 17:43
  • 1549
    个人资料
    • 访问:129次
    • 积分:12
    • 等级:
    • 排名:千里之外
    • 原创:0篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档
    阅读排行