扩展KMP(exkmp)

扩展KMP算法用于求解主串S的所有后缀与模式串T的最长公共前缀长度,包含KMP算法的功能。算法通过递推方式计算extend和net数组,其中extend[i]表示S的后缀Ssuf(i)与T的最长公共前缀长度,net[i]表示T的后缀Tsuf(i)与T本身的最长公共前缀长度。算法根据不同情况分为Case1和Case2,分别计算extend[k]的值。net数组可以通过类似方法求解,先暴力计算net[1],然后利用已知的extend和net数组信息进行递推。
摘要由CSDN通过智能技术生成

扩展KMP

e x k m p exkmp exkmp 求解的问题:对于给定的主串 S S S ,和模式串 T T T ,求出主串 S S S 的所有后缀与模式串 T T T 的最长公共前缀长度

K M P KMP KMP 求解的问题是在主串 S S S 中模式串T出现的次数和位置, 扩 展 K M P 扩展KMP KMP 求解问题包含了 K M P KMP KMP 求解的问题,因为主串 S S S 中与模式串 T T T 的最长公共前缀长度等于 ∣ T ∣ |T| T 的后缀就是 K M P KMP KMP 所求。


e x k m p exkmp exkmp 算法求解过程实际是求两个数组的值:

n e t [ i ] net[i] net[i] : 模式串 T T T 的后缀 T s u f ( i ) Tsuf(i) Tsuf(i) 与模式串 T T T 本身的最长公共前缀长度 (net指next,C++11中next为保留字)

e x t e n d [ i ] extend[i] extend[i]:主串 S S S 的后缀 S s u f ( i ) Ssuf(i) Ssuf(i) 与模式串 T T T 的最长公共前缀长度


exkmp算法采用 递推求解 e x t e n d [ i ] extend[i] extend[i] 的值可以由 e x t e n d [ 0.. i ] extend[0..i] extend[0..i] n e t net net 数组的值求得

算法推导:

设:主串 S S S ,长度 N N N ,模式串 T T T ,长度 M M M ,下标均从 0 0 0 开始。
假设 e x t e n d [ 0.. i ] extend[0..i] extend[0..i] n e t net net 数组已知,现在正在求解 e x t e n d [ k ] extend[k] extend[k] 的值

设最远匹配位置为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值