基于散列的串匹配方法及其选择模式串子窗口的方法

文档序号:6426464阅读:225来源:国知局
专利名称:基于散列的串匹配方法及其选择模式串子窗口的方法
技术领域
本发明涉及信息检索领域。本发明尤其涉及串匹配方法。
背景技术
精确串匹配(后面简称“串匹配”)问题是计算机科学研究领域的一个经典问题。 它指在文本T = Lt2…、中找出某个给定的模式串集合P= {P1,P2,"Ij的所有出现位置,其中I^Ppi(KiSr)是在有限字符表Σ上的字符序列。串匹配技术一直都是计算机科学的研究热点之一,它在网络入侵检测、计算机病毒特征码匹配、网络信息内容安全、 信息检索等多个领域中有着广泛的应用。串匹配方法的分类有多种,按照其关键技术来分,可以分为以下三类基于自动机的匹配方法、基于散列的匹配方法和基于位并行的匹配方法。其中,基于散列的串匹配方法具有存储空间小,匹配速度快的优点,是实际系统中应用最广泛的方法之一,其中的典型代表包括 Karp 禾口 Rabin 在参考文献 1 (Efficient randomized pattern-matching algorithms. IBM Journal of Research and Development 31(1987). 1987,3 :249-260.) 中提出的方法(通常称为Karp-Rabin方法),以及■和Manber在参考文献2 (S. Wu, U. Manber. A fast algorithm for multi-pattern searching. Technical Report Department of Computer Science Chung-Cheng University. 1994, 5.)中提出的方法(通常称为Wu-Manber方法)。基于散列的串匹配方法的基本思想是在预处理阶段计算模式串的散列值,并以散列表的形式存储起来;在匹配过程中,并不直接比较模式串及文本子串,而比较二者对应的散列值,从而将匹配过程转化为查表的过程。基于散列的串匹配方法的基本流程如图1 所示。在方法的预处理阶段,首先,计算模式串集合中最短的模式串长度,记为m。此后,截取各个模式串长度为m的子串。上述过程实际上就是选择模式串子窗口的过程。图1所示的模式串子窗口选择方法是直接截取模式串长度为m的前缀。最后,通过散列函数,计算所截取的模式串子串的散列值,建立散列表。在匹配阶段,首先计算文本子串的散列值,然后查找散列表,如果存在散列值相同的模式串,再进一步比对文本和模式串本身。现有的基于散列的串匹配方法只是简单地将模式串的子窗口选择为模式串的前缀或后缀。这样,如果在模式串间存在大量的前缀、后缀或子串的情况下,就会出现不同的模式串截取出相同子串的情况,进而造成大量的模式串散列到散列表的同一位置,使散列表中某些链表过长,极大地影响了散列表的均勻性。使得串匹配方法在校验阶段的时间代价会大幅提高,显著影响方法的整体性能。

发明内容
因此,本发明的目的在于克服上述现有技术的缺陷,通过合理地选择模式串子窗口来提高基于散列的串匹配方法的性能。—方面,在本发明的一个实施例中提供了一种用于基于散列的串匹配中的选择模式串子窗口的方法,所述方法包括以下步骤步骤1)求得模式串集合中最短模式串长度m ;步骤2~)对于模式串集合中的每个模式串,计算其所有长度为m的子串的散列值, 组成散列值集合;步骤;3)确定所述模式串集合与所述散列值集合中的元素的一一对应关系,所述对应关系应满足模式串所对应的散列值是根据该模式串的一个长度为m的子串计算出散列值,同时将这个子串设置为该模式串的子窗口。根据本发明实施例的选择模式串子窗口的方法,所述步骤;3)包括统计各模式串长度为m的子串的散列值的出现次数;对于每个模式串,选择出现次数最少的其子串的散列值与该模式串相对应并将该子串设置为该模式串的子窗口。根据本发明实施例的选择模式串子窗口的方法,所述步骤3)包括用数组 Count [h,]来记录模式串集合中各模式串长度为m的子串的散列值、的出现次数;对于每个模式串,逐个扫描其长度为m的子串Pi,子串Pi的散列值表示为Iii,选取Count [hj最小的子串Pi来作为该模式串的子窗口。在其他实施例中,步骤幻中也可以采用最大流法或匈牙利法来确定所述模式串集合与所述散列值集合中的元素的一一对应关系。又一方面,在本发明的一个实施例中提供了一种基于散列的串匹配方法。该方法首先采用上述实施例中所提供的选择模式串子窗口的方法来选择模式串集合中各个模式串对应的子窗口 ;然后,对模式串集合中每个模式串,截取该模式串的子窗口来计算该模式串的散列值,并建立散列表。其他步骤与现有的基于散列的串匹配方法相同。与现有技术相比,本发明的实施例所提供的串匹配方法通过选择每个模式串的最优子窗口来计算该模式串的散列值,并以此来建立散列表,从而可以在大量的模式串有相同的前缀、后缀或子串的情况下,确保模式串尽量均勻地散列到散列表中,相比现有的基于散列的串匹配方法,性能有很大提高。


以下参照附图对本发明实施例作进一步说明,其中图1为现有的基于散列的串匹配方法基本流程示意图;图2为根据本发明实施例的模式串及其子串的散列值的对应关系示意图;图3为根据本发明一个实施例的模式串及其子串的散列值的对应关系示意图;图4为根据现有的直接截取模式串前缀的串匹配方法所建立的散列表的示意图;图5为根据本发明的实施例的基于散列的串匹配方法所建立的散列表的示意图;图6为Karp-Rabin方法与本发明的基于散列的串匹配方法的一个实施例的匹配速度对比示意图;图7为根据本发明实施例的基于散列的串匹配方法相比Karp-Rabin方法的性能改善示意图;图8为mi-Manber方法与本发明的基于散列的串匹配方法的又一个实施例的匹配速度对比示意图;图9为根据本发明实施例的基于散列的串匹配方法相比mi-Manber方法的性能改善示意图。
具体实施例方式为了使本发明的目的,技术方案及优点更加清楚明白,以下结合附图通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明, 并不用于限定本发明。在本发明的一个实施例中提供了选择模式串的最优子窗口的方法。所谓模式串的最优子窗口,就是一个模式串最“独特”的部分,最具有代表性、最能将该模式串与其他模式串区分开的子串。选择模式串的最优子窗口,就是要寻找一组模式串及其子串的散列值一一对应关系,使得每个模式串尽可能对应不同的散列值,最大程度的减少不同模式串对应相同散列值的情况的发生。图2为模式串及其子串的散列值的对应关系的示意图。在本发明的实施例中将要截取的模式串子串的长度称为模式串子窗口大小,表示为m,散列函数表示为H。如图2所示,模式串及其长度为m的子串的散列值的对应关系可以用无向图来表示。模式串集合表示为P = {Pn P2,...,Pj,集合P中的元素Pi,即各模式串,组成顶点集V1,即图2中左侧一列顶点。模式串所有长度为m的子串的散列值组成顶点集V2,即图2中右侧一列顶点。无向图中所有的边组成集合E,i = ,v)e£,其中u e Vl, ν e V2,当且仅当ν是u的子串的散列值,即ν = H(u的长度为m的子串)。从上文可见,图2实际上是一个二部图,即G =〈VpVyE〉。因此,选择模式串的最优子窗口,实际上就是在上述二部图中选出边集M中任意两条边都没有公共的端点(即模式串与其子串的散列值一一对应),且G中不存在边集M1,使得IM1 ι > |Μ|。这样,模式串的最优子窗口选择问题就可以转化为二部图的最大匹配问题。(Slhttp:// en. wikipedia. org/wiki/Matching_(graph_theory))。图中虚线的边组成的边集为该二部图的最大匹配,也是最终模式串最优子窗口选择的结果,也就是根据虚线边所对应的两个顶点模式串u,其长度为m的子串Pi的散列值v,选择该子串Pi为模式串u的最优子窗口。二部图的最大匹配问题是图论中的经典问题,求解的方法主要有两种最大流法和匈牙利方法。这两种方法能求得理论上的最优解,但方法的复杂度非常高,计算代价大, 当模式串集合较大时,不适合在实际工程中应用。在本发明的一个实施例中提供了一种二部图近似最大匹配的求解方法,用该近似方法来求解模式串的最优子窗口。该模式串最优子窗口选择方法包含如下步骤1)求得模式串集合中最短模式串长度m,初始化数组Count,将每个元素置为零, 该数组用以记录各模式串子串的散列值的出现次数。2)对于模式串集合中的每个模式串,计算其所有长度为m的子串的散列值h, Count数组中对应元素值加一,即Count [h]++。3)对于每个模式串,逐个扫描其长度为m的子串Pi,子串Pi的散列值表示为比,选出其散列值出现次数最少的子串Pi,即求出Count [hi]最小的Pi,选定该子串Pi作为该模式串的最优子窗口。在其他实施例中,也可以采用本领域技术人员所熟知的二部图的最大匹配的求解方法来选择模式串的最优子窗口,例如上文提及的最大流法和匈牙利方法。在上述实施例
6中,可以采用本领域普通技术认识所熟知的任何现有技术来求得模式串集合中最短模式串长度m。下面,以URL数据为例来说明本发明实施例所提供的模式串最优子窗口选择方法的具体步骤。URL数据是一类典型的存在大量相同前缀、后缀或子串的数据,而且URL过滤是很多信息内容安全系统的核心技术之一,如防火墙、垃圾邮件过滤系统、网络内容过滤系统等。模式串间存在大量同前缀、同子串和同后缀是URL数据的一个典型特点。为了更好地理解本发明,以下面的URL数据的模式串集合为例进行说明P = {bbs. byr. cn, bbs. byr. cn/article/Talking/4959770, bbs. byr. cn/ article/Talking/4959732, bbs.byr.cn/article/Talking/4958938, bbs.byr.cn/ article/Talking/4959567}为便于说明原理,本实施例中采用的散列函数为H(p) = P,即字符串的散列值为字符串本身。在实际应用中,可根据实际的需求选择合适的散列函数。在一个实施例中, 散列函数可以采用如参考文献1中的二项式散列。在二项式散列中,其模式串表示为X =
η
W··χη,二项式散列函数表示为= (Σ其中,B为选定的整数,ρ为散列
表的大小。在又一个实施例中,散列函数可以采用参考文献2中的循环冗余校验散列。在循环冗余校验散列中,其模式串的二进制编码表示为D = Cl1Cl2…dn,CliG {0,1},将模式串的二进制编码看做是系数为0或1的多项式D(X) = Cl1 · Xn-^d2 · χη_2+···+(1η。采用循环冗余校验散列时,将D(X)除以预先设定的生成多项式G(X)得到的余数即为散列值。在其他实施例中,还可以选择均勻性较好的散列函数,如CRC32、MD5等等。在本实施例中,该模式串集合P对应的二部图如图3所示,具体流程为1)求得模式串集合P中最短模式串长度m= 10,初始化数组Count,数组每个元素置为零。2)Pl = bbs. byr. cn 长度为 m = 10 的子串只有一个,即 P1 本身,则 Count [H(bbs. byr. cn) ] = Count [H (bbs. byr. cn) ] +1 = 1。p2 = bbs. byr. cn/article/Talking/4959770 的第一个子串为 bbs. byr. cn,则 Count [H(bbs. byr. cn) ] = Count [H(bbs. byr. cn) ]+1 = 2 ;第二个子串为 bs. byr. cn/,则 Count [H(bs. byr. cn/) ] = Count [H(bs. byr. cn/)]+l = 1 ;以此类推,直至最后一个子串 ng/4959770,则 Count[H(ng/4959770)] = Count [H(ng/4959770) ]+1 = 1。对于p3,p4,p5依次分别求其长度为m = 10的子串的散列值,将Count中的对应项加一。最终求得的Count数组如表1所示。表ICount数组数值
对应子串数值对应子串数值对应子串数值对应子串数值bbs. byr. cn5n/article/4/Talking/44lking/49581bs.byr.cn/4/article/T4Talking/494king/49589权利要求
1.一种用于基于散列的串匹配中的选择模式串子窗口的方法,所述方法包括 步骤1)求得模式串集合中最短模式串长度m ;步骤幻对于模式串集合中的每个模式串,计算其所有长度为m的子串的散列值,组成散列值集合;步骤3)确定所述模式串集合与所述散列值集合中的元素的一一对应关系,所述对应关系应满足模式串所对应的散列值是根据该模式串的一个长度为m的子串计算出散列值, 同时将这个子串设置为该模式串的子窗口。
2.根据权利要求1所述的选择模式串子窗口的方法,所述步骤幻包括以下步骤 统计各模式串长度为m的子串的散列值的出现次数;对于每个模式串,选择出现次数最少的其子串的散列值与该模式串相对应并将该子串设置为该模式串的子窗口。
3.根据权利要求1所述的选择模式串子窗口的方法,所述步骤幻包括以下步骤 用数组Coimt&i]来记录模式串集合中各模式串长度为m的子串的散列值、的出现次数;对于每个模式串,逐个扫描其长度为m的子串Pi,子串Pi的散列值表示为Iii,选取 Count [hj最小的子串Pi来作为该模式串的子窗口。
4.根据权利要求1所述的选择模式串子窗口的方法,所述步骤幻中采用最大流法来确定所述模式串集合与所述散列值集合中的元素的一一对应关系。
5.根据权利要求1所述的选择模式串子窗口的方法,所述步骤幻中采用匈牙利法来确定所述模式串集合与所述散列值集合中的元素的一一对应关系。
6.一种基于散列的串匹配方法,所述方法包括以下步骤 步骤1)求得模式串集合中最短模式串长度m ;步骤幻对于模式串集合中的每个模式串,计算其所有长度为m的子串的散列值,组成散列值集合;步骤3)确定所述模式串集合与所述散列值集合中的元素的一一对应关系,所述对应关系应满足模式串所对应的散列值是根据该模式串的一个长度为m的子串计算出散列值, 同时将这个子串设置为该模式串的子窗口 ;步骤4)对模式串集合中每个模式串,截取该模式串的子窗口来计算该模式串的散列值,并建立散列表。
7.根据权利要求6所述的串匹配方法,所述步骤幻包括以下步骤 统计各模式串长度为m的子串的散列值的出现次数;对于每个模式串,选择出现次数最少的其子串的散列值与该模式串相对应并将该子串设置为该模式串的子窗口。
8.根据权利要求6所述的串匹配方法,所述步骤幻包括以下步骤用数组Coimt&i]来记录模式串集合中各模式串长度为m的子串的散列值、的出现次数;对于每个模式串,逐个扫描其长度为m的子串Pi,子串Pi的散列值表示为Iii,选取 Count [hj最小的子串Pi来作为该模式串的子窗口。
9.根据权利要求6所述的串匹配方法,所述步骤幻中采用最大流法来确定所述模式串集合与所述散列值集合中的元素的一一对应关系。
10.根据权利要求6所述的串匹配方法,所述步骤幻中采用匈牙利法来确定所述模式串集合与所述散列值集合中的元素的一一对应关系。
全文摘要
本发明提供一种基于散列的串匹配方法及其选择模式串子窗口的方法。通过选择每个模式串的最优子窗口来计算该模式串的散列值,并以此来建立散列表。从而在大量的模式串有相同的前缀、后缀或子串的情况下,确保模式串尽量均匀地散列到散列表中,提高散列表的均匀性,保证基于散列的串匹配方法的高效运行。
文档编号G06F17/30GK102243656SQ20111016245
公开日2011年11月16日 申请日期2011年6月16日 优先权日2011年6月16日
发明者刘庆云, 刘燕兵, 汪立东, 王勇, 谭建龙, 邵妍, 郭莉, 陈训逊 申请人:中国科学院计算技术研究所, 国家计算机网络与信息安全管理中心
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1