基于决策树剪枝的模式匹配方法

文档序号:10697781阅读:735来源:国知局
基于决策树剪枝的模式匹配方法
【专利摘要】本发明提出一种基于决策树剪枝的模式匹配方法,其结合决策树剪枝方法的简化AC算法,包括自动机的生成、自动机的简化、计算失败指针、存储后缀表与匹配的执行等步骤。本发明将传统自动机类型模式匹配算法拆分为两个步骤:匹配可能的判定与匹配确认。通过简化自动机判别文本串与模式集中模式串有无匹配的可能,再进行匹配的确认。在保证速度的前提下,本发明提出的简化方法相比传统自动机类型模式匹配算法内存消耗减少35%?40%。此外,本发明通过决策树剪枝方法可有效减小自动机规模,删除对分类判定无用的节点,有效降低传统自动机类型模式匹配的内存消耗。
【专利说明】
基于决策树剪枝的模式匹配方法
技术领域
[0001] 本发明设及信息安全技术领域,具体设及一种基于决策树剪枝(Decision Tree Prim i ng)的模式匹配方法。
【背景技术】
[0002] 模式匹配算法广泛应用于入侵检测、信息检索、模式识别、基因匹配等众多领域。 性能稳定的模式匹配算法是网络入侵检测系统的"倍增器"。基于自动机的模式匹配算法具 备性能稳定的特点,其中WAC算法为代表。由于AC算法拥有线性最差时间复杂度,柔性高, 可容忍短模式,可抵抗复杂度攻击,因此是目前首选的在线匹配算法之一。
[0003] 然而,随着对模式匹配性能需求的增加,基于自动机类的模式匹配算法成为高性 能模式匹配体系结构设计的基础。但此类算法生成的DFSA规模较大,特别对于大规模模式 集(10万W上模式集)生成自动机的规模需要大量的内存存储,运大大阻碍了自动机类匹配 算法的应用。

【发明内容】

