一种按字长匹配的多模式串匹配方法

文档序号:6357283阅读:268来源:国知局
专利名称:一种按字长匹配的多模式串匹配方法
技术领域
本发明属于计算机中字符串匹配技术领域,具体涉及按字长匹配的多模式串匹配方法。多模式串匹配方法现已被广泛的用于信息检索、网络内容过滤、病毒检测和生物计算学等方面。所谓多模式串匹配,就是从文本中搜索出模式串集合中所有模式串的所有出现的位置。经典的多模式匹配方法有基于前缀的匹配防范,基于后缀的匹配方法和基于子串的匹配方法。其中基于后缀的匹配方法,如1994年美国亚利桑那大学计算机学院报告 《一种快速的多模式串匹配算法》中提出的Wu-Manber方法(报告编号为TR-94-17),是目前实际中平均性能最好的一个方法,被应用于操作系统的搜索程序和入侵检测系统中。该 Wu-Manber方法采用哈希散列和跳跃式搜索的方式,具有很好的匹配效率,但Wu-Manber方法在模式集中最短模式串长度过小时,搜索时平均跳跃距离变小,需要频繁的计算哈希值, 验证入口增多,匹配效率会严重下降。本发明提出一种按字长匹配的多模式串匹配方法,以克服现有技术的上述缺陷, 使多模式串匹配达到比较高的效率。本发明按字长匹配的多模式串匹配方法,包括预编译过程和搜索过程,在字长为 32位的计算机上进行如下操作所述预编译过程和传统的Wu-Manber方法相同,为构造3个表一个跳转表即 SHIFT表,一个哈希表即HASH表,一个前缀表即PREFIX表;设B为字符块的长度,m为最短模式串的长度,X为当前需要计算哈希值的字符块;字符块哈希值的计算公式为hash(X) = (X
*256B-1) + (X[1]*256B-2)+.+(X[B_1]*2560);首先建立SHIFT表先建立一个空表,表项值都初始化为最大跳转距离m-B+1, 在模式集中取每个模式串前m个字符,从后往前每次取相邻B个字符组成字符块,按上面给出的字符块哈希值的计算公式计算该字符块的哈希值,按字符块跳转值的计算公式
表项值,即形成SHIFT表;然后建立HASH表先建立一个空表,表项值都初始化为空,在模式集中取每个模式串前m个字符的后B个字符组成字符块,按字符块哈希值的计算公式计算该字符块的哈希值,把哈希值相等的模式串用链表链接起来,存储在表中对应索引值为该哈希值的表项中,即形成HASH表;再建立PREFIX表先建立一个空表,表项值初始化为空,取模式集中每个模式串前B个字符,把哈希值相等的模式串用链表链接起来,存储在表中对应索引值为该哈希值
背景技术

