BM算法/horspool算法/Sunday算法 喵喵喵

horspool算法和Sunday算法都是BM算法的改进,我刚开始的时候还搞混了,所以这里总结一下喵(超简洁喵~)


BM算法

​​​子串中:从右往左匹配

坏字符:主串中与模式串不匹配的第一个字符

好后缀:主串中与模式串后缀匹配的子串

坏字符规则:

 好后缀规则:

 在只有坏字符规则下可能出现左移的情况:

所以要将坏字符和好后缀规则结合起来,我们可以分别计算两个规则向右滑动的位数,然后取两个数中最大的,作为模式串往后滑动的位数。 


horspool算法

匹配窗口:主串中与模式串正在配对比较的部分

主要思想:模式串中从右往左与匹配,若相等,则继续比较,直到完全相等或者出现第一个坏字符;

如果不匹配,则判断主串匹配窗口中的最后一个字符是否在模式串中。如果不在,模式串直接整体跳过当前匹配窗口,即右移的长度为模式串的长度;如果在,则移动长度为模式串中该字符(除了模式串中最后一位外)距离模式串右端的最近距离。

例如:

 如果是BM算法,这里就会看坏字符b在bcc中出现的位置以及好后缀c在bcc中出现的位置并进行比较,选出移动最大的,进行计算。


Sunday算法

主要思想:在子串中从左向右与模式串比较,匹配失败时关注的是主串中参加匹配的最后一个字符的下一个字符根据该字符是否存在于子串来决定向右移动几位。


欢迎讨论喵~今天用手机打的字,没有表情包

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值