基于決策樹剪枝的模式匹配方法
【專利摘要】本發(fā)明提出一種基于決策樹剪枝的模式匹配方法,其結(jié)合決策樹剪枝方法的簡化AC算法,包括自動機(jī)的生成、自動機(jī)的簡化、計算失敗指針、存儲后綴表與匹配的執(zhí)行等步驟。本發(fā)明將傳統(tǒng)自動機(jī)類型模式匹配算法拆分為兩個步驟:匹配可能的判定與匹配確認(rèn)。通過簡化自動機(jī)判別文本串與模式集中模式串有無匹配的可能,再進(jìn)行匹配的確認(rèn)。在保證速度的前提下,本發(fā)明提出的簡化方法相比傳統(tǒng)自動機(jī)類型模式匹配算法內(nèi)存消耗減少35%?40%。此外,本發(fā)明通過決策樹剪枝方法可有效減小自動機(jī)規(guī)模,刪除對分類判定無用的節(jié)點,有效降低傳統(tǒng)自動機(jī)類型模式匹配的內(nèi)存消耗。
【專利說明】
基于決策樹剪枝的模式匹配方法
技術(shù)領(lǐng)域
[0001] 本發(fā)明設(shè)及信息安全技術(shù)領(lǐng)域,具體設(shè)及一種基于決策樹剪枝(Decision Tree Prim i ng)的模式匹配方法。
【背景技術(shù)】
[0002] 模式匹配算法廣泛應(yīng)用于入侵檢測、信息檢索、模式識別、基因匹配等眾多領(lǐng)域。 性能穩(wěn)定的模式匹配算法是網(wǎng)絡(luò)入侵檢測系統(tǒng)的"倍增器"?;谧詣訖C(jī)的模式匹配算法具 備性能穩(wěn)定的特點,其中WAC算法為代表。由于AC算法擁有線性最差時間復(fù)雜度,柔性高, 可容忍短模式,可抵抗復(fù)雜度攻擊,因此是目前首選的在線匹配算法之一。
[0003] 然而,隨著對模式匹配性能需求的增加,基于自動機(jī)類的模式匹配算法成為高性 能模式匹配體系結(jié)構(gòu)設(shè)計的基礎(chǔ)。但此類算法生成的DFSA規(guī)模較大,特別對于大規(guī)模模式 集(10萬W上模式集)生成自動機(jī)的規(guī)模需要大量的內(nèi)存存儲,運大大阻礙了自動機(jī)類匹配 算法的應(yīng)用。
【發(fā)明內(nèi)容】
[0004] 本發(fā)明所要解決的技術(shù)問題是針對現(xiàn)有基于自動機(jī)的模式匹配算法需要大量的 內(nèi)存存儲的問題,提供一種基于決策樹剪枝的模式匹配方法。
[0005] 為解決上述問題,本發(fā)明是通過W下技術(shù)方案實現(xiàn)的:
[0006] 基于決策樹剪枝的模式匹配方法,包括如下步驟:
[0007] 步驟A.即根據(jù)自動機(jī)生成規(guī)則,將模式集中的模式串依次添加到自動機(jī)中;
[000引步驟B.在自動機(jī)生成過程中,每一個模式串添加完成,即將此模式串添加到當(dāng)前 節(jié)點的輸出表中;
[0009] 步驟C.對生成的自動機(jī)進(jìn)行剪枝,去除對分類來說屬于非必要的節(jié)點,減少自動 機(jī)節(jié)點數(shù)量,簡化自動機(jī);在對自動機(jī)進(jìn)行剪枝的過程中,生成后綴表;
[0010] 步驟D.計算自動機(jī)各節(jié)點的狀態(tài)深度,其中節(jié)點的狀態(tài)深度為該節(jié)點距根節(jié)點的 最短路徑長度;
[0011] 步驟E.根據(jù)節(jié)點狀態(tài)深度,計算出各節(jié)點的失敗指針;
[0012] 步驟F.依次取出文本串中字符輸入自動機(jī),完成模式匹配。
[0013] 上述步驟C的過程具體為:
[0014] 步驟C1.對自動機(jī)的各個分支進(jìn)行逐個遍歷;
[0015] 步驟C2.當(dāng)從根節(jié)點遍歷至終端葉子節(jié)點的過程中,僅存在終端葉子節(jié)點運一個 輸出節(jié)點,即輸出節(jié)點為1個時,則從終端葉子節(jié)點開始向上回溯至最后一個單分枝節(jié)點, 將該單分枝節(jié)點的剪枝標(biāo)志位置為1,修剪掉該單分枝節(jié)點之后的枝葉,并將該單分枝節(jié)點 的后續(xù)枝葉包含的后綴W字符串的形式存儲于后綴表;
[0016] 步驟C3.當(dāng)從根節(jié)點遍歷至終端葉子節(jié)點的過程中,存在除終端葉子節(jié)點運一個 輸出節(jié)點之外的其他輸出節(jié)點,即輸出節(jié)點為2個W上時,則從終端葉子節(jié)點開始向上回溯 至倒數(shù)第二個輸出節(jié)點,將該倒數(shù)第二個輸出節(jié)點的剪枝標(biāo)志位置為1,修剪掉該倒數(shù)第二 個輸出節(jié)點之后的枝葉,并將該倒數(shù)第二個輸出節(jié)點的后續(xù)枝葉包含的后綴W字符串的形 式存儲于后綴表。
[0017] 上述步驟E的過程具體為:
[0018] 步驟E1.將自動機(jī)的根節(jié)點的失敗指針(失敗指針為節(jié)點匹配失敗后的跳轉(zhuǎn)方向 指針)指向根節(jié)點;
[0019] 步驟E2.將自動機(jī)中狀態(tài)深度為1的節(jié)點的失敗指針也指向根節(jié)點;
[0020] 步驟E3.對于自動機(jī)中狀態(tài)深度大于或等于2的節(jié)點S,若其父節(jié)點r經(jīng)過字符a能 夠到達(dá)節(jié)點S即Goto (r, a) = s,則先將節(jié)點S的當(dāng)前狀態(tài)指向父節(jié)點r的失敗狀態(tài),直至節(jié)點 S的當(dāng)前狀態(tài)經(jīng)過字符a存在下一跳節(jié)點t時,將節(jié)點S的失敗指針指向節(jié)點t。
[0021 ] 上述步驟F的過程具體為:
[0022] 步驟F1.在執(zhí)行階段捜索過程中,自根節(jié)點開始,依次取出文本串中的字符,根據(jù) 轉(zhuǎn)移表Goto和失敗表化il確定下一狀態(tài)節(jié)點。
[0023] 步驟F2.檢查狀態(tài)節(jié)點輸出標(biāo)志位q. danger:
[0024] 如節(jié)點輸出標(biāo)志位q.danger = l,則輸出找中字符串;
[0025] 如節(jié)點輸出標(biāo)志位q. danger = 0,則不進(jìn)行輸出。
[00%] 步驟F3.繼續(xù)檢查節(jié)點剪枝標(biāo)志位q. suffix。
[0027]如標(biāo)志位q. suffix=l,則轉(zhuǎn)向后綴存儲位置指針q. suffix.pointer指針指向的 后綴繼續(xù)進(jìn)行匹配判定,完成完整的字符串判定:如成功則輸出找中字符串和對應(yīng)后綴作 為完整的規(guī)則,并返回相應(yīng)的葉子節(jié)點q;如不成功則應(yīng)直接返回至相應(yīng)的葉子節(jié)點q,再根 據(jù)失敗函數(shù)進(jìn)行跳轉(zhuǎn),繼續(xù)捜索。
[00%]如節(jié)點剪枝標(biāo)志位q. suf f i X = 0,則繼續(xù)根據(jù)轉(zhuǎn)移表Go to與失敗表化i 1來確定下 一狀態(tài)節(jié)點。
[00巧]本發(fā)明提出一種結(jié)合決策樹剪枝(Prim ing)方法的簡化AC (Aho-Coras i ck)算法, 包括自動機(jī)的生成、自動機(jī)的簡化、計算失敗指針、存儲后綴表與匹配的執(zhí)行。本發(fā)明通過 決策樹剪枝方法可有效減小自動機(jī)規(guī)模,刪除對分類判定無用的節(jié)點,有效降低傳統(tǒng)自動 機(jī)類型模式匹配的內(nèi)存消耗。本發(fā)明在具體實現(xiàn)時,將傳統(tǒng)自動機(jī)類型模式匹配算法拆分 為兩個步驟:匹配可能的判定與匹配確認(rèn)。通過簡化自動機(jī)判別文本串與模式集中模式串 有無匹配的可能,再進(jìn)行匹配的確認(rèn)。在保證速度的前提下,本發(fā)明提出的簡化方法相比傳 統(tǒng)自動機(jī)類型模式匹配算法內(nèi)存消耗減少35 %-40 %。
[0030] 與現(xiàn)有技術(shù)相比,本發(fā)明具有如下特點:
[0031] 1.本發(fā)明是基于決策樹剪枝的AC改進(jìn)算法,通過應(yīng)用決策樹剪枝方法可有效降低 基于DFSA的AC算法的自動機(jī)規(guī)模,去除對鎖定模式集中模式串無用的節(jié)點,減少節(jié)點數(shù)量;
[0032] 2.本發(fā)明在簡化自動機(jī)規(guī)模,去除冗余節(jié)點的同時,達(dá)到降低AC算法內(nèi)存消耗的 目的,運一方法可應(yīng)用到絕大多數(shù)自動機(jī)類型的模式匹配算法中,改善自動機(jī)類型模式匹 配算法的空間復(fù)雜度;
[0033] 3.本發(fā)明雖然引入了決策樹剪枝方法,但傳統(tǒng)AC算法的很多實現(xiàn)方法只需稍加修 正依然適用,并不需要添加過多額外的計算,且實驗表明在匹配速度與原AC算法基本持平 的前提下,實現(xiàn)了內(nèi)存空間節(jié)省35 % -40 %。
【附圖說明】
[0034] 圖1為簡化前的自動機(jī);
[0035] 圖2為簡化后的自動機(jī);
[0036] 圖3為簡化前節(jié)點的狀態(tài)深度;
[0037] 圖4為簡化后節(jié)點的狀態(tài)深度;
[0038] 圖5為簡化前節(jié)點的失敗指針;
[0039] 圖6為簡化后節(jié)點的失敗指針。
【具體實施方式】
[0040] 為了使本發(fā)明的技術(shù)方案及優(yōu)點更加清楚明白,結(jié)合附圖及實施例,對本發(fā)明做 進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用W解釋本發(fā)明,并不用于限定 本發(fā)明。
[0041] -種基于決策樹剪枝的模式匹配方法,具體步驟為:
[0042] 本實施例輸入的文本串為T,模式集K化is, the, there, who},其中T為由任意字符 組成的文本串,K中Κι為模式串。
[0043] 階段I:生成自動機(jī)。
[0044] 步驟1,根據(jù)AC算法的自動機(jī)的生成規(guī)則,即Goto函數(shù),將模式集中的模式串依次 添加到自動機(jī)中,生成如圖1所示的自動機(jī)。同時,自動機(jī)生成過程中,每一個模式串添加完 成,即將此模式串添加到當(dāng)前節(jié)點的輸出表中。
[0045] 自動機(jī)生成的具體步驟為:
[0046] 步驟1-1.若模式集中模式串的個數(shù)n《0,返回錯誤;當(dāng)前模式串i = 0。
[0047] 步驟1-2.若當(dāng)前模式串i《模式集中模式串的個數(shù)η;取模式串pi,令s = 0(s為當(dāng) 前狀態(tài)指針);否則生成結(jié)束。
[004引步驟1-3.取出模式串Pi的下一個字符C;若字符C,存在則s = Goto(s,C),否則跳轉(zhuǎn) 步驟1-2。
[0049]步驟1-4.若當(dāng)前狀態(tài)S聲-1(-1代表狀態(tài)為空),跳轉(zhuǎn)至步驟1-3。
[005日]步驟 1-5.Goto(S, C) =news1:ate(newstate為生成新狀態(tài)),跳轉(zhuǎn)至步驟 1-3。
[0051] 輸出表的具體步驟為:
[0052] 步驟1-6.計算Goto函數(shù)時,當(dāng)一個模式串完成加入自動機(jī)操作后,應(yīng)將該模式串 加入到最后一個狀態(tài)的輸出表中。
[0053] 步驟1-7.計算化il函數(shù)(Fail函數(shù)為失敗跳轉(zhuǎn)函數(shù))時,當(dāng)r =化il(s)時,將r的輸 出表中所包含的模式串添加到狀態(tài)S的輸出表中。
[0054] 步驟2,根據(jù)下述規(guī)則簡化自動機(jī),簡化后的自動機(jī)如附圖2所示。
[0055] 規(guī)則一:在逐個分支遍歷的過程中,如遍歷至終端葉子節(jié)點Z,則向上回溯至最后 一個單分枝節(jié)點日,將此節(jié)點標(biāo)志位suffix(suffix為節(jié)點剪枝標(biāo)志位)置1,并剪除節(jié)點a之 后的枝葉,將a節(jié)點后續(xù)枝葉包含的后綴W字符串的形式存儲于后綴表。
[0056] 規(guī)則二:如從根節(jié)點遍歷至終端葉子節(jié)點的過程中不止存在一個輸出節(jié)點,如整 個分支在向上回溯的過程中自底向上分別對應(yīng)1,2...m,共m個輸出節(jié)點,則只可修剪掉輸 出節(jié)點2之后的枝葉,此時輸出節(jié)點2標(biāo)志位suffix置1,并剪除輸出節(jié)點2之后的枝葉,將輸 出節(jié)點2后續(xù)枝葉包含的后綴W字符串的形式存儲于后綴表。
[0057]步驟2-1,從根節(jié)點開始逐位遍歷經(jīng)節(jié)點1、2至終端葉子節(jié)點3,向上回溯至最后一 個單分支節(jié)點1,將節(jié)點1的剪枝標(biāo)志位suffix置1,因節(jié)點1是非輸出節(jié)點,故節(jié)點輸出標(biāo)志 位danger(danger為節(jié)點輸出標(biāo)志位)置0,并將其后的枝葉包含的后綴is, W字符串的形式 存儲于后綴表。
[005引步驟2-2,繼續(xù)遍歷,經(jīng)節(jié)點4、5、6、7至終端葉子節(jié)點8,向上回溯至節(jié)點6,因節(jié)點6 為輸出,將節(jié)點6的剪枝標(biāo)志位suf f iX置1,因節(jié)點6是輸出節(jié)點,故節(jié)點輸出標(biāo)志位danger 置1,并將其后的枝葉包含的后綴re, W字符串的形式存儲于后綴表。
[0059] 步驟2-3,繼續(xù)遍歷,經(jīng)9、1根節(jié)點至終端葉子節(jié)點11,向上回溯至最后一個單分支 節(jié)點9,將節(jié)點9的剪枝標(biāo)志位suf f iX置1,因節(jié)點9為非輸出節(jié)點,故節(jié)點輸出標(biāo)志位danger 置0,并將其后的枝葉包含的后綴ho, W字符串的形式存儲于后綴表;剪枝完成。
[0060] 步驟3,上述簡化過程中修剪掉的枝葉中所包含的后綴W字符串的形式存儲于后 綴表。表1所示為通過簡化規(guī)則生成的后綴表。
[0061] 表 1
[0062]
[0063] 步驟4,計算自動機(jī)的狀態(tài)深度。由于本發(fā)明對自動機(jī)進(jìn)行了修剪,因此,只需計算 修剪后剩余的每個節(jié)點的狀態(tài)深度。圖3為簡化前節(jié)點的狀態(tài)深度;圖4為簡化后節(jié)點的狀 態(tài)深度。
[0064] 步驟4-1.根節(jié)點的狀態(tài)深度為0。
[0065] 步驟4-2.若節(jié)點a狀態(tài)深度為d,那么其左子節(jié)點狀態(tài)深度為d+1,右子節(jié)點狀態(tài)深 度為d。
[0066] 步驟5,計算自動機(jī)的失敗指針。圖5為簡化前節(jié)點的失敗指針;圖6為簡化后節(jié)點 的失敗指針。
[0067] 步驟5-1.根節(jié)點失敗指針指向根節(jié)點。
[0068] 步驟5-2.深度為1的節(jié)點,其失敗指針也指向根節(jié)點。
[0069] 步驟5-3.深度大于或等于2的節(jié)點S,若其父節(jié)點r經(jīng)過字符a能夠到達(dá)節(jié)點S即 Goto(r,a) = s,則先將節(jié)點s的當(dāng)前狀態(tài)指向父節(jié)點r的失敗狀態(tài),直至節(jié)點s的當(dāng)前狀態(tài)經(jīng) 過字符a存在下一跳節(jié)點t時,將節(jié)點S的失敗指針指向節(jié)點t。
[0070] 階段II:執(zhí)行匹配。
[0071] 步驟6,執(zhí)行階段在捜索過程中,自根節(jié)點開始,依次取出文本串中的字符,確定下 一狀態(tài)節(jié)點。
[0072] 步驟7,檢查狀態(tài)節(jié)點標(biāo)志位q.danger是否為真:如為真,則輸出找中字符串;如為 假,則不進(jìn)行輸出。
[0073] 步驟8,檢查q.suffix是否為真。
[0074] 步驟8-1.如果為真,則轉(zhuǎn)向后綴存儲位置指針q. suff ix. pointer指針指向的后綴 繼續(xù)比對,完成完整的字符串比對:如成功則輸出找中字符串和對應(yīng)后綴作為完整的規(guī)則, 并返回相應(yīng)的葉子節(jié)點q;如不成功則應(yīng)直接返回至相應(yīng)的葉子節(jié)點q,再根據(jù)化ilstate跳 轉(zhuǎn),繼續(xù)捜索。
[0075] 步驟8-2.如q. suffix為假則繼續(xù)根據(jù)Goto函數(shù)與失敗指針來確定下一狀態(tài)節(jié)點。
[0076] 本發(fā)明基于決策樹剪枝的AC改進(jìn)算法,包括自動機(jī)的生成、自動機(jī)的簡化、計算失 敗指針、存儲后綴表與匹配的執(zhí)行。本發(fā)明在具體實現(xiàn)時,將傳統(tǒng)自動機(jī)類型模式匹配算法 拆分為兩個步驟:匹配可能的判定與匹配確認(rèn)。通過簡化自動機(jī)判別文本串與模式集中模 式串有無匹配的可能,再進(jìn)行匹配的確認(rèn)。在保持原有的匹配速度的前提下,有效減少自動 機(jī)節(jié)點數(shù)量,去除自動機(jī)中冗余節(jié)點,達(dá)到簡化自動機(jī)規(guī)模,降低模式匹配算法的內(nèi)存消耗 的目的。本發(fā)明可W針對絕大多數(shù)自動機(jī)類型的匹配算法進(jìn)行簡化。
【主權(quán)項】
1. 基于決策樹剪枝的模式匹配方法,其特征是,包括如下步驟: 步驟A.即根據(jù)自動機(jī)生成規(guī)則,將模式集中的模式串依次添加到自動機(jī)中; 步驟B.在自動機(jī)生成過程中,每一個模式串添加完成,即將此模式串添加到當(dāng)前節(jié)點 的輸出表中; 步驟C.對生成的自動機(jī)進(jìn)行剪枝,去除對分類來說屬于非必要的節(jié)點,減少自動機(jī)節(jié) 點數(shù)量,簡化自動機(jī);在對自動機(jī)進(jìn)行剪枝的過程中,生成后綴表; 步驟D.計算自動機(jī)各節(jié)點的狀態(tài)深度,其中節(jié)點的狀態(tài)深度為該節(jié)點距根節(jié)點的最短 路徑長度; 步驟E.根據(jù)節(jié)點狀態(tài)深度,計算出各節(jié)點的失敗指針; 步驟F.依次取出文本串中字符輸入自動機(jī),完成模式匹配。2. 根據(jù)權(quán)利要求1所述的基于決策樹剪枝的模式匹配方法,其特征是,步驟C的過程具 體為: 步驟C1.對自動機(jī)的各個分支進(jìn)行逐個遍歷; 步驟C2.當(dāng)從根節(jié)點遍歷至終端葉子節(jié)點的過程中,僅存在終端葉子節(jié)點這一個輸出 節(jié)點,即輸出節(jié)點為1個時,則從終端葉子節(jié)點開始向上回溯至最后一個單分枝節(jié)點,將該 單分枝節(jié)點的剪枝標(biāo)志位置為1,修剪掉該單分枝節(jié)點之后的枝葉,并將該單分枝節(jié)點的后 續(xù)枝葉包含的后綴以字符串的形式存儲于后綴表; 步驟C3.當(dāng)從根節(jié)點遍歷至終端葉子節(jié)點的過程中,存在除終端葉子節(jié)點這一個輸出 節(jié)點之外的其他輸出節(jié)點,即輸出節(jié)點為2個以上時,則從終端葉子節(jié)點開始向上回溯至倒 數(shù)第二個輸出節(jié)點,將該倒數(shù)第二個輸出節(jié)點的剪枝標(biāo)志位置為1,修剪掉該倒數(shù)第二個輸 出節(jié)點之后的枝葉,并將該倒數(shù)第二個輸出節(jié)點的后續(xù)枝葉包含的后綴以字符串的形式存 儲于后綴表。3. 根據(jù)權(quán)利要求1所述的基于決策樹剪枝的模式匹配方法,其特征是,步驟E的過程具 體為: 步驟E1.將自動機(jī)的根節(jié)點的失敗指針指向根節(jié)點; 步驟E2.將自動機(jī)中狀態(tài)深度為1的節(jié)點的失敗指針也指向根節(jié)點; 步驟E3 .對于自動機(jī)中狀態(tài)深度大于或等于2的節(jié)點s,若其父節(jié)點r經(jīng)過字符a能夠到 達(dá)節(jié)點s 即Go to (r,a) = s,則先將節(jié)點s的當(dāng)前狀態(tài)指向父節(jié)點r的失敗狀態(tài),直至節(jié)點s的 當(dāng)前狀態(tài)經(jīng)過字符a存在下一跳節(jié)點t時,將節(jié)點s的失敗指針指向節(jié)點t。4. 根據(jù)權(quán)利要求1所述的基于決策樹剪枝的模式匹配方法,其特征是,步驟F的過程具 體為: 步驟F1.在執(zhí)行階段搜索過程中,自根節(jié)點開始,依次取出文本串中的字符,根據(jù)預(yù)先 生成的轉(zhuǎn)移表和失敗表確定下一節(jié)點; 步驟F2.檢查當(dāng)前節(jié)點q的輸出標(biāo)志位q. danger: 如輸出標(biāo)志位q. danger = 1,則輸出棧中字符串; 如輸出標(biāo)志位q. danger = 0,則不進(jìn)行輸出; 步驟F3.繼續(xù)檢查當(dāng)前節(jié)點q的剪枝標(biāo)志位q. suff ix; 如剪枝標(biāo)志位q. suffix=l,則轉(zhuǎn)向節(jié)點q的后綴存儲位置指針q. suffix.pointer指向 的后綴繼續(xù)進(jìn)行匹配判定,完成完整的字符串判定:如成功則輸出棧中字符串和對應(yīng)后綴 作為完整的規(guī)則,并返回相應(yīng)的節(jié)點q;如不成功則應(yīng)直接返回至相應(yīng)的節(jié)點q,再根據(jù)預(yù)先 生成的函數(shù)進(jìn)行跳轉(zhuǎn),繼續(xù)搜索; 如剪枝標(biāo)志位q. suffix = 0,則繼續(xù)根據(jù)轉(zhuǎn)移表與失敗表來確定下一狀態(tài)節(jié)點。
【文檔編號】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
【發(fā)明人】古天龍, 王亞南, 徐周波, 常亮, 陳帥, 王敏
【申請人】桂林電子科技大學(xué)