发明内容
修改表中索引值为该字符块哈希值的的表项中,即形成PREFIX表; 其特征在于 将所述需要计算哈希值的字符块的长度B取2,在搜索过程中,每次按字长读取文本,即每次从文本中装载一个整型值,字符块的哈希值通过对该整型值的移位得到;具体操作如下设当前读取机器字的内容是对应文本中的字符“abcd”,该机器字对应三个字符块前面字符块“ab”、中间字符块“be”和后面字符块“Cd”,机器字对应整型值为变量var, 整个搜索过程分为四个阶段,用计算机语言描述如下第一阶段由计算前面字符块哈希值的公式hash (" ab" ) = (var〈〈16) 16得到前面字符块的哈希值VI,查SHIFT表得到表中索引值为前面字符块的哈希值Vl的表项值switch(SHIFT[VI]){case 0 :查找HASH表中索引值为前面字符块的哈希值Vl的表项值,即为符合的模式串链表,对链表中每一个模式串,首先查找PREFIX表中索引值为Vl的表项值,验证前缀是否匹配,最后再进行模式串其余部分的验证,之后进入第二阶段;case I :直接进入第二阶段;case 2,3,4 :直接进入第三阶段;default :若文本结束,则整个搜索过程结束;若文本没有结束,进入下一个机器字长的读取,重新进入第一阶段;};第二阶段由计算中间字符块哈希值的公式hash(" be" ) = (var〈〈8) 16得到中间字符块的哈希值V2,查SHIFT表switch (SHIFT [V2]){case 0 :查找HASH表中索引值为中间字符块的哈希值V2的表项值,即为符合的模式串链表,对链表中每一个模式串,首先查找PREFIX表中索引值为V2的表项值,验证前缀是否匹配,最后再进行模式串其余部分的验证,之后进入第三阶段;case 1,2 :直接进入第三阶段;default :若文本结束,则整个搜索过程结束;若文本没有结束,进入下一个机器字长的读取,重新进入第一阶段;};第三阶段由计算后面字符块哈希值的公式hash(" Cd" ) = var>>16得到后面字符块的哈希值V3,查SHIFT表switch (SHIFT [V3]){case 0 :查找HASH表中索引值为后面字符块的哈希值V3的表项值,即为符合的模式串链表,对链表中每一个模式串,首先查找PREFIX表中索引值为V3的表项值,验证前缀是否匹配,最后再进行模式串其余部分的验证,之后进入第四阶段;case I :直接进入第一阶段;default :若文本结束,则整个搜索过程结束;若文本没有结束,进入下一个机器字长的读取,重新进入第一阶段;};第四阶段取下一个字长中与该字长中相邻的字符,由计算哈希值的公式计算得到相邻字长字符块的哈希值V4,查SHIFT表switch(SHIFT[V4]){case 0 :查找HASH表中索引值为字长字符块的哈希值V4的表项值,即为符合的模式串链表,对链表中每一个模式串,首先查找PREFIX表中索引值为V4的表项值,验证前缀是否匹配,最后再进行模式串其余部分的验证,之后进入第四阶段;default :若文本结束,则整个搜索过程结束;若文本没有结束,进入下一个机器字长的读取,重新进入第一阶段;}。概括起来说,本发明方法就是在上述搜索过程中首先计算当前字符块的哈希值, 若当前字符块的跳转值为零,则将当前整型指针转为字符指针,查找HASH表和PREFIX表, 验证可能的匹配情况,若不为零,则直接移动到下一个匹配入口 ;整个过程中搜索指针的移动距离是一个字长的整数倍,当搜索指针到达文本末尾,整个过程结束。与现有Wu-Manber技术相比,本发明主要做了以下改进A.最短模式串长度过小时,平均跳跃距离增大。本发明方法中的最大跳跃距离为m-B+1 ;而在现有的Wu-Manber方法中当规则集中最短模式串长度过小时,最大跳跃距离受限;本发明方法中通过按字长匹配,每次读入和处理的单位变为一个机器字,在最短模式串长度过小时,仍相当于跳跃距离为4,这样就平滑了最短模式串长度过小时跳跃距离过小的劣势。B.哈希值的计算加速。本发明中每次读入一个整型值,其包含的三个字符块的哈希值正好可以通过对该整型值的移位获得。仅仅通过移位即可获得所需的哈希值,而不需要进行逐个取值和做或运算,这样就加快了哈希值的计算速度,特别是当最短模式串长度过小而需要频繁对文本计算哈希值时,采用本发明方法就可获得很大的效率提升。C.访存次数减少。本发明中每次读取一个机器字,设文本长度为n,则最多的访存次数为n/4 ;而现有的Wu-Manber方法的平均访存次数为n/(m-1),当最短模式串长度过小时,现有的 Wu-Manber方法的访存次数很多,而采用本发明方法后访存次数可以有效减少。
具体实施例方式实施例I :
本发明提出的这种按字长匹配的多模式串匹配方法,分为预编译过程和搜索过程,其中的预编译过程和传统的Wu-Manber方法相同,即建立三个表=SHIFT表,HASH表和 PREFIX表;在搜索过程中,每次匹配的单位为一个字长,即一个整型,通过对该整型进行移位操作,可以快速得到整型中包含的三个字符块的哈希值,再根据预编译过程得到的三个表,进行匹配验证。本实施例中的实现平台为Iinux操作系统,字长为32位,中央处理器为双核酷睿 2代,内存为2千兆字节,采用的是随机生成的9. 54兆字节的匹配文本,字符集大小为256, 模式串集合是从匹配文本中随机抽取的子串,模式串集合大小为100,集合中模式串长度差异不超过10,最短模式串的长度m从2到10之间变化。本实施例按字长匹配的多模式串匹配方法的具体操作如下在预编译过程中构造3个表一个跳转表即SHIFT表,一个哈希表即HASH表,一个前缀表即PREFIX表;设B为字符块的长度,m为最短模式串的长度,X当前需要计算哈希值的字符块;字符块哈希值的计算公式为hash(X) = (X
*256)+X[l];首先是建立SHIFT表先建立一个空表,表项值都初始化为最大跳转距离
m-B+1,在模式集中取每个模式串前m个字符,从后往前每次取相邻B个字符组成字符
块,按字符块哈希值的计算公式计算该字符块的哈希值,按字符块跳转值的计算公式
如果X不在任何模式中出现
权利要求
1.一种按字长匹配的多模式串匹配方法,包括预编译过程和搜索过程,在字长为32位的计算机上进行如下操作所述预编译过程为构造3个表一个跳转表即SHIFT表,一个哈希表即HASH表,一个前缀表即PREFIX表;设B为字符块的长度,m为最短模式串的长度,X为当前需要计算哈希值的字符块;字符块哈希值的计算公式为hash(X) = (X
*256B-1) + (X[1]*256B-2)+.+(X[B-1]*2560);首先建立SHIFT表先建立一个空表,表项值都初始化为最大跳转距离m-B+1,在模式集中取每个模式串前m个字符,从后往前每次取相邻B个字符组成字符块,按上面给出的字符块哈希值的计算公式计算该字符块的哈希值,按字符块跳转值的计算公式
全文摘要
本发明公开了一种按字长匹配的多模式匹配方法,包括预编译过程和搜索过程,预编译过程构造3个表跳转表即SHIFT表、哈希表即HASH表和前缀表即PREFIX表;特征是在搜索过程中按字长读取文本,每次从文本中装载一个整型值,每次读入和处理的单位变为一个机器字,这样就平滑了在最短模式串长度过小时跳跃距离过小的劣势,同时整型值中包含的三个字符块的哈希值可以通过对该整型值的移位获得,不需要进行逐个取值和做或运算,从而加快了哈希值的计算速度;每次读取一个机器字也使访存次数有效减少,提高了访存效率。采用本发明方法可使多模式串的匹配达到比较高的效率。
文档编号G06F17/30GK102609450SQ201210006598
公开日2012年7月25日 申请日期2012年1月10日 优先权日2012年1月10日
发明者任开新, 汪永进, 郭利财, 顾乃杰 申请人:顾乃杰
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1