确定自动机的空间压缩方法

文档序号:6575305阅读:351来源:国知局

专利名称::确定自动机的空间压缩方法
技术领域
:本发明涉及网络安全领域,特别涉及确定自动机的空间压缩方法。
背景技术
:正则表达式(RegularExpression)是计算机科学中用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。利用正则表达式来匹配那些符合某个模式的文本内容的方法也被称为正则表达式匹配算法。正则表达式匹配算法一直都是计算机科学的研究焦点之一,它被广泛应用于网络入侵检测、计算机病毒特征码匹配、网络信息内容安全、信息检索等多个领域中。确定自动机(DFA)是正则表达式匹配算法的基础,DFA在计算机中以状态转换表的方式加以存储。通常,用DFA进行正则表达式匹配的基本过程如下步骤a、对于给定的正则表达式,用经典的方法构建相应的DFA;步骤b、采用DFA对输入的文本(或者网络流)进行匹配。这一匹配过程又包括步骤b-1、当前状态current处于DFA的初始状态;步骤b-2、对于每一个输入的文本字符t[i],根据状态转换表的内容从自动机的当前状态current跳转到它的后继状态next;步骤b-3、如果后继状态next是自动机的接受状态,那么说明当前文本位置发生了一次匹配,输出匹配位置;步骤b-4、继续处理下一个字符。从上述过程可以看出,DFA是正则表达式匹配过程的核心。DFA中用于记录当前状态current到后继状态next的转换情况的状态转换表的大小(也就是下文中所提到的DFA存储空间)对实现正则表达式匹配时所占用的计算机存储资源的多少直接相关,而正则表达式匹配的速度也和DFA状态转换的速度有着密切的联系。近年来,随着待处理信息量的不断增强和实时处理的紧迫需求,对正则表达式匹配算法的性能提出了更高的要求。正则表达式匹配算法的性能包括匹配速度和所占用计算机存储资源两个方面,而DFA正与这两个方面有着密切的联系。因此,本领域技术人员希望通过对DFA的改变来改进现有的正则表达式匹配算法,使得改进后的正则表达式匹配算法能够对DFA存储空间进行压缩以减少对计算机存储资源的占用,并能加快DFA状态的转换速度。在参考文献1(AlgorithmtoAccelerateMultipleRegularExpressionsMatchingforDeepPacketInspectionConference:SIGCOMM'06September11-15,2006)中提出了D^A方法来压缩DFA的存储空间。它通过引入默认转移(defaulttransition)来减少状态转移的数目,从而降低自动机的存储空间。引入默认转移能够极大地减少DFA的状态转移,在该文中所记载的实验表明,该方法平均能够减少95%的状态转移。但是该方法的缺陷在于每处理一个字符可能需要在D2FA中进行多次状态跳转,导致实际的匹配性能不高。在参考文献2(AnimprovedDFAforfastregularexpressionmatching,ACMSIGCOMMComputerCommunicationReview,Volume38,Issue5(October2008),Pages29-40)中提出了5FA方法来压缩DFA的状态表。该方法提取子状态和父状态的相同元素来消除状态转换表的冗余。在状态访问序列中,如果当前状态t要访问的元素next[t,c]与其前一个状态s的对应元素next[s,c]相同,那么可以直接从前一个状态中读取相应的值。该方法能够取得非常好的压缩效果,但是非常费时的。综上所述,现有技术中所公开的正则表达式匹配算法无法同时提高DFA空间的压缩效果与DFA状态的转换速度,从而影响了正则表达式匹配算法的最终匹配性能。
发明内容本发明的目的是克服现有技术无法同时提高DFA空间的压缩效果与DFA状态的转换速度的缺陷,从而提供一种在压缩效果与转换速度上达到良好平衡的方法。为了实现上述目的,本发明提供了一种确定自动机的空间压缩方法,包括步骤1)、对确定自动机中的各个状态做分簇操作,得到多个用于表示6步骤2)、将所述确定自动机中各个状态的转移边按步骤1)所得到的簇分类,得到多个簇矩阵、与所述簇矩阵对应的位图以及一个剩余矩阵;其中,所述簇矩阵包括指向同一簇的转移边,所述位图用于描述簇矩阵中相关元素的有效性;所述剩余矩阵包括确定自动机中未被包含到所述簇矩阵中的剩余转移边;步骤3)、为所述簇矩阵中的各行提取基值,然后将所述簇矩阵转换成一个偏移量矩阵,再将偏移量矩阵中的各行合并,增加用于标记可合并状态的索引数组,得到所述簇矩阵的压缩矩阵。上述技术方案中,还包括步骤4)、压缩所述的剩余矩阵。上述技术方案中,所述的步骤l)包括步骤l-l)、从确定状态机的初始状态开始做广度优先遍历,得到trie树结构;步骤l-2)、对所得到的trie树中的各个状态做分簇操作,得到多个用于表示状态集合的簇;其中,在做分簇操作时,将所述确定自动机的初始状态作为一个单独的簇,将所述确定自动机中一个状态的所有直接后继状态的集合作为一个簇。上述技术方案中,所述的步骤2)包括步骤2-1)、判断所述确定自动机中剩余转移边的数目是否小于阈值,若小于,则将剩余的转移边填入所述的剩余矩阵中,否则,执行下一步;步骤2-2)、将所述确定自动机中剩余的所有转移边中指向同一簇最多的转移边转移到一个簇矩阵中,并用一个对应的位图表示该簇矩阵中元素的有效性。上述技术方案中,在所述的步骤3)中,所述的基值为基值所在行所对应簇中的最小值,所述的偏移量矩阵中的偏移量为所述簇矩阵中的转移边的值与所述基值间的差。上述技术方案中,在所述的步骤3)中,将偏移量矩阵中的各行合并时,满足以下规则在矩阵T中,当且仅当对任意字符c满足T[r][c]--l或者T[s][c]:-l或者T[s][c]二T[r][c]时,行r和行s是可合并的,其中,"-r代表对应位置的值为无效值。上述技术方案中,所述的位图包括多个与所述簇矩阵具有一一对应关系的位图,所述位图用于描述与其具有对应关系的簇矩阵中元素的有效性。上述技术方案中,所述的位图包括一个位图,所述位图利用位图中元素的数值大小描述所述转移边在按簇分类后的位置。本发明还提供了一种由所述的确定自动机的空间压缩方法所得到的矩阵实现正则表达式匹配的方法,包括输入文本,用所述矩阵对所述输入文本进行匹配。上述技术方案中,所述的用所述矩阵对所述输入文本进行匹配包括步骤a)、在一个簇矩阵对应的位图中查看bitmap[s][c]是否为有效状态,若为有效状态,则将所述簇矩阵中基值base[s]和偏移量T[equal[s]][c]之和的值作为当前状态的直接后继状态,若为无效状态,执行下一步;其中,所述的s代表当前状态,所述的c代表输入文本中所要匹配的字符,所述的equal代表用于标记可合并状态的索引数组,所述的T代表簇矩阵;步骤b)、判断是否还存在未经处理的簇矩阵,若存在,则取出未经处理的下一个蔟矩阵及其位图后,重新执行步骤a),否则,执行下一步;步骤c)、从所述的剩余矩阵中取出T'[s]][c]的值,作为当前状态的直接后继状态;其中,所述的T'表示剩余矩阵。上述技术方案中,在所述的步骤b)中,按照所包含的转移边数量的多少依次选择所述的簇矩阵。本发明还提供了一种确定自动机的空间压缩装置,包括分簇模块、簇矩阵划分模块以及簇矩阵压缩模块;其中,所述的分簇模块对确定自动机中的各个状态做分簇操作,得到多个用于表示状态集合的簇;所述的簇矩阵划分模块将所述确定自动机中各个状态的转移边按簇分类,得到多个簇矩阵、与所述簇矩阵对应的位图以及一个剩余矩阵;其中,所述簇矩阵包括指向同一簇的转移边,所述位图用于描述所对应簇矩阵中相关元素的有效性;所述剩余矩阵包括确定自动机中未被包含到所述簇矩阵中的剩余转移边;所述的簇矩阵压缩模块为所述簇矩阵中的各行提取基值,然后将所述簇矩阵转换成一个偏移量矩阵,再将偏移量矩阵中的各行合并,增加用于标记可合并状态的索引数组,得到所述簇矩阵的压缩矩阵。上述技术方案中,还包括剩余矩阵压缩模块,所述的剩余矩阵压缩模块压缩所述的剩余矩阵。本发明又提供了一种正则表达式匹配装置,包括文本输入模块、由所述的确定自动机的空间压缩方法所得到的矩阵以及匹配模块;其中,所述的文本输入模块输入所要匹配的文本;所述的匹配模块采用所述矩阵对输入的文本进行匹配。本发明的优点在于相对于现有的DFA压缩和匹配方法,不仅在压缩效果上有所提高,而且在实现正则表达式匹配时在匹配速度上有很大的提高。图1为与正则表达式".*A.{2}CD"所对应的DFA;图2为图1所示DFA在计算机中的存储矩阵;图3为图1所示DFA经由广度优先遍历算法所得到的trie树结构的示意图4为图2所示的存储矩阵按簇分类后所得到的簇矩阵、位图以及剩余矩阵;图5为对图4中所得到的簇矩阵T1做压缩操作的示意图;图6为本发明的确定自动机空间压缩方法的示意图。具体实施例方式下面结合附图和具体实施方式对本发明进行说明。在本实施例中,以正则表达式".*A.{2}CD"为例,对压缩该正则表达式的DFA空间的过程加以i兌明。首先由所述的正则表达式".*A.{2}CD"生成与其对应的DFA。由于由正则表达式生成DFA的过程是本领域的公知技术,因此不在此处重复说明。在图1中给出了正则表达式".*A.{2}CD"所生成的DFA的示意图。在该图中,圆圈内的0、1、2、3等数字代表状态,该DFA有0-9的10种状态。而带箭头的横线代表由一个状态转移到另一个状态的条件,箭头上的字母,如A、C、D、NotA(表示非A之外的任意字符),代表该条件的具体内容,这些带箭头的横线也被称为状态的转移边。状态转换条件的具体内容根据实际情况而发生变化,在文本匹配时,状态转换条件可以是某一具体的字符,例如,前述的状态转换条件A可以就是字母A本身。需要说明的是,图1只是DFA的一个示意图,在计算机中对此类示意图采用矩阵的方式加以存储。在图2中给出了图1中DFA的存储矩阵。在该矩阵中,第一列代表DFA中的所有状态,如0、1、2……9,而第一行代表了状态转换的条件,如A、C、D。结合图1可以看出,在状态0时,当转换条件为A时,状态由O变为l,当转换条件为C、D时,由于状态没有发生改变,因此还是0。在状态2时,当转换条件为A时,状态由2变为4,当转换条件为C、D时,由于满足图1中"NotA"的条件,因此状态由2变为5。存储矩阵中的其他状态转换关系与之类似。由于这一存储矩阵中所存储的是各个状态间的转换关系,因此,所述的存储矩阵也就是
背景技术
中所提到的状态转换表。在得到DFA后,需要为DFA中的各个状态进行划分,使得DFA的状态集合分成若干个互不相交的子集。对DFA状态的划分也被称为分簇操作,DFA状态的子集就是由分簇操作所得到的簇。对DFA中状态的分簇操作有多种实现方式,如将DFA中的每个状态作为一个单独的簇,也可按照深度优先遍历算法或广度优先遍历算法由DFA得到相应树,然后对树进行分簇操作。在一个优选实施例中,可以从DFA的初始状态开始做广度优先遍历,得到trie树结构,然后再对所得到的trie树中的各个状态做分簇操作,得到与DFA所对应的簇集。在图3中给出了图1经由广度优先遍历算法所得到的trie树结构。由于在图上做广度优先遍历的实现过程为本领域技术人员所公知,因此,在此处也不再对该过程做重复说明。在为trie树中的各个状态做分簇操作时,应当遵循以下原则初始状态是一个单独的簇,将一个状态的所有直接后继状态的集合作为一个簇。根据上述分簇原则,在图3中,初始状态"0"可以得到一个单独的簇{0},其他的由一个状态的所有后继状态的集合所得到的簇包括{1}、{2,3}、{4,5}、{6,7}、{8}、{9}。即由图3所生成的簇集为{{0},{1},{2,3},{4,5},{6,7},{8},{9}}。在得到DFA的簇集后,就可以为DFA中的各个状态的转移边按簇进行分类,并用不同的矩阵分别存储分类后的结果。如果将前文中用于表示DFA的存储矩阵称为原始矩阵,那么通过将DFA中各个状态的转移边按簇分类,并用不同的矩阵分别存储后,所述的原始矩阵可分为K+l个子矩阵,其中,前面的K个子矩阵被称为簇矩阵,第i(l<=i<=K)个簇矩阵由第i大的簇构成,最后一个矩阵由存储矩阵中剩余的矩阵元素构成,也被称为剩余矩阵。对上述簇矩阵和剩余矩阵的划分,通常采用阈值比较的方法实现。例如,可以预先设定一个阈值delta,其值为95%,然后依次提取第一个簇矩阵,第二个簇矩阵,....,直到已提取的元素比例超过delta为止。剩下的元素填入最后的剩余矩阵中,此时其元素占原始矩阵的元素的比例不超过l-delta。在本发明的一个实施例中,可以将DFA中的状态的转移边分为三类,并用三个矩阵存储分类结果。具体的说,在该实施例中,指向同一簇最多的转移边存储在矩阵T1中,同时用位图bitmapl标记矩阵Tl中的有效元素;指向同一簇第二多的转移边存储在矩阵T2中,同时用位图bitmap2标记矩阵T2中的有效元素;把剩余的转移边存储在第三个矩阵T3中。其中的矩阵T1、T2就是所述的簇矩阵,而矩阵T3则是所述的剩余矩阵。在图4中给出了对前述图2所示的存储矩阵按簇分类后所得到的矩阵Tl、位图bitmapl、矩阵T2、位图bitmap2以及矩阵T3。从图2的存储矩阵可以看出,对于"状态0"而言,其转移后所得到的"状态0"和"状态1"分属不同的簇,因此需要比较指向不同簇的转移边的数目。由于指向"状态0"的转移边有两条,指向"状态1"的转移边只有一条,因此在矩阵T1中记录指向{0}的转移边,在矩阵T2中记录指向{1}的转移边,而在矩阵T3中则不记录关于该状态的转移边的任何信息。由于在矩阵T1、T2中有些位置为有效值,有些位置为无效值,且有效值与无效值的分布不具有规律性,因此分别采用了位图bitmapl和位图bitmap2对矩阵Tl、T2中的有效元素进行标记。如在图4中,矩阵Tl中的"状态0"到"状态0"的转移边为有效,因此在位图bitmapl内将相应位置标记为有效位,而将"状态0"到"状态1"的转移边在位图bitmapl中的相应位置标记为无效位。矩阵T2的情况与之相反,因此位图bitmap2的记录情况也截然相反。另外,在图2所示的存储矩阵中还有这样一种情况"状态7"转移后的状态有三种,分别为"状态1"、"状态8"、"状态0",上述三种状态分属于三个不同的簇,因此到其中某一簇的转移边的数量都为1。对于这种情况,无法区分指向哪一个簇的转移边的数量最多,指向哪一个簇的转移边的数量第二多,因此可以将指向三种簇中任意一簇的转移边存入矩阵Tl,将指向另一簇的转移边存入矩阵T2,将指向剩余簇的转移边存入矩阵T3。由于本实施例中所给出的DFA示例较为筒单,因此,在本实施例中只将状态的转移边分为三类,并用三个矩阵存储对应类中的信息。但在其他实施例中,当DFA更为复杂时,可以增加状态的转移边的分类数,并用更多的矩阵分别存储不同的分类。例如,将DFA中的状态的转移边分为四类,并用四个矩阵存储分类结果;其中,指向同一簇最多的转移边存储在矩阵Tl中,同时用位图bitmapl标记矩阵Tl中的有效元素;指向同一簇第二多的转移边存储在矩阵T2中,同时用位图bitmap2标记矩阵T2中的有效元素;指向同一簇第三多的转移边存储在矩阵T3中,同时用位图bitmap3标记矩阵T3中的有效元素;把剩余的转移边存储在第四个矩阵T4中。从理论上说,根据前面的阈值比较法,DFA中状态的转移边的分类数目可以继续增加,但实验结果证明,一般将状态的转移边分为三类或四类时效果最佳。对簇矩阵中有效元素进行标记的位图不仅可以釆用如图4所示的表示方式,也可以采用其他的表示方式。例如,在一个实施例中,只用一个位图表示一个存储矩阵中所有元素在按簇分类后的位置。假设原存储矩阵有N行,C列,且在按簇分类后得到K个簇矩阵和1个剩余矩阵,则该位图也有N行,C列,但该位图中各个元素的数值不再是0或1,而是卩。仍(K+i"比特的整数,由该整数的数值大小可以知道存储矩阵中对应元素在按簇分类会位于哪一个簇矩阵或剩余矩阵中。采用前述图4中位图的表示方式,与一个存储矩阵所对应的位图需要KxNxC大小的存储空间,而采用该实施例中的位图表示方式,则只需要卩,(K+"lxNxC大小的存储空间,显然在存储空间上会有进一步的减少。将DFA由图2所示的存储矩阵转换为图4所示的矩阵和位图后,可以对所得到的矩阵做压缩。此处所述的压缩操作主要针对所述的簇矩阵,如前述实施例中所提到的矩阵Tl和矩阵T2。下面以前述的矩阵T1为例,对压缩操作的具体实现过程进行说明。对于如矩阵Tl这样的矩阵而言,矩阵中每行存储的转移边都指向同一个簇,因此可以把该簇的最小值作为该行的基值(base值),而将该行中原先存储的转移边的值替换为转移边相对于基值的偏移量,从而将原先的矩阵Tl转换为带有偏移量列和base值列的偏移量矩阵。如图5所示,对矩阵T1中的状态O,其转移边指向簇{0},因此base值为0,该行的有效元素同时减去0,所得到的偏移量为"0、0"。对矩阵T1中的状态1,其转移边指向簇{2,3},因此base值为2,该行的有效元素相应地减去2,所得到的偏移量分别为"0、1、1"。对矩阵Tl、T2中的其他状态的操作与之相似。在得到偏移量矩阵后,就可以对这一矩阵进行合并,从而实现对簇矩阵的压缩。在合并时,应当满足以下规则在矩阵T中,当且仅当对任意字符c满足T[r][c]二-l或者T[s][c]"l或者T[s][c一T[r][c]时,行r和行s是可合并的,其中,"-r代表对应位置的值为无效值。图5中示出了矩阵T1的偏移量矩阵在压缩前后的结果。例如,"状态1"所在行的偏移量与"状态2"、"状态3""状态4"、"状态5"、"状态6"的偏移量满足上述的合并条件,可与"状态1"合并。又如,"状态0"所在行的偏移量与"状态7"、"状态8"、"状态9"的偏移量满足上述的合并条件,因此可与"状态0"合并。在合并后,为了表示哪些状态之间发生了合并,在压缩后的矩阵中增加了用于标记可合并状态的索引数组equal。对于矩阵T2也可做类似操作。DFA的存储矩阵除了所述的簇矩阵外,还生成了剩余矩阵。由于剩余矩阵中不具有簇矩阵的特点,因此无法用前述的生成偏移量矩阵并合并偏移量矩阵的方法压缩该矩阵。剩余矩阵所占有的存储空间有限,因此可以不对剩余矩阵做压缩操作。但在一种优选实现方式中,也可以采用目前经典的稀疏矩阵压缩方法对剩余矩阵进行压缩。以上是对DFA存储矩阵进行压缩操作的全过程。在经过上述的压缩操作后,图2所示的DFA矩阵最终会转换成多个图5所示的压缩矩阵。由于在实际应用中,一个DFA中的状态数、状态转换条件远远多于实施例中所假设的情况,因此,图5中被合并项的存储空间远远大于压缩过程中新添加的base列和equal列,因而具有良好的压缩效果。在下面的表1中将本申请所使用的上述压缩方法与参考文献2所提出的5FA压缩方法的压缩效果进行比较。表中所提到的原始DFA是指未压缩前的自动机,表中"本申请的压缩方法"以及"5FA压缩方法,,项下的数字代表压缩率。所述的压缩率是DFA经压缩方法压缩后的存储空间与原始DFA的存储空间的比值,因此,压缩率越小,压缩效果越好。在表1所示出的18组测试集中,本申请的压缩方法在14组测试集上优于5FA方法,因而压缩效果在总体上占优。<table>tableseeoriginaldocumentpage14</column></row><table>表1在得到压缩后的DFA以后,可以利用这一压缩后的DFA做正则表达式匹配。在
背景技术
中已经就正则表达式匹配的基本实现步骤做了说明,下面就如何利用压缩后的DFA从自动机的当前状态current跳转到其后继状态next的过程进4亍i兌明。要实现状态的跳转首先要知道后继状态是哪一个,对后续状态的查找需要借助压缩后的DFA。在一个实施例中要做文本匹配操作,若用s代表当前所处的DFA状态,用输入字符c代表状态转换条件。压缩后的DFA就是前述实施例所得到的压缩结果,那么对状态s的下一个状态的查找过程如下。首先在位图bitmapl查看位图元素bitmapl[s][c]是否为有效状态(通常数值1代表有效),若为有效,则说明状态s的后继状态就在矩阵Tl中,矩阵Tl的索引数组元素equall[s]指向状态s所在行合并后的位置,因此状态s的后继状态是基值basel[s]和偏移量Tl[equal1[s]][c]之和的值。若为无效状态,那么需要在位图bitmap2中继续查找。在位图bitmap2中查看位图元素bitmap2[s][c]是否为有效状态,若为有效状态,则说明状态s的后继状态在矩阵T2中。矩阵T2中的索引数组元素equal2[s]指向状态s在行合并后的位置,因此状态s的后继状态是基值base2[s]和偏移量T2[equal2[s]][c]之和的值。若为无效状态,那么需要在矩阵T3中继续查找。如果矩阵T3采用了压缩算法(如前文中所提到的经典的系数矩阵压缩方法)进行压缩,那么对矩阵T3解压缩后,查看T3[s]][c]的值,所得到的结果就是状态s的后继状态。如果矩阵T3没有经过压缩,可直接查看T3[s]][c]的值。在得到状态s的后继状态后,就可以实现状态的跳转操作,进而由后继状态是否是自动机的接受状态来判断是否发生了匹配操作。在上述的实施例中,以矩阵T1、T2、T3为例,对后继状态的查找过程做了说明。在前述的说明中已经提到,在其他的实施例中,由DFA的存储矩阵所转换的矩阵的数目不限于三个。本领域的普通技术人员应当了解,结合上述实施例中所描述的思想,同样可以在其他数目的矩阵中实现对后继状态的查找。此外,在上述状态查找过程中,为了提高查找效率,根据矩阵中所包含的转移边数量的多少,按矩阵T1、矩阵T2、矩阵T3的顺序依次进行查找。但本领域的技术人员应当了解,在应用中也可以不按照这一顺序实现状态的查找,但相对而言会降低状态查找的速度。在由DFA的当前状态跳转到后继状态时,与未压缩的DFA状态转换表可以直接提取相应的后继状态相比,经过压缩的DFA状态转换表需要经过一定的计算才能得到后继状态,因此,DFA压缩方法在取得压缩效果的同时都要以损失一定的匹配速度为代价。但与现有技术中的其他DFA压缩方法相比,本申请的压缩方法在匹配速度的损失上较小。在表2中给出了本申请所使用的压缩方法与参考文献2所提出的5FA压缩方法以及未做压缩的原始DFA在匹配速度上的比较结果。在比较时,它们的稀疏表均采用三种经典的方法(顺序存储、三数组方法、Tetris-hashing)实现。从表中的数据可以看出,相对于原始DFA,本申请方法的匹配速度损失控制在15-20%以内,而5FA的匹配速度则慢100倍以上。因而本申请的压缩方法的匹配速/复大大优于5FA方法。<table>tableseeoriginaldocumentpage16</column></row><table>表2(单位MB/s)从上述说明可以看出,本申请的方法与现有技术的其他方法相比,不仅在压缩效果上有所提高,而且在实现正则表达式匹配时在匹配速度上有很大的提高。本发明还提供了一种确定自动机的空间压缩装置,包括分簇模块、簇矩阵划分模块以及簇矩阵压缩模块;其中,所述的分簇模块对确定自动机中的各个状态做分簇操作,得到多个用于表示状态集合的簇;所述的簇矩阵划分模块将所述确定自动机中各个状态的转移边按簇分类,得到多个簇矩阵、与所述簇矩阵对应的位图以及一个剩余矩阵;其中,所述簇矩阵包括指向同一簇的转移边,所述位图用于描述所对应簇矩阵中相关元素的有效性;所述剩余矩阵包括确定自动机中未被包含到所述簇矩阵中的剩余转移边;所述的簇矩阵压缩模块为所述簇矩阵中的各行提取基值,然后将所述簇矩阵转换成一个偏移量矩阵,再将偏移量矩阵中的各行合并,增加用于标记可合并状态的索引数组,得到所述蔟矩阵的压缩矩阵。所述的确定自动机的空间压缩装置还包括剩余矩阵压缩模块,所述的剩余矩阵压缩模块压缩所述的剩余矩阵。本发明还提供了一种正则表达式匹配装置,包括文本输入模块、所述的确定自动机的空间压缩装置以及匹配模块;其中,所述的文本输入模块输入所要匹配的文本;所述的确定自动机的空间压缩装置得到压缩后的确定自动机;匹配模块采用压缩后的确定自动机对输入的文本进行匹配。最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制。尽管参照实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,对本发明的技术方案进行修改或者等同替换,都不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。权利要求1、一种确定自动机的空间压缩方法,包括步骤1)、对确定自动机中的各个状态做分簇操作,得到多个用于表示状态集合的簇;步骤2)、将所述确定自动机中各个状态的转移边按步骤1)所得到的簇分类,得到多个簇矩阵、与所述簇矩阵对应的位图以及一个剩余矩阵;其中,所述簇矩阵包括指向同一簇的转移边,所述位图用于描述簇矩阵中相关元素的有效性;所述剩余矩阵包括确定自动机中未被包含到所述簇矩阵中的剩余转移边;步骤3)、为所述簇矩阵中的各行提取基值,然后将所述簇矩阵转换成一个偏移量矩阵,再将偏移量矩阵中的各行合并,增加用于标记可合并状态的索引数组,得到所述簇矩阵的压缩矩阵。2、根据权利要求1所述的确定自动机的空间压缩方法,其特征在于,还包括步骤4)、压缩所述的剩余矩阵。3、根据权利要求1或2所述的确定自动机的空间压缩方法,其特征在于,所述的步骤1)包括步骤1-1)、从确定状态机的初始状态开始做广度优先遍历,得到trie树结构;步骤l-2)、对所得到的trie树中的各个状态做分簇操作,得到多个用于表示状态集合的簇;其中,在做分簇操作时,将所述确定自动机的初始状态作为一个单独的簇,将所述确定自动机中一个状态的所有直接后继状态的集合作为一个簇。4、根据权利要求1或2所述的确定自动机的空间压缩方法,其特征在于,所述的步骤2)包括步骤2-1)、判断所述确定自动机中剩余转移边的数目是否小于阈值,若小于,则将剩余的转移边填入所述的剩余矩阵中,否则,执行下一步;步骤2-2)、将所述确定自动机中剩余的所有转移边中指向同一簇最多的转移边转移到一个簇矩阵中,并用一个对应的位图表示该簇矩阵中元素的有效性。5、根据权利要求1或2所述的确定自动机的空间压缩方法,其特征在于,在所述的步骤3)中,所述的基值为基值所在行所对应簇中的最小值,所述的偏移量矩阵中的偏移量为所述簇矩阵中的转移边的值与所述基值间的差。6、根据权利要求1或2所述的确定自动机的空间压缩方法,其特征在于,在所述的步骤3)中,将偏移量矩阵中的各行合并时,满足以下规则在矩阵T中,当且仅当对任意字符c满足T[r][c]--l或者T[s][c]二-l或者T[s][c]-T[r][c]时,行r和行s是可合并的,其中,代表对应位置的值为无效值。7、根据权利要求1或2所述的确定自动机的空间压缩方法,其特征在于,所述的位图包括多个与所述簇矩阵具有——对应关系的位图,所述位图用于描述与其具有对应关系的簇矩阵中元素的有效性。8、根据权利要求1或2所述的确定自动机的空间压缩方法,其特征在于,所述的位图包括一个位图,所述位图利用位图中元素的数值大小描述所述转移边在按簇分类后的位置。9、一种由权利要求1-8之一的确定自动机的空间压缩方法所得到的矩阵实现正则表达式匹配的方法,包括输入文本,用所述矩阵对所述输入文本进行匹配。10、根据权利要求9所述的正则表达式匹配方法,其特征在于,所述的用所述矩阵对所述输入文本进行匹配包括步骤a)、在一个簇矩阵对应的位图中查看bitmap[s][c]是否为有效状态,若为有效状态,则将所述簇矩阵中基值base[s]和偏移量T[equal[s]][c]之和的值作为当前状态的直接后继状态,若为无效状态,执行下一步;其中,所述的s代表当前状态,所述的c代表输入文本中所要匹配的字符,所述的equal代表用于标记可合并状态的索引数组,所述的T代表簇矩阵;步骤b)、判断是否还存在未经处理的簇矩阵,若存在,则取出未经处理的下一个蔟矩阵及其位图后,重新执行步骤a),否则,执行下一步;步骤c)、从所述的剩余矩阵中取出T'[s]][c]的值,作为当前状态的直接后继状态;其中,所述的T'表示剩余矩阵。11、根据权利要求10所述的正则表达式匹配方法,其特征在于,在所述的步骤b)中,按照所包含的转移边数量的多少依次选择所述的簇矩阵。12、一种确定自动机的空间压缩装置,其特征在于,包括分簇模块、簇矩阵划分模块以及簇矩阵压缩模块;其中,所述的分簇模块对确定自动机中的各个状态做分簇操作,得到多个用于表示状态集合的簇;所述的簇矩阵划分模块将所述确定自动机中各个状态的转移边按簇分类,得到多个簇矩阵、与所述簇矩阵对应的位图以及一个剩余矩阵;其中,所述簇矩阵包括指向同一簇的转移边,所述位图用于描述所对应簇矩阵中相关元素的有效性;所述剩余矩阵包括确定自动机中未被包含到所述簇矩阵中的剩余转移边;所述的簇矩阵压缩模块为所述簇矩阵中的各行提取基值,然后将所述簇矩阵转换成一个偏移量矩阵,再将偏移量矩阵中的各行合并,增加用于标记可合并状态的索引数组,得到所述簇矩阵的压缩矩阵。13、根据权利要求12所述的确定自动机的空间压缩装置,其特征在于,还包括剩余矩阵压缩模块,所述的剩余矩阵压缩模块压缩所述的剩余矩阵。14、一种正则表达式匹配装置,其特征在于,包括文本输入模块、由权利要求1-8之一的确定自动机的空间压缩方法所得到的矩阵以及匹配模块;其中,所述的文本输入模块输入所要匹配的文本;所述的匹配才莫块采用所述矩阵对输入的文本进行匹配。全文摘要本发明提供一种确定自动机的空间压缩方法,包括对确定自动机中的各个状态做分簇操作,得到多个用于表示状态集合的簇;将确定自动机中各个状态的转移边按簇分类,得到多个簇矩阵、与所述簇矩阵对应的位图以及一个剩余矩阵;其中,所述簇矩阵包括指向同一簇的转移边,所述位图用于描述所对应簇矩阵中相关元素的有效性;所述剩余矩阵包括确定自动机中未被包含到所述簇矩阵中的剩余转移边;为所述簇矩阵中的各行提取基值,然后将所述簇矩阵转换成一个偏移量矩阵,再将偏移量矩阵中的各行合并,增加用于标记可合并状态的索引数组,得到所述簇矩阵的压缩矩阵。本发明不仅在压缩效果上有所提高,而且在实现正则表达式匹配时在匹配速度上有很大的提高。文档编号G06F17/30GK101630323SQ20091009055公开日2010年1月20日申请日期2009年8月20日优先权日2009年8月20日发明者萍刘,刘燕兵,杨毅夫,莉郭申请人:中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1