一種實現Aho-Corasick算法所用數據結構動態生成的改進方法,包括增加和刪除特征字符串的操作;將特征字符串拆成單個字符,在DFA該位置上增加相應節點;在新節點設置相應的數據,檢查父節點的失效目標;找到節點:踢出本節點指代字符串的第一個字符,用剩下的字符串對DFA進行匹配;找到失效目標的實現歸屬集合,遍歷其中所有節點的引用,檢查有無節點應該將本節點作為其失效目標節點;節點增加到DFA頭部的字符集對象集合處;依次從后往前進行對字符串的減少工作;找到該對應節點。實現了對該數據結構的動態維護,方便實現了在較短的時間內對大量不斷變動的字符串進行多模式匹配檢索。
【技術實現步驟摘要】
本專利技術屬于計算機理論領域,用于為多模式字符串匹配的Aho-Corasick算法提供可動態加減的Aho-Corasick-tree數據結構。
技術介紹
隨著信息技術的飛速發展,尤其在大數據處理的問題上,如何實現關鍵字段的快速檢索是一個越來越突出的問題。尤其在WEB2. O時代,實時性的對大量數據進行遍歷或搜索是ー個常態化的操作。在如此大量數據量處理上,往往同時需要檢索很多不同字符串,進行多模式匹配操作,這就需要用到Aho-Corasick算法。但此算法存在一個問題,作為ー個自動機算法,它依靠的是來源于眾多特征字符串而預先生成的樹形數據結構,一旦在運行過程中需要增添或者刪減特征串時,需要中斷運行,刪除以前的數據結構,重新生成新的數據結構。如果新的串集合較大,這樣的步驟就需要相當的時間進行處理了。在此期間,數據的處理就無法及時反映出來,因此需要ー種算法,即能保證實現多模式匹配,又能在有限時間內完成數據的重組操作。
技術實現思路
本專利技術的目的在于針對上述算法的不足,,通過提供衣一種,實現對該數據結構的動態維護,方便實現對大量不斷變動的字符串進行多模式匹配檢索。本專利技術是采用以下技術手段實現的—種,包括增加和刪除特征字符串的操作;增加特征字符串包括以下步驟步驟I :將特征字符串拆成單個字符,經由DFA樹進行單個匹配,當DFA中不存在相應字符時,在DFA該位置上増加相應節點;步驟2 :在新節點設置相應的數據,檢查父節點的失效目標,是否有對應于本節點指代字符的兒子節點。如有,設為本節點的失效目標,執行步驟5 ;如無,執行步驟3 ;步驟3 :重復步驟4,如找到節點,停止;如沒有,再踢出ー個字符串的頭字符,重復步驟4 ;如直到剩最后一個字符,都沒有完成匹配,那么,執行步驟6 ;步驟4:踢出本節點指代字符串的第一個字符,用剩下的字符串對DFA進行匹配,如找到符合的節點,將該節點作為失效目標,執行步驟5,返回步驟3;如沒找到,也返回步驟3 ;步驟5 :找到失效目標的實現歸屬集合,遍歷其中所有節點的引用,檢查有無節點應該將本節點作為其失效目標節點,如有,設置;步驟6 :節點增加到DFA頭部的字符集對象集合處,如有該節點指代字符的字符集對象,添加該節點指針到對應字符集對象中,并遍歷其中節點對象的引用,是否有對象應該講本節點作為失效目標進行設置,如有,設置;減少特征字符串包括以下步驟步驟7 :依次從后往前進行對字符串的減少工作,單個字符進行操作,重復執行步驟8,直到步驟8沒有返回為止;步驟8 找到該對應節點,如本節點沒有兒子節點,刪除本節點,并返回步驟7。本專利技術與現有技術相比,具有以下明顯的優勢和有益效果本專利技術ー種,實現了對該數據結構的動態維護,方便實現了在較短的時間內對大量不斷變動的字符串進行多模式匹配檢索。即保證了實現多模式匹配,又能在有限時間內完成數據的重組操作。附圖說明 圖I為串的動態增加流程圖;圖2為串的動態刪除流程圖。具體實施例方式以下結合說明書附圖對本專利技術的具體實施例加以說明。技術方案數據定義部分需要用到的數據結構及組成部分的定義。定義I :節點對象,包括1)節點指代的字符;2)從根節點到達該節點時對應的字符串;3)節點的兒子節點引用集合;4)所有以該節點作為失效目標的節點引用集合(下文統稱“失效歸屬集合”);5)節點相對根節點的深度;6)節點的父節點引用;7)節點的失效目標節點引用;8)標記是否是字符串結束節點。定義2 :表頭對象,包括1)字符表對象集合。定義3 :根節點對象,包括1)普通節點對象的一般信息;2)節點指代字符為空;3)節點失效目標指向自身。定義4 :字符表對象,包括I)指代字符2)封鎖記號3)所有節點字符與指代字符相同并且失效目標指向根節點的節點對象集合(下文統稱稱“失效對象歸屬集合”)。定義5 Aho-Corasick數據結構樹對象,包括1)根節點對象;2)表頭對象;3)全體節點引用集合。算法步驟分為增加與刪除兩方面請參閱圖I所示,為串的動態增加流程圖。動作tl:増加新關鍵詞從根節點出發,單個字符地匹配需要増加的字符串,如有,則指向下ー個;如沒有,則創建ー個新的節點(t2)。動作t2:創建新節點1)添加本節點的父節點引用;2)在父節點的子節點引用集合中増加本節點引用;3)設置本節點的指代字符;4)設置本節點的指代字符串;5)設置本節點的深度值;6)將節點引用添加到數據樹全體節點引用集合中;7)如是新字符串的結束標識,請標記;8)與本節點相關失效目標設置,執行動作t3。動作t3:首先找前節點的失效節點,查找其子節點集合中有無對應本節點指代字符的子節點,如有執行動作t4 ;如沒有,執行動作t6。動作t4:設置該節點為本節點的失效目標節點,并遍歷該節點的失效歸屬集合,對其內每個節點,執行動作t5;遍歷完畢后,將本節點,加入該失效歸屬集合,并設置本節點的失效目標節點為該節點。動作t5:檢查遍歷節點的深度,如比本節點深度值低或等同,則遍歷下ー節點;如不是,檢查該遍歷節點指代的字符串的后面部分子串,與本節點指代字符串是否相同,若相同,則將該遍歷節點從遍歷集合中刪除,加入本節點的失效歸屬集合,設置該節點的失效目標位本節點。動作t6:將本節點的指代字符串的后面部分,長度為本節點深度小一的子串,放到數據樹中進行匹配,如沒有相應節點,再將子串長度減少一位再匹配;如在一子串上匹配成功,找到最終的匹配節點,執行動作t4;如直到子字符串最后一位也沒有,將失效目標指向根節點,執行動作t7。動作t7:失效目標指向根節點動作,檢查數據樹對象的字符表集合,有沒有指代與本節點指代字符相同的字符表對象存在;如有,遍歷該字符表對象的失效歸屬集合,對其內的每個節點,執行動作t5。·請參閱圖2所示,為串的動態刪除流程圖。動作t8:減少一個已有的串,實際上是減少一株數據節點;在數據樹中,匹配該串,取得最后ー個節點,執行動作t9。動作t9:設置變量“原節點”等于本節點,設定本節點指向本節點的父節點,執行動作tio,直到本節點指向根節點。動作tlO:如本節點沒有子節點,遍歷本節點的失效歸屬集合,將其中的對象的失效目標改為本節點的失效目標,再將本節點的失效歸屬集合中的所有引用,添加到本節點的失效目標節點的失效歸屬集合中,如本節點的失效目標位根節點,則該添加到對應的字符表對象中的失效歸屬集合;在本節點的父節點的子節點集合中,刪除本節點引用,刪除本節點。權利要求1.一種,包括增加和刪除特征字符串的操作;其特征在于所述的增加持征字符串包括以下步驟 步驟I :將特征字符串拆成單個字符,經由DFA樹進行單個匹配,當DFA中不存在相應字符時,在DFA該位置上増加相應節點; 步驟2 :在新節點設置相應的數據,檢查父節點的失效目標,是否有對應于本節點指代字符的兒子節點。如有,設為本節點的失效目標,執行步驟5 ;如無,執行步驟3 ; 步驟3 :重復步驟4,如找到節點,停止;如沒有,再踢出ー個字符串的頭字符,重復步驟.4 ;如直到剩最后一個字符,都沒有完成匹配,那么,執行步驟6 ; 步驟4:踢出本節點指代字符串的第一個字符,用剩下的字符串對DFA進行匹配,如找到符合的節點,將該節點作為失效目標,執行步驟5,返回步驟3 ;如沒找到,也返回步驟3 ; 本文檔來自技高網...
【技術保護點】
一種實現Aho?Corasick算法所用數據結構動態生成的改進方法,包括增加和刪除特征字符串的操作;其特征在于:所述的增加特征字符串包括以下步驟:步驟1:將特征字符串拆成單個字符,經由DFA樹進行單個匹配,當DFA中不存在相應字符時,在DFA該位置上增加相應節點;步驟2:在新節點設置相應的數據,檢查父節點的失效目標,是否有對應于本節點指代字符的兒子節點。如有,設為本節點的失效目標,執行步驟5;如無,執行步驟3;步驟3:重復步驟4,如找到節點,停止;如沒有,再踢出一個字符串的頭字符,重復步驟4;如直到剩最后一個字符,都沒有完成匹配,那么,執行步驟6;步驟4:踢出本節點指代字符串的第一個字符,用剩下的字符串對DFA進行匹配,如找到符合的節點,將該節點作為失效目標,執行步驟5,返回步驟3;如沒找到,也返回步驟3;步驟5:找到失效目標的實現歸屬集合,遍歷其中所有節點的引用,檢查有無節點應該將本節點作為其失效目標節點,如有,設置;步驟6:節點增加到DFA頭部的字符集對象集合處,如有該節點指代字符的字符集對象,添加該節點指針到對應字符集對象中,并遍歷其中節點對象的引用,是否有對象應該講本節點作為失效目標進行設置,如有,設置;所述的減少特征字符串包括以下步驟:步驟7:依次從后往前進行對字符串的減少工作,單個字符進行操作,重復執行步驟8,直到步驟8沒有返回為止;步驟8:找到該對應節點,如本節點沒有兒子節點,刪除本節點,并返回步驟7。...
【技術特征摘要】
【專利技術屬性】
技術研發人員:張正欣,張建,
申請(專利權)人:北京工業大學,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。