深度报文检测基础之BM算法

BM算法是一种高效的单模式匹配算法,尤其适用于模式串较长的情况。它通过坏字符表和好后缀表减少比较次数,提高搜索效率。在匹配失败时,坏字符表提供右移位数,而好后缀表利用已匹配内容加速匹配。BMH算法是BM算法的优化版,主要依赖坏字符表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

摘要

BM(Boyer-Moore)算法是单模式匹配的字符串搜索算法,相对经典的KMP字符串匹配算法,效率更好。在模式串长度大的时候效率更高。算法需要对模式串进行预处理,处理过后,在搜索过程中就可以最大减少字符比较次数,以此提高效率。BM算法主要三个特点:从模式串最右开始进行匹配;坏字符表;好后缀表。基本思路就是从右往左进行字符匹配,遇到不匹配的字符后从坏字符表和好后缀表找一个最大的右移值,将模式串右移继续匹配。

1 坏字符

右移位数 = 坏字符出现的位置 – 坏字符在模式串中上一次出现的位置

如果字符在模式串中没有出现,则认为上一次出现的位置为-1。-1意思是啥呢?就是右移之后模式串首部与坏字符出现的后一个字符对齐。

对于模式串EXAMPLE,计算字母P的右移位数 : P的位置为5,上一次出现的位置是-1(没有出现),则右移位数为:5- (-1)= 6,对于模式串中最后出现的 。

i

0

1

2

3

4

5

6

 

Pat[i]

E

X

A

M

P

L

E

-pat[i]

BmBC[i]

1-> 6

2

3

4

5

6

6

7

代码如下:

 

 

1

void preBmBC(char *pat, int m, int BmBC[])

2

{

3

   int i;

4

   for (i = 0; i < ASIZE; ++i)

5

      BmBC[i] = m;

6

   for (i = 0; i <= m - 1; ++i)

7

      BmBC[pat[i]] = m - i - 1;

8

   return;

9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值