首页 > 其他分享 >扩展KMP复习小记

扩展KMP复习小记

时间:2022-12-26 18:34:03浏览次数:40  
标签:匹配 复习 extend 前缀 next KMP 最长 小记


简介

KMP大家都耳熟能详,扩展KMP只是一个扩展版而已,字面意思啦!
我记得以前打过这个复习小记的,但是不知为何失踪了。

KMP与扩展KMP的对比

KMP的next[i]表示从1到i的字符串s,前缀和后缀的最长重叠长度。
EXKMP的next[i]表示从1到i的字符串s,和从i到n的字符串st的最长重叠长度。
也就是说KMP是向前的匹配,EXKMP是向后匹配。
扩展KMP问题是KMP问题的补充和加难。

具体内容

重要数组

给定母串S,和子串T。定义n=|S|, m=|T|。
extend[i]=S[i..n]与T的最长公共前缀长度。
next[i]=T[i..m]与T的最长公共前缀长度。

需要线性解决的问题

线性求出extend和next数组。

解决方法

设extend[1..i-1]已经算好,并且在以前的匹配过程中到达的最远位置是p,对应的点是k。(就是说S[k…p]=T[1…extend[k]],k是1到i-1的匹配中匹配到的最远点对应的位置)。

像KMP一样,假设已经求得了next数组。

扩展KMP复习小记_小记


根据定义S[k…p]=T[1…extend[k]],因为k…p覆盖i,所以S[i…p]=T[i-k+1…extend[k]],因为要与T的前缀匹配,所以还要把T[i-k+1…extend[k]]与前缀匹配才行,因为next[i-k+1]是T从i-k+1位置开始的字符串与T的前缀最长匹配的长度,所以T[1…next[i-k+1]]=T[i-k+1…i-k+next[i-k+1]],因为S[i…p]=T[i-k+1…extend[k]],p覆盖i,所以extend[i]至少为next[i-k+1],设l=next[i-k+1]。

p=k+extend[k]-1;l=next[i-k+1];

因为现在extend至少为l了,因为利用
现在就要分两种情况了:

fo(i,1,n){
p=k+extend[k]-1;l=next[i-k+1];
if(l+i>p){
j=p-i+1;if(j<0)j=0;
while(i+j<=n&&s[j+1]==st[i+j])j++;
k=i;
extend[i]=j;
}
else{
extend[i]=l;
}
}

1、i+l< p:
因为p是目前已经匹配过的地方,l就变成了extend[i]的最大值,否则就违反了next[i]的T从i以后的字符串与T的最长公共前缀。

else{
extend[i]=l;
}

2、i+l≥p:
因为大于p是还没有匹配过的地方,所以进一步匹配可能可以让答案更大。然后只用往后匹配并更新最远匹配点p的值和对应点k的值。

j=p-i+1;if(j<0)j=0;
while(i+j<=n&&s[j+1]==st[i+j])j++;
k=i;
extend[i]=j;

时间证明

感性证明一下,每个点都只会被访问一次。自然时间复杂度是O(n)。

推荐题目

【GDOI2014】beyond
。。。用的不是很多,就做过这一道题,网上应该很多,O(∩_∩)O~

由于本人是个蒟蒻

目前多扩展KMP知道的也只有这么多了。


标签:匹配,复习,extend,前缀,next,KMP,最长,小记
From: https://blog.51cto.com/u_15923198/5970017

相关文章

  • 带修改的莫队算法学习小记
    简介莫涛大神创造出的离线询问算法的带修改版。算法基础:需要掌握​​莫队算法​​,会打暴搜(暴力)。一个叫莫的双端队列。只支持单点修改操作方法普通的不带修改的莫队算......
  • 小记Vue动态修改表头的方法
    背景:列表A:初始列名称列表对象B:{name1:newName1;name2:newName2}对象B记录了一部分需要修改的列名称。根据列表A使用v-for动态渲染......
  • 创业周年记:召唤神龙一周年小记
    2018年8月8日,我决定离开腾讯的光环,辞职开始创业。《​​回顾4180天在腾讯使用C#的历程,开启新的征途​​》记录了我所说的拥有七龙珠,去召唤神龙,今天正好历时一年时间,非常有必......
  • Data & Cloud Summit 2021 活动小记
    前言        大家好,我是梦想家。前段时间我写了一篇文章,​​《参加七牛云“PISA”发布会随想录》​​,当时在评论区说到,如果点赞过15,7月30日将在上海浦东香格里拉......
  • 软件工程复习捏
    第一章软件工程软件危机软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。原因:1软件规模越......
  • 学习笔记——刷题小记
    2022.12.25550D-RegularBridge*1900+构造+图论。评分虚高,属于比较一眼的题;主要考察构造能力,与图论关联不大,不过涉及到了“割边”的知识,这个图论标签打的没太大毛......
  • 网络服务考点复习
    第一章信息安全测评思想1.信息安全测评需要具备的科学精神:怀疑、批判、创新、求实、协作2.信息安全测评最主要的方法是系统科学/系统工程的方法3.系统科学的三层含义:......
  • 操作系统期末复习
    操作系统期末复习第1章操作系统引论什么是操作系统?操作系统是管理计算机软、硬件资源的软件,控制和协调计算处理活动,提供用户接口操作系统的主要功能处理机管理......
  • Elasticsearch全文检索引擎复习笔记
    Elasticsearch全文检索引擎复习笔记Elasticsearch是一个基于Lucene的搜索引擎。它提供了一个分布式、多租户的全文搜索引擎,能够为应用程序提供实时的、结构化和非结构......
  • KMP算法解释:理解关于next[j]数组的求解问题
    一、算法背景介绍(我们为什么要采用这种算法?)1.补充定义:(1)主串:待匹配的大字符串(2)模式串:我们希望在主串中匹配到的字符串2.从暴力匹配到KMP算法(1)暴力匹配算法谈到KMP算法......