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数组的含义: ...
随机推荐
- hdu 5442 (ACM-ICPC2015长春网络赛F题)
题意:给出一个字符串,长度是2*10^4.将它首尾相接形成环,并在环上找一个起始点顺时针或逆时针走一圈,求字典序最大的走法,如果有多个答案则找起始点最小的,若起始点也相同则选择顺时针. 分析:后缀数组 ...
- Java计时器Timer和TimerTask用法
package com.sy.game.test; import java.util.Timer; import java.util.TimerTask; public class TimeTask ...
- ui router 介绍
1. 路由规则 rap框架页面路由基于ui-router实现 1.1 ui-router 一个基本的路由状态如下所示: 路由配置: $stateProvider .state('po',{ url:' ...
- 数据结构——二叉查找树、AVL树
二叉查找树:由于二叉查找树建树的过程即为插入的过程,所以其中序遍历一定为升序排列! 插入:直接插入,插入后一定为根节点 查找:直接查找 删除:叶子节点直接删除,有一个孩子的节点删除后将孩子节点接入到父 ...
- 将jquery和公共样式缓存到localStorage,可以减少Http请求,从而优化页面加载时间
以下代码: //入口函数 if (window.localStorage) { initJs(); initCss("css", "/gfdzp201508257998/ ...
- suse linux 命令
1.修改vftpd配置文件 vi /etc/vsftpd .conf #listen=YES vi /etc/xinetd.d/vsftpd ...
- Android Multimedia框架总结(二)MediaPlayer框架及播放网络视频案例
前言:前面一篇我们介绍MediaPlayer相关方法,有人说,没有实际例子,看得不是很明白,今天在分析MediaPlayer时,顺带一个播放网络视频例子.可以自行试试.今天分析的都是下几篇介绍各个模块 ...
- 【leetcode】Subsets II (middle) ☆
Given a collection of integers that might contain duplicates, S, return all possible subsets. Note: ...
- CentOS 7.0 部署 Django 到运行起来第一个web service
最近在学习Python,今天发现Django如此强大的web框架,不得不来试一试. 1. 安装Python,官网建议用Python3:
- Linux将Shelll输出写入到文件
&> 以覆盖的方式,写入文件 &>> 将输出追加到文件 将命令的正确输出与错误输出都放入文件. /dev/null,垃圾箱. 将无用输出放入垃圾箱. 命令>& ...