首页> 中国专利> 利用改进的Wu-Manber算法进行多模式串匹配的方法

利用改进的Wu-Manber算法进行多模式串匹配的方法

摘要

本发明提供一种利用改进的Wu-Manber算法进行多模式串匹配的方法,包括以下步骤:1)预处理模式串:依照某个方式对每个模式串进行HASH处理,计算每个HASH值对应的移动距离;对于HASH到同一个值的多个模式串,采用AVL树存储,以加快匹配速度;2)搜索:每次读取一块字符,并计算其HASH值,取该HASH值对应的移动距离,如果距离大于0,则直接移动比较窗口继续搜索,否则在该HASH值对应的AVL树中搜索,在AVL树中搜索完成后移动比较窗口继续搜索。由此,本发明增大了移动距离,显著加快了匹配过程。

著录项

  • 公开/公告号CN101251845A

    专利类型发明专利

  • 公开/公告日2008-08-27

    原文格式PDF

  • 申请/专利号CN200810019727.9

  • 发明设计人 刘继明;王东泉;谢炜;林恩峰;

    申请日2008-03-13

  • 分类号G06F17/30;

  • 代理机构南京苏科专利代理有限责任公司;

  • 代理人陈忠辉

  • 地址 215021 江苏省苏州市工业园区机场路328号国际科技园1630-1单元

  • 入库时间 2023-12-17 20:41:01

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2010-06-09

    授权

    授权

  • 2008-10-22

    实质审查的生效

    实质审查的生效

  • 2008-08-27

    公开

    公开

说明书

技术领域

本发明涉及一种多模式串匹配算法的改进,尤其涉及利用改进的Wu-Manber算法进行多模式串匹配的方法,属于算法技术领域。

背景技术

模式串匹配从来都是一个热门话题,从编辑器到生物科学,再到网络内容分析,应用领域非常广泛。这些应用领域的共同特点是需要处理的数据量巨大,需要匹配的关键词条目多而且可能很长,但对性能要求较高。为此相应的模式串匹配算法层出不穷,应用于单模式串匹配的有KMP、BM等等,应用于多模式串匹配的有AC、Wu-Manber等等。

先明确下模式串匹配问题的数学定义:字符,抽象的实体,匹配的最小单位,字母和数字均可为符号;字母表,若干个字符的有穷集合;字符串,取自某个字母表中的并置起来的有穷符号序列。串匹配问题可以精确叙述如下:字母表∑,令其上的n(n>=1)个字符串p1,p2,...,pn作为模式串,给定一个字符串T,查找T中是否包含有pi(1<=i<=n)。

由于Wu-Manber算法为BM算法的多模式扩展,以下均简单介绍:

BM(Boyer-Moore):单模式串匹配算法,采用从右到左的方法扫描模式串,是应用中最有效的单模式串匹配算法。该算法思想为,将模式串和被比较字符串沿左侧对齐,从模式串的最后一个字符开始比较,当比较到某个字符不相等时,将比较窗口向右移动;移动的距离在预处理模式串时生成,包括良好后缀转移和不良字符转移。

Wu-Manber:多模式串匹配算法,为BM的多模式扩展,同样采用从右到左的方法扫描模式串,计算移动距离时仅利用BM中的不良字符转移,同时该算法又利用了hash的思想减小匹配范围。由于模式串众多,在读取被比较字符串时,采取读入多个字符的方法,即一次读入一块字符。

发明内容

本发明的目的是克服现有技术存在的不足,提供一种利用改进的Wu-Manber算法进行多模式串匹配的方法,旨在有效加速Wu-Manber算法的匹配过程。

利用改进的Wu-Manber算法进行多模式串匹配的方法,包含以下步骤:

1)预处理模式串:计算每个模式串对应的SHIFT数组,并将该串插入对应的链表或AVL树;

a)计算SHIFT数组:模式串P,只考虑P的前lmin个字符,每B个字符为一块,计算HASH值,设该HASH值对应的移动距离s1,该字符块到模式串末端的距离为s2,则该HASH值对应的移动距离重新置为s1和s2的最小值;计算P末端的B个字符的HASH值,将该HASH值对应的移动距离最高位置1;

b)模式串插入:模式串P,只考虑前lmin个字符,计算P的后B个字符的HASH值,若其对应的模式串个数小于给定值N,则插入模式串链表,否则计算P的前B个字符的HASH值,以此为关键字插入对应的AVL树;

2)搜索:比较窗口长度为lmin个字符,在当前比较窗口下,计算后B个字符块的HASH值,取对应的移动距离shift,若最高位不为1,则直接将比较窗口向右移动shift,否则取该HASH值对应的链表或AVL树,在其中搜索,然后将比较窗口向右移动,移动距离为将最高位清0的shift。

