KMP模式匹配算法的两点理解

KMP模式匹配算法中,核心就在于next[j]数组的赋值。这里字符串数组均从下标1开始,下标0,用于存储字符串长度。

个人理解,next[j]的值表示,从1到j-1的位置上,有多少个匹配的字符串(包括一个字符)+1。其中定义,当j=1,next[j]=0;当j不等1,查看从1到j-1位置的字符,进行比较。较简便的方法为,如a1a2a3a4a5,如只有一位,则比较a1与a5是否相等,如果二位相等,则比较a1a2和a4a5,即a1...ak-1=a j-k+1...aj-1。由此可计算出k值(按最大匹配数)。即为next[j]=k;

若随着j的增大,遍历一直没有匹配的,则next[j]=1;

 

KMP模式匹配算法用i,j值作为指针。i不回溯,j会

S字符串数组为abcdefgab。T字符串数组为abcabx。

当i=4,j=4时,d与a不相等,i=4,j=next[4]=1。因为在T[4]之前没有匹配的字符,所以从j=1开始。

如果next[4]=2,则表示,T[1]与T[3]是相等的。那么假设为T[3]为a,那么会进行S[4]与T[2]比较。因为当i=4,j=4时,证明前三个都是匹配的。那么S[3]=T[3]=T[1]。这就解释了,它的效率比传统的高。因为i是直接向后遍历,而j会跳过已经匹配过的,回退到不匹配的地方。从而提高效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值