新闻动态
您当前的位置:主页 > 新闻动态 >

扩展KMP算法

更新时间:2019-04-03

原文链接:https://开头sub?tter。COM / 一个lgor一世th。

前面已经描述的经典算法KMP,我们不断推出扩展KMP算法扩展KMP算法。

问题定义:给定两个串小号和?(N-长度和米),下标从0开始,定义?等于相同长度的所有确定的最长前缀。例如,下表:

晨露农药化肥 晨露农药化肥
一世0 1 2 3 4 6 7
S 一个 一个 一个 一个 一个 b b b
T 一个 一个 一个 一个 一个 C
延伸[I] 4 32 1 0 0 0

为什么这是KMP算法的扩展它?显然,如果有i是在位置S等于m,则发现了匹配于字符串S,T发现,i是第一匹配的位置。此外,KMP算法的扩展可以找到S的所有匹配?。接下来,关于算法的详细信息。

(1)

如上所示,它假设当前位置被遍历串S I,I。e。已计算出的第i个位置的值。设置两个变量,A和P。p表示与相匹配的最右边界的成功的起始位置的字符,即,“P =成功最后匹配位置+ 1”。相较于拉绳T,S [一。p)为等于T [0。PA)

然后定义一个辅助阵列,其中的含义是:T是一样的最长前缀长度,m是串T的长度。例如:

i 0 1 2 3 4
T 一个 一个 一个 一个 a C
下[I] 6 4 3 2 1 0

(2)

对应,如果,如上所示,相同的三个椭圆长度,根据到下一个阵列限定,在这种情况。

(3)

如果它?如上所示,三个椭圆是相同的,并且,也可以是相等的,所以我们可以直接返回从比赛开始,加速。

(4)

如果它?这说明是一样的,并注意到,这就是说,因此没有必要继续下行的判断,我们可以直接分配。

(5)最后,存在解决未来的阵列。让我们来看看的定义:

  • 下[I]:长度T的相同最长前缀;
  • 延伸[I]:长度的相同最长前缀?。

突然意识到,不解决的过程和自己的T A匹配过程嘛,看代码下方。


测试数据如下:



                 
77207
地图
地址:广西省百色市
电话:77207
传真:
邮箱:77207@qq.com
地址:广西省百色市????电话:77207????传真:
Copyright ? 2002-2018 广西晨露农药化肥有限公司 版权所有 txt地图 HTML地图 XML地图 百度XML地图 ICP备案编号:ICP备********号
澳门牌九注册