进一步地,上述的利用改进的Wu-Manber算法进行多模式串匹配的方法,利用专门的变量存储移动距离为0的hash值,即重新定义一个数组ZERO,当ZERO为1时,表示该hash值对应的块字符为某个模式串的后缀,而SHIFT数组定义为下一次的移动距离,绝对大于0;在搜索过程中,先判断ZERO[hash]是否为1,如果是则进行深层次的匹配,下一次移动距离始终为SHIFT[hash]。

更进一步地,上述的利用改进的Wu-Manber算法进行多模式串匹配的方法,利用模式串的前缀产生hash值,同时以该hash值为关键字构造一个AVL树,将模式串作为数据插入到AVL树的相应结点中;搜索时,首先在AVL树中查找,是否有相应的hash值存在,如果没有直接移动比较窗口,否则在该AVL结点中搜索。

本发明技术方案突出的实质性特点和显著的进步主要体现在:

①在原始的Wu-Manber算法中,如果当前字符块的移动距离为0,则下一次移动距离始终为1,本发明显著增大了此处的移动距离,加快了匹配速度,而且没有增加算法的时间和空间开销;

②将HASH到同一个值的多个模式串以AVL树方式存储,由于AVL树的搜索时间复杂度为O(logn),n为结点个数,因此本发明采用AVL树大大加快了匹配过程。

附图说明

下面结合附图对本发明技术方案作进一步说明:

图1:预处理流程图;

图2:模式串计算shift数组的示意图;

图3:模式串插入到AVL树或链表的示意图;

图4:搜索流程图。

具体实施方式

本发明为Wu-Manber算法的改进,因此先说明原始的Wu-Manber算法,以下是一些术语和匹配流程:

lmin:模式串的最小长度,实际上移动距离及相应HASH值只和模式串的前lmin个字符相关;

B:一次读入的字符个数;

h1,h2:所用的HASH函数,输入为一块字符,输出为一个整数值;

SHIFT:移动数组,HASH所对应的移动距离;

HASH:链表数组,表示后缀hash值相同的模式串链表;

T=t1t2...tn:被比较字符串;

P={p1,p2,...,pr}:模式串;

(一)原始的Wu-Manber算法:

Wu-Manber算法在计算hash值时,只考虑前lmin个字符,即认为所有模式串都是等长的(lmin)。在扫描被比较字符串时,读入一块字符,计算其hash值,得到相应的移动距离shift,如果shift>0,则直接将比较窗口向右移动shift;如果shift=0,则表明该后缀有可能存在于某个模式串中,找到对应的链表(该链表包含所有后缀hash值相同的模式串),遍历其中所有模式串,并提前比较前B个字符的hash值,防止过多的比较运算。

移动数组SHIFT如下生成:

一块字符Bi,如果在所有模式串中都不出现,则该Bi对应的hash值的移动距离为lmin-B+1;如果这块字符存在于某个(或多个)模式串,则找到Bi在模式串中最靠右的位置j及对应的模式串Pi,则移动距离为lmin-B+1-j

以下是Wu-Manber的伪码表示:

Wu-Manber(P={p1,p2,...,pr},T=t1t2...tn)

1.  Preprocessing

2.       用lmin-B+1初始化SHIFT数组

3.       For每个模式串P Do

4.                  pos←lmin-B+1

5.                  Whilepos≤lmin-1 Do

6.                  h←h1(Ppos为后缀的B个字符)

7.                  SHIFT[h]←SHIFT[h]和lmin-pos的最小值

8.                  将P加入到链表HASH[h]中;pos←pos+1

9.                  End of while

10.                 End of for

11.

12.  Searching

13.      pos←lmin

14.      While pos≤n Do

15.            i←h1(tpos为后缀的B个字符)

16.            If SHIFT[i]=0 Then

17.             list←HASH[i]

18.             h←h2(tpos-lmin+1为前缀的B个字符)

19.                foreach pattern in list Do

20.             If h=h2(pattern的前B个字符)Then

21.                            Compare T with this pattern.

22.               End of if

23.            End of foreach

24.              pos←pos+1

25.       Else pos←pos+SHIFT[i]

26.       End of if

27.   End of while

(二)改进的Wu-Manber算法:

伪码的17行和24行,本发明对该算法的改进主要体现在这两行:

1)如果当前shift为0,则下一次的移动距离都为1,此处没有充分利用模式串的有用信息;

2)后缀hash值相同的模式串可能有很多,成百上千个,而此处仅仅是遍历所有的模式串,时间消耗很长。

