确定自动机状态转换表的空间压缩方法

文档序号:6605858阅读:373来源:国知局
专利名称:确定自动机状态转换表的空间压缩方法
技术领域
本发明涉及信息检索领域,特别涉及确定自动机状态转换表的空间压缩方法。
背景技术
近年来,正则表达式匹配已经成为网络安全领域的一个研究焦点。网络通信过程 中对实时性和高效性的需求,增强了确定自动机(DFA)在识别正则表达式过程中的重要 性。然而,随着正则表达式在实际应用中的不断复杂化,由正则表达式所生成的DFA的状态 规模也不断增大,DFA状态规模的不断增大使得计算机存储空间的消耗急剧增长,这种急剧 增长已经成为限制正则表达式应用的一个瓶颈。基于上述原因,需要对DFA空间进行压缩, DFA空间的压缩方法已经成为学者关注的焦点。现有技术中存在DFA空间的压缩方法,如在参考文献1 “Fast and memory-efficient regular expression matching for deep packet inspection. Proceedings of the 2006 ACM/IEEE symposium on Architecture for networking and communications systems 2006, San Jose, California, USA December 03-05,2006” 中 利用规则重写和规则分类的方法来简化正则表达式,文中提出把一组正则表达式集合分成 若干组,每组都可用中等规模的DFA来识别。然而这一重写规则的方法仅适用于非重叠匹 配的情况。在参考文献 2 “Algorithm to Accelerate Multiple Regular Expressions Matching for Deep Packet Inspection Conference -SIGCOMM' 06 September 11-15, 2006”中提出了用D2FA方法来压缩DFA的存储空间。D2FA方法利用默认转换来消除重复 的转换,但是识别一个字符的状态变换时间将成比例的增长。在参考文献3 “An improved algorithm to accelerate regular expression evaluation, Proceedings of the 3rd ACM/IEEE Symposium on Architecture for networking and communications systems, 145-154,2007”提出了一种DFA的压缩方法,它在处理长度为N的字符串时最多做2N次状 态变迀,这种方法可达到与D2FA相当的压缩效果,但同样具有识别时间长的缺陷。在参考文 献 4 "Animproved DFA for fast regular expression matching,ACM SIGCOMM Computer Communication Review, Volume 38,Issue 5 (October 2008),Pages 29—40”中,提出了用 δ FA方法来消除DFA状态转换表中的冗余。在DFA的遍历过程中,对相同的输入字符临近 状态分享大部分的下一跳状态,因此当前状态的转换可以从其父节点的状态转换表中动态 的检索出来。但是每次状态转换都需要更新当前状态的状态转换表,非常费时。在参考文献 5 "XFA :Faster Signature Matching with Extended Automata, Security and Privacy, 2008. SP 2008. IEEESymposium, pp. 187-201,18-22May 2008”提出了用 XFA 的方法来解决 两类特殊的正则表达式的指数爆炸问题。该方法对DFA进行扩展,在DFA的每个状态上附 加计数器来记录匹配过程中正则表达式中字符重复的次数。该方法只能解决某些正则表达 式的指数爆炸问题,不具有通用性。综上所述,现有技术中的方法存在两个共同的特点(1)增加时间开销来换取空 间的减少;(2)没有最坏情况下的空间开销保证。虽然上述方法在某些特殊的情况下是有效的,但是仍需要做进一步的改进。

