資料介紹
提出了改進的AC-BM算法,將待匹配的字符串集合轉換為一個類似于Aho-Corasick算法的樹狀有限狀態自動機。匹配時,采取自后向前的方法,并借用BM算法的壞字符跳轉和好前綴跳轉技術。改進的AC-BM算法借助BMH算法思想,取消了原AC-BM算法的好前綴跳轉,并對壞字符跳轉部分的計算進行優化。新算法修改了skip的計算方法,不再保留每個節點的好前綴跳轉參數及壞字符跳轉參數,因此匹配只與當前匹配字符有關,而與當前節點無關,可以實現大小寫正文的識別。
關 鍵 詞 算法; 字符串匹配; 內容分析; 入侵檢測
Abstract ACBM is a Boyer-Moore like algorithm applied to a set of keywords held in an Aho-Corassick like keyword tree that overlays common prefixes of the keywords. The algorithm takes the best characteristics of both the Boyer-Moore and Aho-Corasick. Based on the idea of Boyer-Moore-Horspool, we make an improvement to AC-BM algorithm. In the improved version, the Good Prefix Shift is not performed, the Bad Character Shift function is improved, the Goto procedure is also modified which do not keep the parameters of Good Prefix Shift and Bad Character Shift.
Key words algorithm; string matching; content analysis; intrusion detection
字符串匹配是指在文本Textt=t1t2…tn中檢索子串Patp=p1p2…pm的所有出現。字符串匹配可分為單字符串匹配和字符串集合匹配兩種。單字符串匹配算法最著名的是KMP(Knuth-Morris-Pratt)算法和BM(Boyer-Moore)算法。KMP算法實現了無回溯匹配,字符串中的每個字符只匹配一次,時間復雜度為O(n+m)[1];BM算法采用跳躍方式,匹配時跳過不需匹配的字符,最優情況下的時間復雜度為O(n/m),平均情況下也大大優于KMP算法[2];文獻[3]取掉BM算法的好后綴試探(Good Suffix Heuristic),形成BMH(Boyer-Moore-Horspool)算法,實驗證明BMH算法性能在自然語言環境下比原始BM算法還要好。
字符串集合匹配是從文本Text中一次查找多個字符串P1,P2,…,Pm的所有出現,最經典的是AC(Aho and Corasick)算法。該算法將待匹配的多個字符串轉換為樹狀有限狀態自動機,然后進行掃描匹配,最優情況和平均情況的時間復雜度都為O(n)[4];文獻[5]提出了一種類似于AC和BM的算法,即Aho-Corasick_Boyer-Moore(AC_BM)混合算法。該算法根據包過濾的規則前綴共同信息較多的特點,采取自后向前的搜索方法,因此在速度方面具有較高的優越性[6]。
本文對AC-BM算法提出改進,并根據BMH算法的思想,取消好前綴跳轉(Good Prefix Shift),測試結果表明,該算法在數據包過濾、內容分析與審計等應用中,優于AC-BM算法。
1 AC-BM算法描述
AC-BM算法將待匹配的字符串集合轉換為一個類似于Aho-Corasick算法的樹狀有限狀態自動機,但構建時不是基于字符串的后綴而是前綴。匹配時,采取自后向前的方法,并借用BM算法的壞字符跳轉(BadCharacter Shift)和好前綴跳轉(Good Prefix Shift)技術。
壞字符跳轉即當字符串樹中的字符與被匹配內容x失配時,將字符串樹跳轉到下一個x的出現位置,如果x的字符串樹不存在,則將字符串樹向左移動字符串樹的最小字符串長度。好前綴跳轉即當字符串樹中的字符與被匹配內容x失配時,將字符串樹跳轉到字符串樹中一個與被測正文部分等同的位置。這個等同部分可以是字符串樹中某字符串的子串(子串跳轉),也可以是一個字符串的后綴(后綴跳轉)。
例如,設有規則ethernetmovesme,ethernetisking,ethernetisdead和ethernetforever,要檢查的數據包內容為nothingtoworryaboutinthis。首先,構造字符串有限狀態自動機,如圖1a。匹配從字符r開始,顯然r與e不匹配,由于字符串樹中下一個r出現在深度5的位置,字符串樹的最小字符串長度為14,根據壞字符跳轉,字符串樹可以安全向左移動5個字符,如圖1b。
掃碼添加小助手
加入工程師交流群
- 字符串操作 2次下載
- strtok拆分字符串
- 利用STM32單片機串口發送字符串
- 串口屏LUA教程6-運算和字符串處理
- C語言編程字符串函數匯總資源下載 9次下載
- LabVIEW的常用字符串操作教程免費下載 27次下載
- 用指針實現字符串拷貝的程序和字符型指針變量與字符數組的區別說明 2次下載
- C語言中的字符串的使用方法詳細說明 1次下載
- 如何發送字符串數據詳細資料和程序說明
- C語言的字符串處理函數
- 讀取字符串的C語言程序免費下載 10次下載
- BM模式匹配算法的研究和改進 0次下載
- 字符串函數測試學習工程
- 信息過濾系統中字符串匹配算法的研究
- 基于網絡入侵模式匹配的BM 算法研究與優化The Optim
- 字符串在編程中的應用實例 1.2k次閱讀
- 字符串反轉的實現方式 1.3k次閱讀
- C語言字符串編譯函數介紹 1k次閱讀
- 字符數組和字符串有沒有區別? 1.4k次閱讀
- 字符串的相關知識 1.7k次閱讀
- 什么是字符串 9.2k次閱讀
- C語言字符數組和字符串有什么區別 5.1k次閱讀
- 一文詳解JavaScript字符串 1.8k次閱讀
- 探究字符串模式匹配的高級數據結構和算法 1.6k次閱讀
- 平化字符串處理方法簡介 3.1k次閱讀
- 字符串函數重寫練習 2.6k次閱讀
- 什么是復制字符串?Python如何復制字符串 3.4k次閱讀
- 學習Tcl來這里:字符串匹配 6.4k次閱讀
- 字符串移位包含的問題解決方案 1.2k次閱讀
- 字符串的KMP算法和BM算法 2.7k次閱讀
下載排行
本周
- 1MDD品牌三極管MMBT3906數據手冊
- 2.33 MB | 次下載 | 免費
- 2MDD品牌三極管S9012數據手冊
- 2.62 MB | 次下載 | 免費
- 3聯想flex2-14D/15D說明書
- 4.92 MB | 次下載 | 免費
- 4收音環繞擴音機 AVR-1507手冊
- 2.50 MB | 次下載 | 免費
- 524Pin Type-C連接器設計報告
- 1.06 MB | 次下載 | 免費
- 6新一代網絡可視化(NPB 2.0)
- 3.40 MB | 次下載 | 免費
- 7MS1000TA 超聲波測量模擬前端芯片技術手冊
- 0.60 MB | 次下載 | 免費
- 8MS1022高精度時間測量(TDC)電路數據手冊
- 1.81 MB | 次下載 | 免費
本月
- 1愛華AIWA HS-J202維修手冊
- 3.34 MB | 37次下載 | 免費
- 2PC5502負載均流控制電路數據手冊
- 1.63 MB | 23次下載 | 免費
- 3NB-IoT芯片廠商的資料說明
- 0.31 MB | 22次下載 | 1 積分
- 4H110主板CPU PWM芯片ISL95858HRZ-T核心供電電路圖資料
- 0.63 MB | 6次下載 | 1 積分
- 5UWB653Pro USB口測距通信定位模塊規格書
- 838.47 KB | 5次下載 | 免費
- 6技嘉H110主板IT8628E_BX IO電路圖資料
- 2.61 MB | 4次下載 | 1 積分
- 7蘇泊爾DCL6907(即CHK-S007)單芯片電磁爐原理圖資料
- 0.04 MB | 4次下載 | 1 積分
- 8100W準諧振反激式恒流電源電路圖資料
- 0.09 MB | 2次下載 | 1 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191439次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183353次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81602次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73822次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發燒友App





創作
發文章
發帖
提問
發資料
發視頻
上傳資料賺積分
評論