多模式的串匹配方法和裝置的制造方法
【技術領域】
[0001] 本發明實施例涉及計算機數據處理技術領域,尤其涉及一種多模式的串匹配方法 和裝置。
【背景技術】
[0002] 串匹配問題是計算機科學領域中最為經常遇到的一類問題。串匹配算法在信息減 弱、分子生物學、數據壓縮等方面有著非常廣泛的應用。串匹配算法可以被分為單模式串匹 配算法和多模式串匹配算法。而在多模式串匹配算法中,Aho-Corasick算法和Wu-Manber 算法是最為經典的兩種算法。
[0003] Aho-Corasick算法簡稱AC算法,是KMP單模式串匹配算法處理多模式串的擴展算 法。AC算法采用有限狀態自動機來組織所有的模式串,集成了KMP算法,通過計算最長前綴 移動窗口和匹配位置,以減少遍歷所有匹配窗口的循環次數。
[0004] 但是,AC算法在執行過程中,是以文本串的每個字符為單位,逐一進行計算。這就 造成了在運行AC算法進行串匹配時,比較次數較多,運行效率不高。
[0005] Wu-Manber算法是BM算法在處理多模式串問題時使用的一種派生算法,它的主要 特點是集成了BM算法中不良字符轉移機制,利用塊字符擴展了不良字符的轉移效果,同時 利用散列表來減少匹配過程的計算量。
[0006] 在Wu-Manber算法執行時,當前綴確認匹配之后,需要進行字符串其余部分的驗 證,而且,這種驗證是模式串的全長度驗證。顯然,這種模式串的全長度驗證會導致對原始 文本內容提前的比對。但是在Wu-Manber算法中,并沒有對這種提前發生的比對進行結果 記錄,造成尋找下一個可能的匹配位置時仍然要依賴再一次的比較操作,造成算法性能的 下降。
【發明內容】
[0007] 針對上述技術問題,本發明實施例提供了一種多模式的串匹配方法和裝置,以解 決AC算法中窗口滑動慢,以及Wu-Manber算法中比較結果不留存的問題。
[0008] 第一方面,本發明實施例提供了一種多模式的串匹配方法,所述方法包括:
[0009] 根據模式串創建Aho-Corasick自動機;
[0010] 根據模式串創建移動表,其中所述移動表記錄了所述模式串中字符塊的位移量;
[0011] 若文本串的滑動窗口未滑動至所述文本串的末尾,根據所述移動表尋找可能的匹 配位置,所述滑動窗口的長度至少是2 ;
[0012] 對根據所述移動表找到的可能的匹配位置,根據所述Aho-Corasick自動機進行 匹配驗證;
[0013] 根據所述移動表繼續尋找下一個可能的匹配位置,直至所述滑動窗口滑動至所述 文本串的末尾。
[0014] 第二方面,本發明實施例還提供了一種多模式的串匹配裝置,所述裝置包括:
[0015] 自動機創建模塊,用于根據模式串創建Aho-Corasick自動機;
[0016] 移動表創建模塊,用于根據模式串創建移動表,其中所述移動表記錄了所述模式 串中字符塊的位移量;
[0017] 位置尋找模塊,用于若文本串的滑動窗口未滑動至所述文本串的末尾,根據所述 移動表尋找可能的匹配位置,所述滑動窗口的長度至少是2 ;
[0018] 匹配驗證模塊,用于對根據所述移動表找到的可能的匹配位置,根據所述 Aho-Corasick自動機進行匹配驗證;
[0019] 重復尋找模塊,用于根據所述移動表繼續尋找下一個可能的匹配位置,直至所述 滑動窗口滑動至所述文本串的末尾。
[0020] 本發明實施例提供的多模式的串匹配方法和裝置,利用移動表尋找文本串與多 個模式串之間可能的匹配位置,再利用Aho-Corasick自動機對所述可能的匹配位置進行 匹配驗證,綜合了AC算法及Wu-Manber算法的優點,解決了AC算法中窗口滑動慢,以及 Wu-Manber算法中比較結果不留存的問題,提高了串匹配的執行效率。
【附圖說明】
[0021] 通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細描述,本發明的其它 特征、目的和優點將會變得更明顯:
[0022] 圖1是本發明第一實施例提供的多模式的串匹配方法的流程圖;
[0023] 圖2是本發明第一實施例提供的Aho-Corasick自動機的結構示意圖;
[0024] 圖3是本發明第二實施例提供的多模式的串匹配方法中自動機創建操作的流程 圖;
[0025] 圖4是本發明第三實施例提供的多模式的串匹配裝置的結構圖。
【具體實施方式】
[0026] 下面結合附圖和實施例對本發明作進一步的詳細說明。可以理解的是,此處所描 述的具體實施例僅僅用于解釋本發明,而非對本發明的限定。另外還需要說明的是,為了便 于描述,附圖中僅示出了與本發明相關的部分而非全部結構。
[0027] 第一實施例
[0028] 本實施例提供了多模式的串匹配方法的一種技術方案。在該技術方案中,作為主 字符串的文本串一次與至少兩個模式串進行匹配。并且,所述文本串及所述模式串的內容 均出自于預先定義的一個有限的符號集合。
[0029] 參見圖1,所述多模式的串匹配方法包括:
[0030] S11,根據模式串創建Aho-Corasick自動機。
[0031] 所述Aho-Corasick自動機是AC算法中必須使用的一種數據結構,它屬于有限狀 態自動機(Finitestatemachine,FSA)中的一種。所述Aho-Corasick自動機是Aho等人 對trie結構進行擴展后形成的,其基本結構是由所有模式串所構成的樹形結構。與傳統的 tire結構相比,每個節點增加了一個轉移指針。所述轉移指針指向每個狀態的失效節點,表 示該節點對應子串在KMP算法中根據最長前綴計算出的轉移節點。圖2示出了由模式串集 合P= {he,she,his,hers}所構成的Aho-Corasick自動機。
[0032] 具體的,所述Aho-Corasick自動機的創建過程與現有的AC算法中Aho-Corasick 自動機的創建過程相同。具體的,可以通過分別創建所述模式串的轉移函數、失效函數以及 輸出函數,實現對所述Aho-Corasick自動機的創建。
[0033] S12,根據模式串創建移動表,其中所述移動表記錄了所述模式串中字符塊的位移 量。
[0034] 所述移動表也被稱為shift表,是在Wu-Manber算法中必須使用的一種表。它 與哈希(hash)表及前綴(prefix)表共同形成了Wu-Manber算法獨有的查詢詞典,使得 mi-Manber算法中可以快速的進行窗口的滑動而不需要針對每個字符進行比較,并且有效 的避免一些不必要的匹配的發生。
[0035] 所述移動表是在模式集中取每個模式串的前B個字符,計算該字符塊的哈希值對 應表項的跳轉值。通過所述移動表,整個字符查找的過程就變成了根據詞表進行跳轉的過 程。所述移動表也有自己的默認跳轉值,與所有模式串中最短長度有關系。因此,假設模式 串集合中所有模式串的長度都很長的時候,執行串匹配的跳轉速度會很快。
[0036] 建立所述Aho-Corasick自動機的步驟以及建立所述移動表的步驟是真正開始執 行串匹配運算之前的準備步驟。但是,由于本實施例提供的方法在執行串匹配運算時需要 使用上述兩種數據結構,因此上述兩種數據結構的創建必須在真正執行串匹配操作之前完 成。
[0037]S13,若文本串的滑動窗口未滑動至所述文本串的末尾,根據所述移動表尋找可能 的匹配位置,所述滑動窗口的長度至少是2。
[0038] 利用所述滑動窗口在所述文本串上的滑動,找尋所述文本串上可能的匹配位置。 而且,所述滑動窗口的長度至少是2。
[0039] 優選的,可以通過查找所述移動表中位移量是0的位置,并將位移量為0的位置作 為可能的匹配位置。
[0040] S14,對根據所述移動表找到的可能的匹配位置,根據所述Aho-Corasick自動機 進行匹配驗證。
[0041] 具體的,根據所述Aho-Corasick自動機進行匹配驗證就是在所述可能的匹配位 置上運行AC算法,從而驗證所述可能的匹配位置是不是與模式串真正匹配。
[0042] S15,根據所述移動表繼續尋找下一個可能的匹配位置,直至所述滑動窗口滑動至 所述文本串的末尾。
[0043] 在執行了對一個可能的匹配位置的匹配驗證之后,根據所述移動表查找下一個可 能的匹配位置,并對所述下一個可能的匹配位置進行匹配驗證。當所述滑動串口被滑動至 所述文本串的末尾時,所述多模式的串匹配方法執行結束。
[0044] 本實施例通過根據模式串創建Aho-Corasick自動機,根據模式串創建移動表,若 文本串的滑動窗口未滑動至所述文本串的末尾,