KMP算法学习记录----Jake Boxer博文学习部分

如需转载,请保留本文链接.

Jake Boxer 英文博文链接:http://jakeboxer.com/blog/2009/12/13/the-knuth-morris-pratt-algorithm-in-my-own-words/

如何使用部分匹配表

1.作用:使用部分匹配表跳过那些已经做过的,旧的比较部分,从非重复匹配部分开始.

2.if(匹配表结果大于1)

 {

  允许跳过的字符数量 = 匹配长度 - 部分匹配表[匹配长度-1];

    }

    else

 {

  允许跳过的字符数量 =  部分匹配表[匹配长度-1];

 }

举例说明:

使用"abababca"作为子串,匹配"bacbababaabcbab"母串.

部分匹配表如下:

字符串a|b|a|b|a|b|c|a

索引值0|1|2|3|4|5|6|7

匹配值0|0|1|2|3|4|0|1

第一次匹配

bacbababaabcbab

abababca

结果:无匹配结果

第二次匹配

bacbababaabcbab

  abababca

结果:匹配数量为:1

允许跳过的字符数量 =  部分匹配表[1-1]  = 0;

第五次匹配

bacb|ababa|abcbab

        |ababa|bca

结果:匹配数量为:5

允许跳过的字符数量 = 5 - 部分匹配表[5-1] = 5 - 3 = 2;

第六次匹配

bacbab|aba|abcbab

        xx|aba|babca

跳过两个字符后,匹配结果如上,本次匹配结果为:3

允许跳过的字符数量 = 3 -部分匹配表[3-1] = 3 - 1 = 2;

第七次匹配

bacbabab|a|abcbab

            xx|a|bababca

跳过两个字符后,匹配结果如上,本次匹配结果为:1

此时子串的尾字符,已经超出了主串的长度,因此,主串与子串无匹配结果.

下一篇文章为《大话数据结构》KMP算法分析.

转载于:https://www.cnblogs.com/yikecaidechengzhangshi/p/8573598.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值