專利名稱:有限狀態(tài)自動機生成方法、關鍵字匹配方法及裝置和設備的制作方法
技術領域:
本發(fā)明涉及有限狀態(tài)自動機領域,尤其涉及一種有限狀態(tài)自動機的生成方法、關 鍵字匹配方法及裝置和設備。
背景技術:
在進行關鍵字的字符串匹配、文本檢索、網(wǎng)絡數(shù)據(jù)流深度內(nèi)容過濾、入侵檢測和網(wǎng) 絡防毒等領域常使用Aho-Corasick算法,該算法的核心在于使用一個涵蓋所有查詢關鍵 字的有限狀態(tài)自動機(Deterministic Finite State Automaton,DFA),被搜索關鍵字的每 個字符逐個輸入到DFA中,當某個關鍵字命中,DFA輸出報告。Aho-Corasick算法首先構(gòu)造GOTO函數(shù)、然后構(gòu)造FAILURE函數(shù),最后將構(gòu)造的 GOTO函數(shù)和FAILURE函數(shù)合并生成DFA,假設需要在字符串數(shù)據(jù)庫中搜索4個關鍵字“HE”、 “SHE”、“HIS”和“HERZWXY”,生成的DFA如下表1所示。表 權(quán)利要求
一種有限狀態(tài)自動機的生成方法,其特征在于,包括針對待生成的有限狀態(tài)自動機DFA的每個狀態(tài),在為該狀態(tài)分配的內(nèi)存空間中為該狀態(tài)生成第一狀態(tài)對應表,所述第一狀態(tài)對應表用于記錄向所述待生成的DFA輸入ASCII字符表的每個字符時,所述待生成的DFA的下一狀態(tài)的值為0或者為非0;針對所述待生成的DFA的每個狀態(tài),在為該狀態(tài)分配的內(nèi)存空間中為該狀態(tài)生成第二狀態(tài)對應表,所述第二狀態(tài)對應表用于記錄所述第一狀態(tài)對應表記錄的下一狀態(tài)的值為非0時該下一狀態(tài)的值;將所有狀態(tài)的第一狀態(tài)對應表和第二狀態(tài)對應表作為所述待生成的DFA。
2.如權(quán)利要求1所述的方法,其特征在于,所述生成第一對應表,包括針對所述待生成的DFA的每個狀態(tài),將為該狀態(tài)分配的存儲空間起始的N個比特分別 記錄為第一標識位或第二標識位;其中,第n+1個比特記錄的第一標識位用于指示在該狀 態(tài)下,向所述待生成的DFA輸入ASCII字符表中十進制為η的字符時所述待生成的DFA的 下一個狀態(tài)的值為0 ;第n+1個比特位記錄的第二標識位用于指示在該狀態(tài)下,向所述待生 成的DFA輸入ASCII字符表中十進制為η的字符時所述待生成的DFA的下一個狀態(tài)的值為 非0 ;所述η的取值范圍為
,所述N等于ASCII字符表的字符總數(shù); 將所述N個比特位的記錄作為第一對應表。
3.如權(quán)利要求1或2所述的方法,其特征在于,生成第二狀態(tài)對應表,包括針對所述待生成的DFA的每個狀態(tài),按照每個下一狀態(tài)的值為非0的記錄在第一狀態(tài) 對應表中的先后順序,將為該狀態(tài)分配的存儲空間起始的N個比特之后的M個字節(jié)分別記 錄為與所述每個下一狀態(tài)為非0的記錄對應的下一狀態(tài)的值;所述M等于第一狀態(tài)對應表 中所有下一狀態(tài)為非0的記錄的總數(shù);將所述M個字節(jié)的記錄作為第二狀態(tài)對應表。
4.一種使用有限狀態(tài)自動機進行關鍵字匹配的方法,其特征在于,包括 在當前狀態(tài)下,接收輸入的待查詢的關鍵字中的一個字符;在當前狀態(tài)的第一狀態(tài)對應表中查詢與該字符對應的有限狀態(tài)自動機DFA下一狀態(tài) 的記錄;若查詢到的記錄為下一狀態(tài)的值為0,則跳轉(zhuǎn)至狀態(tài)0,等待接收所述待查詢的關鍵字 中的下一個字符;若查詢到的記錄為下一狀態(tài)的值為非0,在當前狀態(tài)的第二狀態(tài)對應表中查詢該字符 對應的下一個狀態(tài)的值,根據(jù)查詢的結(jié)果跳轉(zhuǎn)至相應的下一狀態(tài),等待接收所述待查詢的 關鍵字中的下一個字符;輸出所述待查詢的關鍵字的匹配結(jié)果。
5.如權(quán)利要求4所述的方法,其特征在于,在當前狀態(tài)的第一狀態(tài)對應表中查詢該字 符對應的下一狀態(tài)的記錄,包括確定該字符在ASCII字符表中對應的十進制的字符η ;所述η的取值范圍為
, 所述N為ASCII字符表的字符總數(shù);從所述第一狀態(tài)對應表中,獲取第n+1個比特位記錄的第一標識位或第二標識位;所 述第一標識位用于指示向所述DFA輸入ASCII字符表中十進制為η的字符時所述DFA的下 一個狀態(tài)的值為0;所述第二標識位用于指示向所述DFA輸入ASCII字符表中十進制為η的字符時所述DFA的下一個狀態(tài)的值為非0。
6.如權(quán)利要求4或5所述的方法,其特征在于,所述在當前狀態(tài)的第二狀態(tài)對應表中查 詢該字符對應的下一個狀態(tài)的值,包括確定該字符對應的DFA的下一個狀態(tài)的記錄在所述第一狀態(tài)對應表中所有DFA下一狀 態(tài)的值為非0的記錄中的位序;在所述第二狀態(tài)對應表中,獲取相同位序的字節(jié)記錄的該字符對應的DFA的下一個狀 態(tài)的值。
7.一種有限狀態(tài)自動機的生成裝置,其特征在于,包括第一狀態(tài)對應表生成單元,用于針對待生成的有限狀態(tài)自動機DFA的每個狀態(tài),在為 該狀態(tài)分配的內(nèi)存空間中為該狀態(tài)生成第一狀態(tài)對應表,所述第一狀態(tài)對應表用于記錄向 所述待生成的DFA輸入ASCII字符表的每個字符時,所述DFA的下一狀態(tài)的值為0或者為 非0;第二狀態(tài)對應表生成單元,用于針對所述待生成的DFA的每個狀態(tài),在為該狀態(tài)分配 的內(nèi)存空間中為該狀態(tài)生成第二狀態(tài)對應表,所述第二狀態(tài)對應表用于記錄所述第一狀態(tài) 對應表記錄的下一狀態(tài)的值為非0時該下一狀態(tài)的值;DFA生成單元,用于將所有狀態(tài)的第一狀態(tài)對應表和第二狀態(tài)對應表作為所述待生成 的 DFA。
8.如權(quán)利要求7所述的裝置,其特征在于,所述第一狀態(tài)對應表生成單元,具體用于針 對所述待生成的DFA的每個狀態(tài),將為該狀態(tài)分配的存儲空間起始的N個比特分別記錄為 第一標識位或第二標識位;其中,第n+1個比特記錄的第一標識位用于指示在該狀態(tài)下,向 所述待生成的DFA輸入ASCII字符表中十進制為η的字符時所述DFA的下一個狀態(tài)的值 為0 ;第n+1個比特位記錄的第二標識位用于指示在該狀態(tài)下,向所述待生成的DFA輸入 ASCII字符表中十進制為η的字符時所述待生成的DFA的下一個狀態(tài)的值為非0 ;所述N等 于ASCII字符表的字符總數(shù),所述η的取值范圍為
;以及將所述N個比特位的記錄 作為第一對應表。
9.如權(quán)利要求7或8所述的裝置,其特征在于,所述第二狀態(tài)對應表生成單元,具體用 于針對所述待生成的DFA的每個狀態(tài),按照每個下一狀態(tài)的值為非0的記錄在第一狀態(tài)對 應表中的先后順序,將為該狀態(tài)分配的存儲空間起始的N個比特之后的M個字節(jié)分別記錄 為與所述每個下一狀態(tài)為非0的記錄對應的下一狀態(tài)的值;所述M等于第一狀態(tài)對應表中 所有下一狀態(tài)為非0的記錄的總數(shù);以及將所述M個字節(jié)的記錄作為第二狀態(tài)對應表。
10.一種關鍵字匹配的裝置,其特征在于,包括接收單元,用于在當前狀態(tài)下,接收輸入的待查詢的關鍵字中的一個字符;以及在狀態(tài) 跳轉(zhuǎn)單元進行狀態(tài)跳轉(zhuǎn)之后,等待接收所述待查詢的關鍵字的下一個字符;第一狀態(tài)對應表查詢單元,用于在當前狀態(tài)的第一狀態(tài)對應表中查詢與所述接收單元 接收的字符對應的有限狀態(tài)自動機DFA下一狀態(tài)的記錄;狀態(tài)跳轉(zhuǎn)單元,用于在所述第一狀態(tài)對應表查詢單元查詢到的記錄為下一狀態(tài)的值為 0時,跳轉(zhuǎn)至狀態(tài)0 ;以及在所述第一狀態(tài)對應表查詢單元查詢到的記錄為下一狀態(tài)的值為 非0時,根據(jù)所述第二狀態(tài)對應表查詢單元查詢到的下一狀態(tài)的值,跳轉(zhuǎn)至相應的下一狀 態(tài);第二狀態(tài)對應表查詢單元,用于在所述第一狀態(tài)對應表查詢單元查詢到的記錄為下一 狀態(tài)的值為非0時,在當前狀態(tài)的第二狀態(tài)對應表中查詢該字符對應的下一狀態(tài)的值; 結(jié)果輸出單元,用于輸出所述待查詢的關鍵字的匹配結(jié)果。
11.如權(quán)利要求10所述的裝置,其特征在于,所述第一狀態(tài)對應表查詢單元,具體包括第一確定子單元,用于確定該字符在ASCII字符表中對應的十進制的字符η ;所述η的 取值范圍為
,所述N為ASCII字符表的字符總數(shù);第一獲取子單元,用于從所述第一狀態(tài)對應表中,獲取第n+1個比特位記錄的第一標 識位或第二標識位;所述第一標識位用于指示向所述DFA輸入ASCII字符表中十進制為η 的字符時所述DFA的下一個狀態(tài)的值為0 ;所述第二標識位用于指示向所述DFA輸入ASCII 字符表中十進制為η的字符時所述DFA的下一個狀態(tài)的值為非0。
12.如權(quán)利要求10或11所述的裝置,其特征在于,所述第二狀態(tài)對應表查詢單元,具體 包括第二確定子單元,用于確定該字符對應的DFA的下一個狀態(tài)的記錄在所述第一狀態(tài)對 應表中所有DFA下一狀態(tài)的值為非0的記錄中的位序;第二獲取子單元,用于在所述第二狀態(tài)對應表中,獲取與相同位序的字節(jié)記錄的DFA 的下一個狀態(tài)的值。
13.—種網(wǎng)絡設備,其特征在于,包括如權(quán)利要求7-9任一項所述的有限狀態(tài)自動機的 生成裝置以及如權(quán)利要求10-12任一項所述的關鍵字匹配的裝置。
全文摘要
本發(fā)明公開了一種有限狀態(tài)自動機的生成方法、查詢方法及裝置和設備,其中生成方法包括針對待生成的DFA的每個狀態(tài),在為該狀態(tài)分配的內(nèi)存空間中為該狀態(tài)生成第一狀態(tài)對應表,第一狀態(tài)對應表用于記錄向待生成的DFA輸入ASCII字符表的每個字符時,待生成的DFA的下一狀態(tài)的值為0或者為非0;針對待生成的DFA的每個狀態(tài),在為該狀態(tài)分配的內(nèi)存空間中為該狀態(tài)生成第二狀態(tài)對應表,第二狀態(tài)對應表用于記錄第一狀態(tài)對應表記錄的下一狀態(tài)的值為非0時該下一狀態(tài)的值;將所有狀態(tài)的第一狀態(tài)對應表和第二狀態(tài)對應表作為待生成的DFA。與現(xiàn)有技術相比,本發(fā)明提供的有限狀態(tài)自動機的生成方法生成的DFA,所占用的存儲資源大大減少。
文檔編號G06F17/30GK101944121SQ20101028902
公開日2011年1月12日 申請日期2010年9月20日 優(yōu)先權(quán)日2010年9月20日
發(fā)明者黃凱明 申請人:北京星網(wǎng)銳捷網(wǎng)絡技術有限公司