KMP算法与传统串匹配算法(纯文字版)

传统匹配

有S和T,2个串,S是待匹配的串,T是匹配串,(点就是他们的小标序列–自定义的)
他们在匹配的时候,是逐一匹配,假如在第一次匹配的第5个点碰到不相同的内容,这个时候会发生,S回溯到第一次匹配开始点的下一个点,T会回溯到开始点
性能:
会带来多次重复的匹配,非常消耗性能,时间复杂度远远大于KMP匹配

KMP匹配

首先有一个 S串=”abababcabababa”
然后我们定义一个要匹配的模式串T=”abababa”,
在KMP算法中最重要的就是NEXT函数,他的作用就是减少重复匹配的次数
1.NEXT函数如何求值
首先我们要清楚 “abababa”中有几个候选串,如何求候选串呢
a b a b a b a
i 0 1 2 3 4 5 6
T1=??(n=0~K)
T2=??(n=i-k~i)
k不能大于i
当T1=T2
这个时候就可以知道其中一个候选串
重点 1:我们要求出所有的候选串,并取出最长结果的串最为NEXT函数的值
然后我们把i=0,1,2,3,4,5,6的NEXT函数值求出来
当i=0的时候,next函数值为-1,这个是特殊情况

重点,我们就可以根据不用每次都把T回溯到开始点位置,直接回溯到T的next值得下标点进行再次匹配
好处:充分利用已经计算过的结果,减少重复计算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值