第一个问题,利用专门的变量来存储移动距离为0的hash值,即重新定义一个数组ZERO,当ZERO(hash)为1时,表示该hash值对应的块字符可能为某个模式串的后缀,而SHIFT数组定义为下一次的移动距离(绝对大于0)。其构造过程如下:

1.  Preprocessing

2.       用lmin-B+1初始化SHIFT数组,用0初始化ZERO数组

3.       For每个模式串P Do

4.            pos←lmin-B+1

5.            While pos≤lmin-2Do

6.            h←h1(Ppos为后缀的B个字符)

7.            SHIFT[h]←SHIFT[h]和lmin-pos的最小值

8.            将P加入到链表HASH[h]中;pos←pos+1

9.            End of while

10.           h←h1(Ppos为后缀的B个字符)

11.           ZERO[h]←l

10.           End of for

在搜索过程中,先判断ZERO[hash]是否为1,如果是则进行深层次的匹配,下一次移动距离始终为SHIFT[hash]。

第二个问题,利用模式串的前缀(前B个字符)产生hash值,同时以该hash值为关键字构造一个AVL树,将模式串作为数据插入到AVL树的相应结点中;搜索时,不需要遍历所有后缀hash值相同的模式串了,首先在AVL树中查找,是否有相应的hash值存在,如果没有直接移动比较窗口,否则在该AVL结点中搜索。

对于预处理模式串:依照某个方式对每个模式串进行HASH处理,计算每个HASH值对应的移动距离;对于HASH到同一个值的多个模式串,采用AVL树存储,以加快匹配速度。

对于搜索:每次读取一块字符,并计算其HASH值,取该HASH值对应的移动距离,如果距离大于0,则直接移动比较窗口继续搜索,否则在该HASH值对应的AVL树中搜索,在AVL树中搜索完成后移动比较窗口继续搜索。

本发明完整过程如下:

1)预处理模式串:计算每个模式串对应的SHIFT数组,并将该串插入对应的链表或AVL树,参见图1;

a)计算SHIFT数组:模式串P,只考虑P的前lmin个字符,每B个字符为一块(先不考虑最后的一块),计算HASH值,设该HASH值对应的移动距离(不考虑最高位)s1,该字符块到模式串末端(仅lmin个字符长)的距离为s2(s2>0),则该HASH值对应的移动距离重新置为s1和s2的最小值;计算P末端的B个字符的HASH值,将该HASH值对应的移动距离最高位置1,参见图2;

b)模式串插入:模式串P(只考虑前lmin个字符),计算P的后B个字符的HASH值,若其对应的模式串个数小于给定值N,则插入模式串链表,否则计算P的前B个字符的HASH值,以此为关键字插入对应的AVL树,参见图3;

2)搜索:比较窗口长度为lmin个字符,在当前比较窗口下,计算后B个字符块的HASH值,取对应的移动距离shift,若最高位不为1,则直接将比较窗口向右移动shift,否则取该HASH值对应的链表或AVL树,在其中搜索,然后将比较窗口向右移动,移动距离为将最高位清0的shift,参见图4。

由上可见,本发明方法相当于以空间换取时间,多定义了一个ZERO数组来达到加速匹配的目的。但事实上,ZERO数组只用到0和1两个值,完全可以用一个bit来表示,为此将ZERO数组并入SHIFT数组,当shift=SHIFT[hash]时,shift的最高位存储的是ZERO的信息,即如果最高位为0,则直接移动比较窗口,否则进行深层次的比较。

将后缀对应hash值相同的模式串,依据前缀对应的hash值为关键字创建一个AVL树,由于AVL树的搜索时间复杂度为O(logn),因此可以大大加快匹配速度。但是由于AVL树同样占用空间,需要在时间和空间上作权衡,做法是,当如此的模式串个数小于某个给定值(比如为2)时,不生成AVL树,直接用链表存储,只有个数大于等于给定值时才构造AVL树。

综上所述,利用专门的变量表示某个HASH值对应的移动距离是否为0,而移动距离则重新定义为下一次比较窗口的移动距离,该数值绝对大于0;对比Wu-Manber算法,它在移动距离为0时,下一次的移动距离始终为1,因此本发明增大了移动距离,显著加快了匹配过程。将HASH到同一个值的多个模式串以AVL树方式存储,由于AVL树的搜索时间复杂度为O(logn),n为结点个数,因此本发明采用AVL树大大加快了匹配过程。

以上仅是本发明的具体应用范例,对本发明的保护范围不构成任何限制。凡采用等同变换或者等效替换而形成的技术方案,均落在本发明权利保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号