專利名稱:一種按字長匹配的多模式串匹配方法
技術領域:
本發(fā)明屬于計算機中字符串匹配技術領域,具體涉及按字長匹配的多模式串匹配方法。多模式串匹配方法現(xiàn)已被廣泛的用于信息檢索、網(wǎng)絡內容過濾、病毒檢測和生物計算學等方面。所謂多模式串匹配,就是從文本中搜索出模式串集合中所有模式串的所有出現(xiàn)的位置。經(jīng)典的多模式匹配方法有基于前綴的匹配防范,基于后綴的匹配方法和基于子串的匹配方法。其中基于后綴的匹配方法,如1994年美國亞利桑那大學計算機學院報告 《一種快速的多模式串匹配算法》中提出的Wu-Manber方法(報告編號為TR-94-17),是目前實際中平均性能最好的一個方法,被應用于操作系統(tǒng)的搜索程序和入侵檢測系統(tǒng)中。該 Wu-Manber方法采用哈希散列和跳躍式搜索的方式,具有很好的匹配效率,但Wu-Manber方法在模式集中最短模式串長度過小時,搜索時平均跳躍距離變小,需要頻繁的計算哈希值, 驗證入口增多,匹配效率會嚴重下降。本發(fā)明提出一種按字長匹配的多模式串匹配方法,以克服現(xiàn)有技術的上述缺陷, 使多模式串匹配達到比較高的效率。本發(fā)明按字長匹配的多模式串匹配方法,包括預編譯過程和搜索過程,在字長為 32位的計算機上進行如下操作所述預編譯過程和傳統(tǒng)的Wu-Manber方法相同,為構造3個表一個跳轉表即 SHIFT表,一個哈希表即HASH表,一個前綴表即PREFIX表;設B為字符塊的長度,m為最短模式串的長度,X為當前需要計算哈希值的字符塊;字符塊哈希值的計算公式為hash(X) = (X
*256B-1) + (X[1]*256B-2)+.+(X[B_1]*2560);首先建立SHIFT表先建立一個空表,表項值都初始化為最大跳轉距離m-B+1, 在模式集中取每個模式串前m個字符,從后往前每次取相鄰B個字符組成字符塊,按上面給出的字符塊哈希值的計算公式計算該字符塊的哈希值,按字符塊跳轉值的計算公式
表項值,即形成SHIFT表;然后建立HASH表先建立一個空表,表項值都初始化為空,在模式集中取每個模式串前m個字符的后B個字符組成字符塊,按字符塊哈希值的計算公式計算該字符塊的哈希值,把哈希值相等的模式串用鏈表鏈接起來,存儲在表中對應索引值為該哈希值的表項中,即形成HASH表;再建立PREFIX表先建立一個空表,表項值初始化為空,取模式集中每個模式串前B個字符,把哈希值相等的模式串用鏈表鏈接起來,存儲在表中對應索引值為該哈希值
背景技術:
發(fā)明內容
修改表中索引值為該字符塊哈希值的的表項中,即形成PREFIX表; 其特征在于 將所述需要計算哈希值的字符塊的長度B取2,在搜索過程中,每次按字長讀取文本,即每次從文本中裝載一個整型值,字符塊的哈希值通過對該整型值的移位得到;具體操作如下設當前讀取機器字的內容是對應文本中的字符“abcd”,該機器字對應三個字符塊前面字符塊“ab”、中間字符塊“be”和后面字符塊“Cd”,機器字對應整型值為變量var, 整個搜索過程分為四個階段,用計算機語言描述如下第一階段由計算前面字符塊哈希值的公式hash (" ab" ) = (var〈〈16) 16得到前面字符塊的哈希值VI,查SHIFT表得到表中索引值為前面字符塊的哈希值Vl的表項值switch(SHIFT[VI]){case 0 :查找HASH表中索引值為前面字符塊的哈希值Vl的表項值,即為符合的模式串鏈表,對鏈表中每一個模式串,首先查找PREFIX表中索引值為Vl的表項值,驗證前綴是否匹配,最后再進行模式串其余部分的驗證,之后進入第二階段;case I :直接進入第二階段;case 2,3,4 :直接進入第三階段;default :若文本結束,則整個搜索過程結束;若文本沒有結束,進入下一個機器字長的讀取,重新進入第一階段;};第二階段由計算中間字符塊哈希值的公式hash(" be" ) = (var〈〈8) 16得到中間字符塊的哈希值V2,查SHIFT表switch (SHIFT [V2]){case 0 :查找HASH表中索引值為中間字符塊的哈希值V2的表項值,即為符合的模式串鏈表,對鏈表中每一個模式串,首先查找PREFIX表中索引值為V2的表項值,驗證前綴是否匹配,最后再進行模式串其余部分的驗證,之后進入第三階段;case 1,2 :直接進入第三階段;default :若文本結束,則整個搜索過程結束;若文本沒有結束,進入下一個機器字長的讀取,重新進入第一階段;};第三階段由計算后面字符塊哈希值的公式hash(" Cd" ) = var>>16得到后面字符塊的哈希值V3,查SHIFT表switch (SHIFT [V3]){case 0 :查找HASH表中索引值為后面字符塊的哈希值V3的表項值,即為符合的模式串鏈表,對鏈表中每一個模式串,首先查找PREFIX表中索引值為V3的表項值,驗證前綴是否匹配,最后再進行模式串其余部分的驗證,之后進入第四階段;case I :直接進入第一階段;default :若文本結束,則整個搜索過程結束;若文本沒有結束,進入下一個機器字長的讀取,重新進入第一階段;};第四階段取下一個字長中與該字長中相鄰的字符,由計算哈希值的公式計算得到相鄰字長字符塊的哈希值V4,查SHIFT表switch(SHIFT[V4]){case 0 :查找HASH表中索引值為字長字符塊的哈希值V4的表項值,即為符合的模式串鏈表,對鏈表中每一個模式串,首先查找PREFIX表中索引值為V4的表項值,驗證前綴是否匹配,最后再進行模式串其余部分的驗證,之后進入第四階段;default :若文本結束,則整個搜索過程結束;若文本沒有結束,進入下一個機器字長的讀取,重新進入第一階段;}。概括起來說,本發(fā)明方法就是在上述搜索過程中首先計算當前字符塊的哈希值, 若當前字符塊的跳轉值為零,則將當前整型指針轉為字符指針,查找HASH表和PREFIX表, 驗證可能的匹配情況,若不為零,則直接移動到下一個匹配入口 ;整個過程中搜索指針的移動距離是一個字長的整數(shù)倍,當搜索指針到達文本末尾,整個過程結束。與現(xiàn)有Wu-Manber技術相比,本發(fā)明主要做了以下改進A.最短模式串長度過小時,平均跳躍距離增大。本發(fā)明方法中的最大跳躍距離為m-B+1 ;而在現(xiàn)有的Wu-Manber方法中當規(guī)則集中最短模式串長度過小時,最大跳躍距離受限;本發(fā)明方法中通過按字長匹配,每次讀入和處理的單位變?yōu)橐粋€機器字,在最短模式串長度過小時,仍相當于跳躍距離為4,這樣就平滑了最短模式串長度過小時跳躍距離過小的劣勢。B.哈希值的計算加速。本發(fā)明中每次讀入一個整型值,其包含的三個字符塊的哈希值正好可以通過對該整型值的移位獲得。僅僅通過移位即可獲得所需的哈希值,而不需要進行逐個取值和做或運算,這樣就加快了哈希值的計算速度,特別是當最短模式串長度過小而需要頻繁對文本計算哈希值時,采用本發(fā)明方法就可獲得很大的效率提升。C.訪存次數(shù)減少。本發(fā)明中每次讀取一個機器字,設文本長度為n,則最多的訪存次數(shù)為n/4 ;而現(xiàn)有的Wu-Manber方法的平均訪存次數(shù)為n/(m-1),當最短模式串長度過小時,現(xiàn)有的 Wu-Manber方法的訪存次數(shù)很多,而采用本發(fā)明方法后訪存次數(shù)可以有效減少。
具體實施例方式實施例I :
本發(fā)明提出的這種按字長匹配的多模式串匹配方法,分為預編譯過程和搜索過程,其中的預編譯過程和傳統(tǒng)的Wu-Manber方法相同,即建立三個表=SHIFT表,HASH表和 PREFIX表;在搜索過程中,每次匹配的單位為一個字長,即一個整型,通過對該整型進行移位操作,可以快速得到整型中包含的三個字符塊的哈希值,再根據(jù)預編譯過程得到的三個表,進行匹配驗證。本實施例中的實現(xiàn)平臺為Iinux操作系統(tǒng),字長為32位,中央處理器為雙核酷睿 2代,內存為2千兆字節(jié),采用的是隨機生成的9. 54兆字節(jié)的匹配文本,字符集大小為256, 模式串集合是從匹配文本中隨機抽取的子串,模式串集合大小為100,集合中模式串長度差異不超過10,最短模式串的長度m從2到10之間變化。本實施例按字長匹配的多模式串匹配方法的具體操作如下在預編譯過程中構造3個表一個跳轉表即SHIFT表,一個哈希表即HASH表,一個前綴表即PREFIX表;設B為字符塊的長度,m為最短模式串的長度,X當前需要計算哈希值的字符塊;字符塊哈希值的計算公式為hash(X) = (X
*256)+X[l];首先是建立SHIFT表先建立一個空表,表項值都初始化為最大跳轉距離
m-B+1,在模式集中取每個模式串前m個字符,從后往前每次取相鄰B個字符組成字符
塊,按字符塊哈希值的計算公式計算該字符塊的哈希值,按字符塊跳轉值的計算公式
如果X不在任何模式中出現(xiàn)
權利要求
1.一種按字長匹配的多模式串匹配方法,包括預編譯過程和搜索過程,在字長為32位的計算機上進行如下操作所述預編譯過程為構造3個表一個跳轉表即SHIFT表,一個哈希表即HASH表,一個前綴表即PREFIX表;設B為字符塊的長度,m為最短模式串的長度,X為當前需要計算哈希值的字符塊;字符塊哈希值的計算公式為hash(X) = (X
*256B-1) + (X[1]*256B-2)+.+(X[B-1]*2560);首先建立SHIFT表先建立一個空表,表項值都初始化為最大跳轉距離m-B+1,在模式集中取每個模式串前m個字符,從后往前每次取相鄰B個字符組成字符塊,按上面給出的字符塊哈希值的計算公式計算該字符塊的哈希值,按字符塊跳轉值的計算公式
全文摘要
本發(fā)明公開了一種按字長匹配的多模式匹配方法,包括預編譯過程和搜索過程,預編譯過程構造3個表跳轉表即SHIFT表、哈希表即HASH表和前綴表即PREFIX表;特征是在搜索過程中按字長讀取文本,每次從文本中裝載一個整型值,每次讀入和處理的單位變?yōu)橐粋€機器字,這樣就平滑了在最短模式串長度過小時跳躍距離過小的劣勢,同時整型值中包含的三個字符塊的哈希值可以通過對該整型值的移位獲得,不需要進行逐個取值和做或運算,從而加快了哈希值的計算速度;每次讀取一個機器字也使訪存次數(shù)有效減少,提高了訪存效率。采用本發(fā)明方法可使多模式串的匹配達到比較高的效率。
文檔編號G06F17/30GK102609450SQ201210006598
公開日2012年7月25日 申請日期2012年1月10日 優(yōu)先權日2012年1月10日
發(fā)明者任開新, 汪永進, 郭利財, 顧乃杰 申請人:顧乃杰