首页 技术 正文
技术 2022年11月13日
0 收藏 747 点赞 2,419 浏览 712 个字

在串匹配模式中,KMP算法较蛮力法是高效的算法,我觉得其中最重要的一点就是求next数组:

看了很多资料才弄明白求next数组是怎么求的,我发现我的忘性真的比记性大很多,每次看到KMP算法求next数组都得花很长时间去看怎么求,虽然看了很多遍了,但还是容易忘,所以我今天非得把它记下来,这样我下次看到的时候就可以直接看我的总结了,哈,可恶的记性,总是这么不争气。设目标串为S,需要匹配串为T:

next[j]数组生成的实质:

    next[j]数组的值其实就等于串T1T2…Tj-1中相同的前缀子串和后缀子串的最大长度加1。再则找前缀和后缀相同的最大真子串,实质上仍然是一个模式匹配,只是匹配的模式串和目标串是同一个串T。所以就有:

1、next[1]=0

2、设next[j]=k

     若Tk=Tj时,则 next[j+1]=next[j]+1

     若Tk≠Tj , 则 next[j+1]=next[k]+1

3. 若不存在匹配的子串:  next[j+1]=1

例:已知匹配串t=“abcaabbabcab”,则:

模式t:   a  b  c  a  a  b  b  a  b   c  a   b

next[j]: 0  1  1  1  2  2  3  1  2   3  4   5

next函数的算法:

void next(string t,int next[])

{

   int j=1,k=0;

   next[1]=0;

   while(j<t.len)

  {

      if(k=0||t.str[j]==t.str[k])

      {

           j++;k++;next[j]=k;

      }

      else

            k=next[k];  

  }

}

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,957
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,480
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,327
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,110
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,742
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,776