发明内容
本发明的目的是克服现有技术中的确定自动机状态表的空间压缩方法所具有的 时间开销大的缺陷,从而提供一种时间开销与空间开销都有明显提高的空间压缩方法。为了实现上述目的,本发明提供了一种确定自动机状态转换表的空间压缩方法, 包括步骤1)、将确定自动机状态转换表表示为一个mXn的矩阵A,其中m代表确定自 动机中的状态的个数,η代表字符集的大小;步骤2)、定义一个大小为m的列向量X和一个大小为η的行向量Y ;步骤3)、对所述的列向量X和所述的列向量Y做迭代计算,直到对于任意的 1 ^ i ^m, X[i]是多重集Di.中频率最高的元素,并且对于任意的1 < j < n,Y[j]是多 重集Dj中频率最高的元素;其中,所述的Di. = {A[i,j]_Y[j] |1彡j ( η},所述的Dj = {A[i,j]-X[i] |1 ^ i ^m};步骤4)、由所述的矩阵A、列向量X和行向量Y计算稀疏矩阵R,并压缩所得到的稀 疏矩阵 R;其中,R[i,j] = A[i,j]-X[i]_Y[j]。上述技术方案中,所述的步骤3)包括步骤3-1-1)、以随机的方式为所述的列向量X和所述的行向量Y赋初值;步骤3-1-2)、计算列向量X的值,包括首先令Di. = {A[i,j]_Y[j]|l彡j彡n},然后用a表示所述Di.中出现频率最高的 元素,如果a在Di.中的出现次数大于X[i]在Di.中的出现次数,则令X[i] =^否则乂[土] 的值保持不变;步骤3-1-3)、计算行向量Y的值,包括首先令Dj = {A[i,j]_X[i] |1彡i彡m},然后用a等于Dj中出现频率最高的元 素,如果3在0」中的出现次数大于Y[j]在0」中的出现次数,则令Y[j] =a,否则Y[j]的 值保持不变;步骤3-1-4)、判断所述列向量X与行向量Y的值是否发生变化,如果两者都没有发 生变化,结束步骤3)的操作,否则重新执行步骤3-1-2)。上述技术方案中,所述的步骤3)包括步骤3-2-1)、以随机的方式为所述的列向量X和所述的行向量Y赋初值;步骤3-2-2)、计算行向量Y的值,包括首先令Dj = {A[i,j]_X[i] |1≤i≤m},然后用a等于Dj中出现频率最高的元 素,如果3在0」中的出现次数大于Y[j]在0」中的出现次数,则令Y[j] =a,否则Y[j]的 值保持不变;步骤3-2-3)、计算列向量X的值,包括首先令Di. = {A[i,j]_Y[j]|l≤j彡n},然后用a表示所述Di.中出现频率最高的 元素,如果a在Di.中的出现次数大于X[i]在Di.中的出现次数,则令X[i] =^否则乂[土] 的值保持不变;步骤3-2-4)、判断所述列向量X与行向量Y的值是否发生变化,如果两者都没有发生变化,结束步骤3)的操作,否则重新执行步骤3-2-2)。上述技术方案中,在所述的步骤4)中,采用矩阵压缩方法对所述的稀疏矩阵R进 行压缩。上述技术方案中,所述的矩阵压缩方法为包括二分查找法、三数组法和 Tetris-哈希法在内的经典矩阵压缩方法。本发明还提供了一种用所述的确定自动机状态转换表的空间压缩方法所得到的 结果实现状态查询的方法,包括步骤1)、读取当前状态S,当前输入字符c ;步骤2)、令 t = X [s]+Y [C];步骤3)、查看稀疏矩阵R中的元素R[s,c]是否为零,如果不是,用t+R[s,c]替换 t,如果是,则无需替换;所得到的结果t为所要转换的下一个状态。上述技术方案中,在所述的步骤3)中,采用BloomFilter方法查看稀疏矩阵R中 的元素R[s, c]。本发明的优点在于本发明的确定自动机状态转换表的空间压缩方法在减少内存中所占用空间的同 时,大大减少了空间开销。


