KMP模式匹配算法
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模式匹配算法的更多相关文章
- 线性表-串:KMP模式匹配算法
一.简单模式匹配算法(略,逐字符比较即可) 二.KMP模式匹配算法 next数组:j为字符序号,从1开始. (1)当j=1时,next=0: (2)当存在前缀=后缀情况,next=相同字符数+1: ( ...
- C++编程练习(7)----“KMP模式匹配算法“字符串匹配
子串在主串中的定位操作通常称做串的模式匹配. KMP模式匹配算法实现: /* Index_KMP.h头文件 */ #include<string> #include<sstream& ...
- 详细解读KMP模式匹配算法
转载请注明出处:http://blog.csdn.net/fightlei/article/details/52712461 首先我们需要了解什么是模式匹配? 子串定位运算又称为模式匹配(Patter ...
- [从今天开始修炼数据结构]串、KMP模式匹配算法
[从今天开始修炼数据结构]基本概念 [从今天开始修炼数据结构]线性表及其实现以及实现有Itertor的ArrayList和LinkedList [从今天开始修炼数据结构]栈.斐波那契数列.逆波兰四则运 ...
- 字符串的模式匹配算法——KMP模式匹配算法
朴素的模式匹配算法(C++) 朴素的模式匹配算法,暴力,容易理解 #include<iostream> using namespace std; int main() { string m ...
- 串、KMP模式匹配算法
串是由0个或者多个字符组成的有限序列,又名叫字符串. 串的比较: 串的比较是通过组成串的字符之间的编码来进行的,而字符的编码指的是字符在对应字符集中的序号. 计算机中常用的ASCII编码,由8位二进制 ...
- 数据结构(三)串---KMP模式匹配算法
(一)定义 由于BF模式匹配算法的低效(有太多不必要的回溯和匹配),于是某三个前辈发表了一个模式匹配算法,可以大大避免重复遍历的情况,称之为克努特-莫里斯-普拉特算法,简称KMP算法 (二)KMP算法 ...
- 浅谈KMP模式匹配算法
普通的模式匹配算法(BF算法) 子串的定位操作通常称为模式匹配算法 假设有一个需求,需要我们从串"a b a b c a b c a c b a b"中,寻找内容为"a ...
- 初探—KMP模式匹配算法
KMP算法思想: 普通的字符串匹配算法S主串必须要回溯.但回溯就影响了效率. 改进的地方也就是这里,我们从P 串本身出发,事先就找准了T自身前后部分匹配的位置,那就可以改进算法. next数组的含义: ...
随机推荐
- ios 单一线程中的Runloop机制会导致线程安全问题吗?
今天在处理多线程突然想到一个问题,多核处理器会不会导致,单一线程中,由runloop分发的2个函数同时执行呢?进而同时修改同一个变量,产生bug? 我做了以下的测试: - (void)viewDidL ...
- vs2013 控制台程序exe图标
工程右击选择添加resource->Icon. 在工程目录就会生成 工程名.rc 和 XX.ico文件. 重新编译程序,就会生成有图标的exe. 对应的配置在 工程名.rc 文件里,用记事 ...
- selenium使用actions.moveToElement处理菜单
//should set firefox path //FirefoxBinary binary=new FirefoxBinary(new File("C:\\Program Files ...
- ACM/ICPC 之 差分约束系统两道(ZOJ2770-POJ1201)
当对问题建立数学模型后,发现其是一个差分方程组,那么问题可以转换为最短路问题,一下分别选用Bellmanford-SPFA解题 ZOJ2770-Burn the Linked Camp //差分约束方 ...
- ACM/ICPC 之 数论-斐波拉契●卢卡斯数列(HNNUOJ 11589)
看到这个标题,貌似很高大上的样子= =,其实这个也是大家熟悉的东西,先给大家科普一下斐波拉契数列. 斐波拉契数列 又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.… ...
- C# Winform中如何获取文件名与文件路径
获取文件名方法: 用System.IO.Path.GetFileName和System.IO.Path.GetFileNameWithoutExtension(无扩展名)的方法 获取文件路径方法: / ...
- Java Web开发框架Spring+Hibernate整合效果介绍(附源码)
最近花了一些时间整合了一个SpringMVC+springAOP+spring security+Hibernate的一套框架,之前只专注于.NET的软件架构设计,并没有接触过Java EE,好在有经 ...
- 解决 spring mvc 3.0 结合 hibernate3.2 使用<tx:annotation-driven>声明式事务无法提交的问题(转载)
1.问题复现 spring 3.0 + hibernate 3.2 spring mvc使用注解方式:service使用@service注解 事务使用@Transactional 事务配置使用 < ...
- windows服务
.net windows 服务创建.安装.卸载和调试 原文:http://www.cnblogs.com/hfliyi/archive/2012/08/12/2635290.html 我对例子做了 ...
- 【XLL API 函数】xlGetHwnd
返回顶层的 Excel 窗口句柄. Excel4(xlGetHwnd, LPXLOPER pxRes, 0); /* returns low part only */ Excel12(xlGetHwn ...