horspool 算法java实现_字符串匹配算法之Boyer-Moore-Horspool Algorithm

Boyer-Moore-Horspool 算法也称Horspool 算法,由Nigel Horspool设计于1980年,是在BM算法上改进版,因为BM算法里面的 好后缀规则较难理解,同时其效率与正确性的证明当时一直没有得到解决,所以Horspool 算法只用了一个BM里的坏字符规则.

借用“find a needle in a haystack” 典故,意为"大海捞针",引意到我们这里就是 从haystack 字串中查找needle字串(needle 字串等同pattern字串),同时假定haystack字串长度n,needle字串长度为m;

基本原理:

Horspool算法 也是从右向左比较,但Horspool算法相对于Boyer-Moore算法改进了坏字符规则;从右向左匹配,当遇到 不匹配字符(mismatch character)时:

BM 跳转规则:当前不匹配字符和needle中最右边出现的该字符对齐匹配;

Horspool 跳转规则:haystack字串中与needle字串尾部字符对应的字符和needle中最右边出现的该字符匹配;

坏字符规则跳转表初始化和BM中一样,理解了原理,code理解起来就容易了;

下面是实现代码:

#include

#include //

#include //UCHAR_MAX

/* Returns a pointer to the first occurrence of "needle"

* within "haystack", or NULL if not found. Works like

* memmem() OR strs

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值