KMP模式匹配算法

相信很多人对于这个还有点不了解,或者说是不懂,下面,通过一道题,来解决软考中的这个问题!

正题:

aaabaaa,其next函数值为多少?

对于这个问题,我们应该怎么做呢?

1、整理:

p1=a,

p2=a,

p3=a,

p4=b,

p5=a,

p6=a,

p7=a

2、计算:

1、当j=1的时候,由上面公式可以得到,next(1)=0;

、当j=2的时候,计算1<k<j,因为j=2,所以1<k<2,在这种情况下,k是不存在的,所以属于其他情况,      所以,next(2)=1;其实说个更加简单的就是,无论什么情况,next(1)=0;next(2)=1;

3、当j=3的时候,计算1<k<j,所以,k=2。然后根据右边式子来判断符合不符合。当k=2,左边是p1,右      边是p2,所以‘p1’=‘p2’,有1我们知道,p1=a,p2=a,所以满足条件,所以k=2,所以              next(3)=2;

4、当j=4的时候,计算1<k<j,所以,k可以为2,也可以为3。当k=2时,判定左边为p1,右边为p3,a=a,所    以,k=2满足条件;当k=3时,左边为p1p2,右边为p2p3,也满足条件,所以根据max(2,3)得,        next(4)=3;

5、当j=5,计算得,k=2、3、4,然后当k=2时,判定左边式子为p1,右边式子为p4,不满足;当k=3时,判    定左边式子为p1p2,右边式子为p3p4,不满足;当k=4时,判定左边式子为:p1p2p3,右边式子为:      p2p3p4,不满足;所以,这种情况属于其他情况,所以next(5)=1;

6、当j=6,计算得到k=2、3、4、5。当k=2时,判定左边式子为:p1,右边式子为:p5,满足条件;当k=3    时,判定左边式子为p1p2,右边式子为p4p5,不满足;当p=4、5时,依次向上判定,皆为不满足。所      以next(6)=2;

7、当j=7,计算得到k=2、3、4、5、6.以此判定每个k值,得到,当k=2,k=3时满足条件,所以根据max函    数,得到next(7)=3;

3、结果:

对上面的next函数值进行汇总,得到,aaabaaa的next函数值为0123123.

4、总结:

其实很简单,也不麻烦,如果自己做得多了,找到了核心算法思想,直接数就可以了,so easy!

如果大家有兴趣,可以做一下eefegefee,结果是0121212123

KMP模式匹配算法的更多相关文章

  1. 线性表-串:KMP模式匹配算法

    一.简单模式匹配算法(略,逐字符比较即可) 二.KMP模式匹配算法 next数组:j为字符序号,从1开始. (1)当j=1时,next=0: (2)当存在前缀=后缀情况,next=相同字符数+1: ( ...

  2. C++编程练习(7)----“KMP模式匹配算法“字符串匹配

    子串在主串中的定位操作通常称做串的模式匹配. KMP模式匹配算法实现: /* Index_KMP.h头文件 */ #include<string> #include<sstream& ...

  3. 详细解读KMP模式匹配算法

    转载请注明出处:http://blog.csdn.net/fightlei/article/details/52712461 首先我们需要了解什么是模式匹配? 子串定位运算又称为模式匹配(Patter ...

  4. [从今天开始修炼数据结构]串、KMP模式匹配算法

    [从今天开始修炼数据结构]基本概念 [从今天开始修炼数据结构]线性表及其实现以及实现有Itertor的ArrayList和LinkedList [从今天开始修炼数据结构]栈.斐波那契数列.逆波兰四则运 ...

  5. 字符串的模式匹配算法——KMP模式匹配算法

    朴素的模式匹配算法(C++) 朴素的模式匹配算法,暴力,容易理解 #include<iostream> using namespace std; int main() { string m ...

  6. 串、KMP模式匹配算法

    串是由0个或者多个字符组成的有限序列,又名叫字符串. 串的比较: 串的比较是通过组成串的字符之间的编码来进行的,而字符的编码指的是字符在对应字符集中的序号. 计算机中常用的ASCII编码,由8位二进制 ...

  7. 数据结构(三)串---KMP模式匹配算法

    (一)定义 由于BF模式匹配算法的低效(有太多不必要的回溯和匹配),于是某三个前辈发表了一个模式匹配算法,可以大大避免重复遍历的情况,称之为克努特-莫里斯-普拉特算法,简称KMP算法 (二)KMP算法 ...

  8. 浅谈KMP模式匹配算法

    普通的模式匹配算法(BF算法) 子串的定位操作通常称为模式匹配算法 假设有一个需求,需要我们从串"a b a b c a b c a c b a b"中,寻找内容为"a ...

  9. 初探—KMP模式匹配算法

    KMP算法思想: 普通的字符串匹配算法S主串必须要回溯.但回溯就影响了效率. 改进的地方也就是这里,我们从P 串本身出发,事先就找准了T自身前后部分匹配的位置,那就可以改进算法. next数组的含义: ...

随机推荐

  1. 通过nsenter连接docker容器

    通常连接Docker容器并与其进行交互有四种方法.详情见:https://github.com/berresch/Docker-Enter-Demo,下面摘录nsenter连接的方式. 查看是否安装n ...

  2. Windows下安装Scala

    Scala是一种类似Java的纯面向对象的函数式编程语言,由于函数具有明确的确定输入对确定输出的关系,所以适合推理和计算,一切函数都可以看成一系列的计算组成,另外由于Scala函数是没有副作用和透明的 ...

  3. Maven 安装

    简单记录maven的安装步骤: 在安装maven之前,先确保已经安装JDK1.6及以上版本,并且配置好环境变量. 下载maven3,最新版本是Maven3.2.3 ,下载地址:http://maven ...

  4. BestCoder19 1001.Alexandra and Prime Numbers(hdu 5108) 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5108 题目意思:给出一个数正整数 N,N <= 1e9,现在需要找出一个最少的正整数 M,使得 ...

  5. Android Shape自定义纯色圆角按钮

    版权声明:分享技术,传播快乐.如果本博客对你有帮助,请在我的博客首页为我打赏吧! 在Android开发中,为响应美化应用中控件的效果,使用Shape定义图形效果,可以解决图片过多的问题. 首先看一下效 ...

  6. Bundle savedInstanceState的作用

    写过Android程序的都知道Activity中有一个名称叫onCreate的方法.该方法是在Activity创建时被系统调用,是一个Activity生命周期的开始.可是有一点容易被忽视,就是onCr ...

  7. 【编程题目】n 支队伍比赛,分别编号为 0,1,2。。。。n-1,已知它们之间的实力对比关系,

    36.引用自网友:longzuo(运算)谷歌笔试: 19n 支队伍比赛,分别编号为 0,1,2....n-1,已知它们之间的实力对比关系,存储在一个二维数组 w[n][n]中,w[i][j] 的值代表 ...

  8. 【mongo】Can't take a write lock while out of disk space错误

    今天遇到了这个错误,各种无法操作.找了很久的方案,都没用.最终发现,原来是我虚拟机硬盘满了......清除了些没用的东西,就恢复了.

  9. java获取手机号归属地

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  10. 3ds max的动画输出

    转自:http://zhidao.baidu.com/link?url=qc3vV2A9-ydb-YiVKoF7z_bIIRlmLSkyl8DcuWNYn8FaBxa2BDVLwuGPX_jYWxbw ...