horspool算法代码实现

Horspool算法

第一步:对于给定的长度为m的模式和在模式及文本中用到的字母表,按照下面的shitftable算法构造移动表

第二步:将模式表与文本的开始对齐

第三步:重复下面过程,直到发现了一个匹配子串或者模式到达了文本的最后一个字符以外。从模式的最后一个字符开始,比较模式和文本中相对应的字符,直到:所有m个字符都匹配(然后停止)     或者      遇到了一对不匹配的字符,若字符c是当前文本中和模式的最后一个字符相对齐的字符,则从移动表的第c列中取出当前单元格中t(c)的值,然后将模式沿着文本向右移动t(c)个字符的距离。

t(c)为 1.模式的长度m(当字符c不包含在模式的前m-1个字符中)

               2.模式前m-1个字符中最右边的字符c到模式最后一个字符的距离(其他情况)

 

#include<stdio.h>

int table[127];

int ShiftTable(char *p, int m)
{
    for(int i=0;i<127;i++)
        table[i] = m;
    for(int j=0;j<=m-2;j++)
        table[p[j]] = m-1-j;
    return *table;
}
in

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值