[0004] 本发明所要解决的技术问题是针对现有基于自动机的模式匹配算法需要大量的 内存存储的问题,提供一种基于决策树剪枝的模式匹配方法。
[0005] 为解决上述问题,本发明是通过W下技术方案实现的:
[0006] 基于决策树剪枝的模式匹配方法,包括如下步骤:
[0007] 步骤A.即根据自动机生成规则,将模式集中的模式串依次添加到自动机中;
[000引步骤B.在自动机生成过程中,每一个模式串添加完成,即将此模式串添加到当前 节点的输出表中;
[0009] 步骤C.对生成的自动机进行剪枝,去除对分类来说属于非必要的节点,减少自动 机节点数量,简化自动机;在对自动机进行剪枝的过程中,生成后缀表;
[0010] 步骤D.计算自动机各节点的状态深度,其中节点的状态深度为该节点距根节点的 最短路径长度;
[0011] 步骤E.根据节点状态深度,计算出各节点的失败指针;
[0012] 步骤F.依次取出文本串中字符输入自动机,完成模式匹配。
[0013] 上述步骤C的过程具体为:
[0014] 步骤C1.对自动机的各个分支进行逐个遍历;
[0015] 步骤C2.当从根节点遍历至终端叶子节点的过程中,仅存在终端叶子节点运一个 输出节点,即输出节点为1个时,则从终端叶子节点开始向上回溯至最后一个单分枝节点, 将该单分枝节点的剪枝标志位置为1,修剪掉该单分枝节点之后的枝叶,并将该单分枝节点 的后续枝叶包含的后缀W字符串的形式存储于后缀表;
[0016] 步骤C3.当从根节点遍历至终端叶子节点的过程中,存在除终端叶子节点运一个 输出节点之外的其他输出节点,即输出节点为2个W上时,则从终端叶子节点开始向上回溯 至倒数第二个输出节点,将该倒数第二个输出节点的剪枝标志位置为1,修剪掉该倒数第二 个输出节点之后的枝叶,并将该倒数第二个输出节点的后续枝叶包含的后缀W字符串的形 式存储于后缀表。
[0017] 上述步骤E的过程具体为:
[0018] 步骤E1.将自动机的根节点的失败指针(失败指针为节点匹配失败后的跳转方向 指针)指向根节点;
[0019] 步骤E2.将自动机中状态深度为1的节点的失败指针也指向根节点;
[0020] 步骤E3.对于自动机中状态深度大于或等于2的节点S,若其父节点r经过字符a能 够到达节点S即Goto (r, a) = s,则先将节点S的当前状态指向父节点r的失败状态,直至节点 S的当前状态经过字符a存在下一跳节点t时,将节点S的失败指针指向节点t。
[0021 ] 上述步骤F的过程具体为:
[0022] 步骤F1.在执行阶段捜索过程中,自根节点开始,依次取出文本串中的字符,根据 转移表Goto和失败表化il确定下一状态节点。
[0023] 步骤F2.检查状态节点输出标志位q. danger:
[0024] 如节点输出标志位q.danger = l,则输出找中字符串;
[0025] 如节点输出标志位q. danger = 0,则不进行输出。
[00%] 步骤F3.继续检查节点剪枝标志位q. suffix。
[0027]如标志位q. suffix=l,则转向后缀存储位置指针q. suffix.pointer指针指向的 后缀继续进行匹配判定,完成完整的字符串判定:如成功则输出找中字符串和对应后缀作 为完整的规则,并返回相应的叶子节点q;如不成功则应直接返回至相应的叶子节点q,再根 据失败函数进行跳转,继续捜索。
[00%]如节点剪枝标志位q. suf f i X = 0,则继续根据转移表Go to与失败表化i 1来确定下 一状态节点。
[00巧]本发明提出一种结合决策树剪枝(Prim ing)方法的简化AC (Aho-Coras i ck)算法, 包括自动机的生成、自动机的简化、计算失败指针、存储后缀表与匹配的执行。本发明通过 决策树剪枝方法可有效减小自动机规模,删除对分类判定无用的节点,有效降低传统自动 机类型模式匹配的内存消耗。本发明在具体实现时,将传统自动机类型模式匹配算法拆分 为两个步骤:匹配可能的判定与匹配确认。通过简化自动机判别文本串与模式集中模式串 有无匹配的可能,再进行匹配的确认。在保证速度的前提下,本发明提出的简化方法相比传 统自动机类型模式匹配算法内存消耗减少35 %-40 %。
[0030] 与现有技术相比,本发明具有如下特点:
[0031] 1.本发明是基于决策树剪枝的AC改进算法,通过应用决策树剪枝方法可有效降低 基于DFSA的AC算法的自动机规模,去除对锁定模式集中模式串无用的节点,减少节点数量;
[0032] 2.本发明在简化自动机规模,去除冗余节点的同时,达到降低AC算法内存消耗的 目的,运一方法可应用到绝大多数自动机类型的模式匹配算法中,改善自动机类型模式匹 配算法的空间复杂度;
[0033] 3.本发明虽然引入了决策树剪枝方法,但传统AC算法的很多实现方法只需稍加修 正依然适用,并不需要添加过多额外的计算,且实验表明在匹配速度与原AC算法基本持平 的前提下,实现了内存空间节省35 % -40 %。
【附图说明】
[0034] 图1为简化前的自动机;
[0035] 图2为简化后的自动机;
[0036] 图3为简化前节点的状态深度;
[0037] 图4为简化后节点的状态深度;
[0038] 图5为简化前节点的失败指针;
[0039] 图6为简化后节点的失败指针。
【具体实施方式】
[0040] 为了使本发明的技术方案及优点更加清楚明白,结合附图及实施例,对本发明做 进一步详细说明。应当理解,此处所描述的具体实施例仅仅用W解释本发明,并不用于限定 本发明。
[0041] -种基于决策树剪枝的模式匹配方法,具体步骤为:
[0042] 本实施例输入的文本串为T,模式集K化is, the, there, who},其中T为由任意字符 组成的文本串,K中Κι为模式串。
[0043] 阶段I:生成自动机。
[0044] 步骤1,根据AC算法的自动机的生成规则,即Goto函数,将模式集中的模式串依次 添加到自动机中,生成如图1所示的自动机。同时,自动机生成过程中,每一个模式串添加完 成,即将此模式串添加到当前节点的输出表中。
[0045] 自动机生成的具体步骤为:
[0046] 步骤1-1.若模式集中模式串的个数n《0,返回错误;当前模式串i = 0。
[0047] 步骤1-2.若当前模式串i《模式集中模式串的个数η;取模式串pi,令s = 0(s为当 前状态指针);否则生成结束。
[004引步骤1-3.取出模式串Pi的下一个字符C;若字符C,存在则s = Goto(s,C),否则跳转 步骤1-2。
[0049]步骤1-4.若当前状态S声-1(-1代表状态为空),跳转至步骤1-3。
[005日]步骤 1-5.Goto(S, C) =news1:ate(newstate为生成新状态),跳转至步骤 1-3。
[0051] 输出表的具体步骤为:
[0052] 步骤1-6.计算Goto函数时,当一个模式串完成加入自动机操作后,应将该模式串 加入到最后一个状态的输出表中。
[0053] 步骤1-7.计算化il函数(Fail函数为失败跳转函数)时,当r =化il(s)时,将r的输 出表中所包含的模式串添加到状态S的输出表中。
[0054] 步骤2,根据下述规则简化自动机,简化后的自动机如附图2所示。
[0055] 规则一:在逐个分支遍历的过程中,如遍历至终端叶子节点Z,则向上回溯至最后 一个单分枝节点日,将此节点标志位suffix(suffix为节点剪枝标志位)置1,并剪除节点a之 后的枝叶,将a节点后续枝叶包含的后缀W字符串的形式存储于后缀表。
[0056] 规则二:如从根节点遍历至终端叶子节点的过程中不止存在一个输出节点,如整 个分支在向上回溯的过程中自底向上分别对应1,2...m,共m个输出节点,则只可修剪掉输 出节点2之后的枝叶,此时输出节点2标志位suffix置1,并剪除输出节点2之后的枝叶,将输 出节点2后续枝叶包含的后缀W字符串的形式存储于后缀表。
[0057]步骤2-1,从根节点开始逐位遍历经节点1、2至终端叶子节点3,向上回溯至最后一 个单分支节点1,将节点1的剪枝标志位suffix置1,因节点1是非输出节点,故节点输出标志 位danger(danger为节点输出标志位)置0,并将其后的枝叶包含的后缀is, W字符串的形式 存储于后缀表。
[005引步骤2-2,继续遍历,经节点4、5、6、7至终端叶子节点8,向上回溯至节点6,因节点6 为输出,将节点6的剪枝标志位suf f iX置1,因节点6是输出节点,故节点输出标志位danger 置1,并将其后的枝叶包含的后缀re, W字符串的形式存储于后缀表。
[0059] 步骤2-3,继续遍历,经9、1根节点至终端叶子节点11,向上回溯至最后一个单分支 节点9,将节点9的剪枝标志位suf f iX置1,因节点9为非输出节点,故节点输出标志位danger 置0,并将其后的枝叶包含的后缀ho, W字符串的形式存储于后缀表;剪枝完成。
[0060] 步骤3,上述简化过程中修剪掉的枝叶中所包含的后缀W字符串的形式存储于后 缀表。表1所示为通过简化规则生成的后缀表。
[0061] 表 1
[0062]
[0063] 步骤4,计算自动机的状态深度。由于本发明对自动机进行了修剪,因此,只需计算 修剪后剩余的每个节点的状态深度。图3为简化前节点的状态深度;图4为简化后节点的状 态深度。
[0064] 步骤4-1.根节点的状态深度为0。
[0065] 步骤4-2.若节点a状态深度为d,那么其左子节点状态深度为d+1,右子节点状态深 度为d。
[0066] 步骤5,计算自动机的失败指针。图5为简化前节点的失败指针;图6为简化后节点 的失败指针。
[0067] 步骤5-1.根节点失败指针指向根节点。
[0068] 步骤5-2.深度为1的节点,其失败指针也指向根节点。
[0069] 步骤5-3.深度大于或等于2的节点S,若其父节点r经过字符a能够到达节点S即 Goto(r,a) = s,则先将节点s的当前状态指向父节点r的失败状态,直至节点s的当前状态经 过字符a存在下一跳节点t时,将节点S的失败指针指向节点t。
[0070] 阶段II:执行匹配。
[0071] 步骤6,执行阶段在捜索过程中,自根节点开始,依次取出文本串中的字符,确定下 一状态节点。
[0072] 步骤7,检查状态节点标志位q.danger是否为真:如为真,则输出找中字符串;如为 假,则不进行输出。
[0073] 步骤8,检查q.suffix是否为真。
[0074] 步骤8-1.如果为真,则转向后缀存储位置指针q. suff ix. pointer指针指向的后缀 继续比对,完成完整的字符串比对:如成功则输出找中字符串和对应后缀作为完整的规则, 并返回相应的叶子节点q;如不成功则应直接返回至相应的叶子节点q,再根据化ilstate跳 转,继续捜索。
[0075] 步骤8-2.如q. suffix为假则继续根据Goto函数与失败指针来确定下一状态节点。
[0076] 本发明基于决策树剪枝的AC改进算法,包括自动机的生成、自动机的简化、计算失 败指针、存储后缀表与匹配的执行。本发明在具体实现时,将传统自动机类型模式匹配算法 拆分为两个步骤:匹配可能的判定与匹配确认。通过简化自动机判别文本串与模式集中模 式串有无匹配的可能,再进行匹配的确认。在保持原有的匹配速度的前提下,有效减少自动 机节点数量,去除自动机中冗余节点,达到简化自动机规模,降低模式匹配算法的内存消耗 的目的。本发明可W针对绝大多数自动机类型的匹配算法进行简化。
【主权项】
1. 基于决策树剪枝的模式匹配方法,其特征是,包括如下步骤: 步骤A.即根据自动机生成规则,将模式集中的模式串依次添加到自动机中; 步骤B.在自动机生成过程中,每一个模式串添加完成,即将此模式串添加到当前节点 的输出表中; 步骤C.对生成的自动机进行剪枝,去除对分类来说属于非必要的节点,减少自动机节 点数量,简化自动机;在对自动机进行剪枝的过程中,生成后缀表; 步骤D.计算自动机各节点的状态深度,其中节点的状态深度为该节点距根节点的最短 路径长度; 步骤E.根据节点状态深度,计算出各节点的失败指针; 步骤F.依次取出文本串中字符输入自动机,完成模式匹配。2. 根据权利要求1所述的基于决策树剪枝的模式匹配方法,其特征是,步骤C的过程具 体为: 步骤C1.对自动机的各个分支进行逐个遍历; 步骤C2.当从根节点遍历至终端叶子节点的过程中,仅存在终端叶子节点这一个输出 节点,即输出节点为1个时,则从终端叶子节点开始向上回溯至最后一个单分枝节点,将该 单分枝节点的剪枝标志位置为1,修剪掉该单分枝节点之后的枝叶,并将该单分枝节点的后 续枝叶包含的后缀以字符串的形式存储于后缀表; 步骤C3.当从根节点遍历至终端叶子节点的过程中,存在除终端叶子节点这一个输出 节点之外的其他输出节点,即输出节点为2个以上时,则从终端叶子节点开始向上回溯至倒 数第二个输出节点,将该倒数第二个输出节点的剪枝标志位置为1,修剪掉该倒数第二个输 出节点之后的枝叶,并将该倒数第二个输出节点的后续枝叶包含的后缀以字符串的形式存 储于后缀表。3. 根据权利要求1所述的基于决策树剪枝的模式匹配方法,其特征是,步骤E的过程具 体为: 步骤E1.将自动机的根节点的失败指针指向根节点; 步骤E2.将自动机中状态深度为1的节点的失败指针也指向根节点; 步骤E3 .对于自动机中状态深度大于或等于2的节点s,若其父节点r经过字符a能够到 达节点s 即Go to (r,a) = s,则先将节点s的当前状态指向父节点r的失败状态,直至节点s的 当前状态经过字符a存在下一跳节点t时,将节点s的失败指针指向节点t。4. 根据权利要求1所述的基于决策树剪枝的模式匹配方法,其特征是,步骤F的过程具 体为: 步骤F1.在执行阶段搜索过程中,自根节点开始,依次取出文本串中的字符,根据预先 生成的转移表和失败表确定下一节点; 步骤F2.检查当前节点q的输出标志位q. danger: 如输出标志位q. danger = 1,则输出栈中字符串; 如输出标志位q. danger = 0,则不进行输出; 步骤F3.继续检查当前节点q的剪枝标志位q. suff ix; 如剪枝标志位q. suffix=l,则转向节点q的后缀存储位置指针q. suffix.pointer指向 的后缀继续进行匹配判定,完成完整的字符串判定:如成功则输出栈中字符串和对应后缀 作为完整的规则,并返回相应的节点q;如不成功则应直接返回至相应的节点q,再根据预先 生成的函数进行跳转,继续搜索; 如剪枝标志位q. suffix = 0,则继续根据转移表与失败表来确定下一状态节点。
【文档编号】G06K9/62GK106067039SQ201610367542
【公开日】2016年11月2日
【申请日】2016年5月30日 公开号201610367542.1, CN 106067039 A, CN 106067039A, CN 201610367542, CN-A-106067039, CN106067039 A, CN106067039A, CN201610367542, CN201610367542.1
【发明人】古天龙, 王亚南, 徐周波, 常亮, 陈帅, 王敏
【申请人】桂林电子科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1