图1为由正则表达式所生成的自动状态机的示意图;图2为一个正则表达式的确定自动状态机状态转换表的矩阵分解过程示意图;图3为本发明的确定自动机状态转换表的空间压缩方法的流程图。
具体实施例方式下面结合附图和具体实施方式
对本发明加以说明。在一个实施例中,有如下正则表达式a+|b+C|C*d+。利用该正则表达式可以构建 确定自动机(DFA)。由正则表达式构建确定自动机的过程为本领域技术人员所公知的现有 技术,它包括首先将正则表达式解析成一棵表达树,然后将该表达树转换成非确定自动机 (NFA),最后把非确定自动机转换为确定自动机。上述过程中正则表达式的表达树转换为 NFA的方法有很多种,在本实施例中可采用Thompson构造法。图1是前述正则表达式所生 成的DFA的示意图。在得到DFA后,可将DFA中的状态转换关系用矩阵表示,这一矩阵被称 为状态转换表。在下面的表1中给出了图1所示DFA所生成的状态转换表。
表 1以上根据正则表达式生成DFA,进而得到DFA的状态转换表的实现方法都为现有 技术,本发明主要涉及在得到DFA的状态转换表后,如何压缩这一状态转换表,以减少存储 空间。DFA的状态转换表可以表示为一个mXn的矩阵A,其中m代表状态的个数,η代表 字符集的大小,而A[i,j]即为在当前状态i读入字符j所达到的下一个状态。出于说明的 方便,本实施例中所列举的正则表达式的形式十分简单,使得与其对应的表1中的状态转 换表的形式也十分简单,不会占据多大的内存空间。但本领域技术人员很容易想到,一旦正 则表达式复杂化,则所对应的DFA的状态转换表就会消耗大量的内存。因此,需要对DFA的 状态转换表进行压缩。本发明在实现对状态转换表的压缩时,利用一个特殊的矩阵D来逼 近A,以使得R = A-D尽可能稀疏,从而达到用D和R来代替A,减小存储空间的目的。也就是说,本发明所要解决的问题形式化定义为设X是一个大小为m的列向 量,Y是一个大小为η的行向量,D是一个由X和Y确定的mXn的矩阵,并满足D[i,j]= X[i]+Y[j] (1彡i彡m,1彡j彡η)。对于给定的矩阵Amxn,求解X和Y以使得矩阵R = A-D =[A[i,j]-X[i]_Y[j]中非零元素的个数最少。下面仍然以表1中的矩阵A为例,结合图2和图3就如何确定列向量X、行向量Y 以及稀疏矩阵R加以说明。首先以随机的方式为列向量X和行向量Y赋初值。假设初始时X= {1,2,4,0,4} T,Y= {4,3,3,2},则根据R = A-D= [A[i,j]_X[i]_Y[j]]的公式,此时所得到的矩阵R的 值如下面的表2所示。 表2此时,需要对X、Y的值做迭代计算。在第一次迭代计算的过程中,首先计算X的 值,令Di. = {A[i,j]-Y[j] 11彡j彡η},因此用表1中的第一行减去Y的初始值,得到D1.= {-3,-1,-3,1}。然后从D1.中读取出现频率最高的元素,用a表示这一出现频率最高的元素, 显然在D1.中,a = -3。接着判断3在01.中的出现次数是否大于X[l]在D1.中的出现次数, 如果大于,令X[l] =a。当a = _3时,其在队.中的出现次数为2,而X[l] = 1,其在D1.出 现的次数为1,a在D1.出现的次数大于X[l]在01.出现的次数,所以更新X[l] =a = -3。 参照上述方法,可以得到D2.,然后从D2.中找出出现频率最高的元素a,通过比较a与X[2] 在~中的出现次数,可以知道是否要将X[2]的值替换为出现频率最高的元素。结合前述 实例可以知道,X[2]的值发生了变化,新的X[2] =-3。类似的,可以知道,X[3] = 1,X[4] =-3,X[5] = -3。也就是说,在经过第一次迭代计算后,X由原来的[1,2,4,0,4]τ转变为 [-3,-3,1, _3,-3]τ。接着对Y的值做迭代计算。在计算Y的值时,令Dj = {A[i,j]_X[i] |1彡i彡m}, 因此用表1中的第一列减去X的值。需要说明的是,此处所述的X的值不是X的初始值,而 是X在经过第一次迭代后的新的值。因此,计算得到的D.i= {4,4,0,4,4}τ。在得到D1后, 同样可以用a表示出现频率最高的元素,然后将出现频率最高的元素在D1中的出现次数与 Y[l]进行比较,由于Y[l] =4 = a,所以无需改变Y[l]的值。同理可计算得到Υ[2] =5、 Υ[3] = 3、Y[4] = 6。也就是说,在经过第一次迭代计算后,Y由原来的{4,3,3,2}改变为 {4,5,3,6}。在经过第一次迭代计算后,X、Y的值都发生了变化,因此,矩阵R的值也会发生相 应变化,在下面的表3中给出了矩阵R的新的值。 表3在完成第一次迭代计算后,需要判断是否继续进行迭代计算。如果X和Y的值在此 次迭代计算过程中都没有发生改变,则无需继续迭代计算,否则,需要继续进行迭代计算。 在第一次迭代计算过程中,X和Y的值都发生了变化,因此需要继续进行迭代计算。在第二次的迭代计算过程中,同样先计算X的值。X值的计算过程与第一次迭代计 算过程相类似,只是此时Y的值为经过第一次迭代计算后的Y值。经过第二此迭代计算后 的X的值由{-3,-3,1,-3,-3}τ改变为{-3,-3,-3,-3,-3}τ。然后继续计算Y的值,Y的值 没有发生变化,同样为{4,5,3,6}。在得到新的X、Y值后,继续计算矩阵R的值,在下面的表4中给出了矩阵R的新的值。
表 4由于X的值发生了变化,因此在第二此迭代计算完成后,需要继续进行迭代计算 过程。第三次迭代计算过程与前两次相似,迭代计算的结果为X = {-3,-3,-3,-3,-3} T,Y= {4,5,3,6} 0与第二次迭代计算相比,此次迭代计算所得到的Χ、Υ的值并没有发生变 化,因此矩阵R的值与表4相比同样没有发生变化,且无需继续进行迭代计算过程。由上述计算过程可以知道,表1中所涉及的用矩阵表示的DFA的状态转换表经过 多次迭代计算转换成了列向量Χ{_3,-3,-3,-3,-3}τ、行向量Υ{4,5,3,6}以及表4所示的 稀疏矩阵R。对于稀疏矩阵R可以采用现有技术中的相关方法(如现有技术中最常用的二 分查找法、三数组法和Tetris-哈希法)进行压缩操作,从而达到压缩DFA状态转换表的目 的。虽然在本实施例中,在各次迭代计算的过程中,都是先算X的值,再算Y的值,但在 其它实施例中,也可以先算Y的值,再算X的值。另外,虽然在上面的表2、表3、表4中分别 给出了当Χ、Υ的值发生变化时对应的矩阵R的值,但在实际操作中,并不需要多次计算矩阵 R的值,而且出于减少计算量的考虑,通常是在Χ、Υ的值确定后,才一次性计算矩阵R的值。通过理论推导很容易知道,利用本发明方法压缩DFA状态转换表的空间压缩率 为 其中,m表示状态数,η表示字符数,R表示最后得到的稀疏矩阵,nonzero (R)表示 矩阵R中非零元素的个数。在表 5 中,以 L7-filter signatures、Snort signatures 等 18 组正贝U表达式集 所生成的DFA状态转换表为例,将本发明方法(在表中用MAT_ADD表示)与前述参考文献 4中所提到的δ FA算法加以比较。从比较的结果可以看出,本发明方法的空间压缩率在14 组(约占77. 8% )中优于现有的δ FA算法。
表 5
通过本发明的上述方法将DFA的状态转换矩阵A替换为列向量X,行向量Y和一个 稀疏矩阵R,并对稀疏矩阵R进行压缩以后,同样可以利用所述的X、Y以及压缩后的R快速 地实现DFA状态转换。这一状态转换过程包括已知当前状态为S,当前输入字符为C,令t = X[s]+Y[C],然后查看稀疏矩阵R的 当前位置R[S,C]是否为零,如果不是,令t+R[s,c]替换t,如果是,则无需替换。所得到的 结果t就代表所要转换的下一个状态。在上述过程中,查看稀疏矩阵R的当前位置R[s,c]是否为零时,可采用现有技术 中的BloomFilter方法。BloomFilter方法是一种效率较高的内存索引算法,它利用位数组 很简洁地表示一个集合,并能判断一个元素是否属于这个集合。该方法被广泛应用到各种 计算机系统之中表达庞大数据集及提高查找效率。本发明把BloomFilter方法用于稀疏矩 阵元素的查找,能够有效地提高查找效率。在下面的表6中给出了本发明方法(在表中用MAT_ADD表示)与参考文献4中的 S FA算法相比,在不同稀疏矩阵压缩方法下查找矩阵所花费时间(单位为秒),从中可以看 出,本发明方法所花费时间远远少于现有技术中的S FA算法,与未压缩前相比,时间开销 的差别不大。 表6最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参 照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方 案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明 的权利要求范围当中。
1权利要求
一种确定自动机状态转换表的空间压缩方法,包括步骤1)、将确定自动机状态转换表表示为一个m×n的矩阵A,其中m代表确定自动机中的状态的个数,n代表字符集的大小;步骤2)、定义一个大小为m的列向量X和一个大小为n的行向量Y;步骤3)、对所述的列向量X和所述的列向量Y做迭代计算,直到对于任意的1≤i≤m,X[i]是多重集Di.中频率最高的元素,并且对于任意的1≤j≤n,Y[j]是多重集D.j中频率最高的元素;其中,所述的Di.={A[i,j] Y[j]|1≤j≤n},所述的D.j={A[i,j] X[i]|1≤i≤m};步骤4)、由所述的矩阵A、列向量X和行向量Y计算稀疏矩阵R,并压缩所得到的稀疏矩阵R;其中,R[i,j]=A[i,j] X[i] Y[j]。
2.根据权利要求1所述的确定自动机状态转换表的空间压缩方法,其特征在于,所述 的步骤3)包括步骤3-1-1)、以随机的方式为所述的列向量X和所述的行向量Y赋初值;步骤3-1-2)、计算列向量X的值,包括首先令Di. = {A[i,j]_Y[j]|l彡j彡n},然后用a表示所述Di.中出现频率最高的元 素,如果a在Di.中的出现次数大于X[i]在Di.中的出现次数,则令X[i] =a,否则X[i]的 值保持不变;步骤3-1-3)、计算行向量Y的值,包括首先令Dj = {A[i,j]-X[i] |1彡i彡m},然后用a等于Dj中出现频率最高的元素,如 果3在0」中的出现次数大于Y[j]在0」中的出现次数,则令Y[j] =^否则¥[」]的值保 持不变;步骤3-1-4)、判断所述列向量X与行向量Y的值是否发生变化,如果两者都没有发生变 化,结束步骤3)的操作,否则重新执行步骤3-1-2)。
3.根据权利要求1所述的确定自动机状态转换表的空间压缩方法,其特征在于,所述 的步骤3)包括步骤3-2-1)、以随机的方式为所述的列向量X和所述的行向量Y赋初值;步骤3-2-2)、计算行向量Y的值,包括首先令Dj = {A[i,j]-X[i] |1彡i彡m},然后用a等于Dj中出现频率最高的元素,如 果3在0」中的出现次数大于Y[j]在0」中的出现次数,则令Y[j] =^否则¥[」]的值保 持不变;步骤3-2-3)、计算列向量X的值,包括首先令Di. = {A[i,j]_Y[j]|l彡j彡n},然后用a表示所述Di.中出现频率最高的元 素,如果a在Di.中的出现次数大于X[i]在Di.中的出现次数,则令X[i] =a,否则X[i]的 值保持不变;步骤3-2-4)、判断所述列向量X与行向量Y的值是否发生变化,如果两者都没有发生变 化,结束步骤3)的操作,否则重新执行步骤3-2-2)。
4.根据权利要求1所述的确定自动机状态转换表的空间压缩方法,其特征在于,在所 述的步骤4)中,采用矩阵压缩方法对所述的稀疏矩阵R进行压缩。
5.根据权利要求4所述的确定自动机状态转换表的空间压缩方法,其特征在于,所述的矩阵压缩方法为包括二分查找法、三数组法和Tetris-哈希法在内的经典矩阵压缩方 法。
6.一种用权利要求1-5之一的确定自动机状态转换表的空间压缩方法所得到的结果 实现状态查询的方法,包括步骤1)、读取当前状态s,当前输入字符c ; 步骤 2)、令 t = X [s]+Y [c];步骤3)、查看稀疏矩阵R中的元素R[s,c]是否为零,如果不是,用t+R[s,c]替换t,如 果是,则无需替换;所得到的结果t为所要转换的下一个状态。
7.根据权利要求6所述的状态查询方法,其特征在于,在所述的步骤3)中,采用 BloomFilter方法查看稀疏矩阵R中的元素R[s,c]。
全文摘要
本发明提供一种确定自动机状态转换表的空间压缩方法,包括将确定自动机状态转换表表示为一个m×n的矩阵A,其中m代表确定自动机中的状态的个数,n代表字符集的大小;定义一个大小为m的列向量X和一个大小为n的行向量Y;对所述的列向量X和所述的列向量Y做迭代计算,直到对于任意的1≤i≤m,X[i]是多重集Di.中频率最高的元素,并且对于任意的1≤j≤n,Y[j]是多重集D.j中频率最高的元素;其中,所述的Di.={A[i,j]-Y[j]|1≤j≤n},所述的D.j={A[i,j]-X[i]|1≤i≤m};由所述的矩阵A、列向量X和行向量Y计算稀疏矩阵R,并压缩所得到的稀疏矩阵R;其中,R[i,j]=A[i,j]-X[i]-Y[j]。本发明的确定自动机状态转换表的空间压缩方法在减少内存中所占用空间的同时,大大减少了空间开销。
文档编号G06F17/30GK101916259SQ201010226250
公开日2010年12月15日 申请日期2010年7月6日 优先权日2010年7月6日
发明者何慧敏, 刘燕兵, 刘萍, 谭建龙, 郭莉 申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1