專利名稱:確定自動機狀態(tài)轉(zhuǎn)換表的空間壓縮方法
技術(shù)領(lǐng)域:
本發(fā)明涉及信息檢索領(lǐng)域,特別涉及確定自動機狀態(tài)轉(zhuǎn)換表的空間壓縮方法。
背景技術(shù):
近年來,正則表達式匹配已經(jīng)成為網(wǎng)絡(luò)安全領(lǐng)域的一個研究焦點。網(wǎng)絡(luò)通信過程 中對實時性和高效性的需求,增強了確定自動機(DFA)在識別正則表達式過程中的重要 性。然而,隨著正則表達式在實際應(yīng)用中的不斷復(fù)雜化,由正則表達式所生成的DFA的狀態(tài) 規(guī)模也不斷增大,DFA狀態(tài)規(guī)模的不斷增大使得計算機存儲空間的消耗急劇增長,這種急劇 增長已經(jīng)成為限制正則表達式應(yīng)用的一個瓶頸?;谏鲜鲈?,需要對DFA空間進行壓縮, DFA空間的壓縮方法已經(jīng)成為學(xué)者關(guān)注的焦點。現(xiàn)有技術(shù)中存在DFA空間的壓縮方法,如在參考文獻1 “Fast and memory-efficient regular expression matching for deep packet inspection. Proceedings of the 2006 ACM/IEEE symposium on Architecture for networking and communications systems 2006, San Jose, California, USA December 03-05,2006” 中 利用規(guī)則重寫和規(guī)則分類的方法來簡化正則表達式,文中提出把一組正則表達式集合分成 若干組,每組都可用中等規(guī)模的DFA來識別。然而這一重寫規(guī)則的方法僅適用于非重疊匹 配的情況。在參考文獻 2 “Algorithm to Accelerate Multiple Regular Expressions Matching for Deep Packet Inspection Conference -SIGCOMM' 06 September 11-15, 2006”中提出了用D2FA方法來壓縮DFA的存儲空間。D2FA方法利用默認轉(zhuǎn)換來消除重復(fù) 的轉(zhuǎn)換,但是識別一個字符的狀態(tài)變換時間將成比例的增長。在參考文獻3 “An improved algorithm to accelerate regular expression evaluation, Proceedings of the 3rd ACM/IEEE Symposium on Architecture for networking and communications systems, 145-154,2007”提出了一種DFA的壓縮方法,它在處理長度為N的字符串時最多做2N次狀 態(tài)變迀,這種方法可達到與D2FA相當(dāng)?shù)膲嚎s效果,但同樣具有識別時間長的缺陷。在參考文 獻 4 "Animproved DFA for fast regular expression matching,ACM SIGCOMM Computer Communication Review, Volume 38,Issue 5 (October 2008),Pages 29—40”中,提出了用 δ FA方法來消除DFA狀態(tài)轉(zhuǎn)換表中的冗余。在DFA的遍歷過程中,對相同的輸入字符臨近 狀態(tài)分享大部分的下一跳狀態(tài),因此當(dāng)前狀態(tài)的轉(zhuǎn)換可以從其父節(jié)點的狀態(tài)轉(zhuǎn)換表中動態(tài) 的檢索出來。但是每次狀態(tài)轉(zhuǎn)換都需要更新當(dāng)前狀態(tài)的狀態(tài)轉(zhuǎn)換表,非常費時。在參考文獻 5 "XFA :Faster Signature Matching with Extended Automata, Security and Privacy, 2008. SP 2008. IEEESymposium, pp. 187-201,18-22May 2008”提出了用 XFA 的方法來解決 兩類特殊的正則表達式的指數(shù)爆炸問題。該方法對DFA進行擴展,在DFA的每個狀態(tài)上附 加計數(shù)器來記錄匹配過程中正則表達式中字符重復(fù)的次數(shù)。該方法只能解決某些正則表達 式的指數(shù)爆炸問題,不具有通用性。綜上所述,現(xiàn)有技術(shù)中的方法存在兩個共同的特點(1)增加時間開銷來換取空 間的減少;(2)沒有最壞情況下的空間開銷保證。雖然上述方法在某些特殊的情況下是有效的,但是仍需要做進一步的改進。
發(fā)明內(nèi)容
本發(fā)明的目的是克服現(xiàn)有技術(shù)中的確定自動機狀態(tài)表的空間壓縮方法所具有的 時間開銷大的缺陷,從而提供一種時間開銷與空間開銷都有明顯提高的空間壓縮方法。為了實現(xiàn)上述目的,本發(fā)明提供了一種確定自動機狀態(tài)轉(zhuǎn)換表的空間壓縮方法, 包括步驟1)、將確定自動機狀態(tài)轉(zhuǎn)換表表示為一個mXn的矩陣A,其中m代表確定自 動機中的狀態(tài)的個數(shù),η代表字符集的大小;步驟2)、定義一個大小為m的列向量X和一個大小為η的行向量Y ;步驟3)、對所述的列向量X和所述的列向量Y做迭代計算,直到對于任意的 1 ^ i ^m, X[i]是多重集Di.中頻率最高的元素,并且對于任意的1 < j < n,Y[j]是多 重集Dj中頻率最高的元素;其中,所述的Di. = {A[i,j]_Y[j] |1彡j ( η},所述的Dj = {A[i,j]-X[i] |1 ^ i ^m};步驟4)、由所述的矩陣A、列向量X和行向量Y計算稀疏矩陣R,并壓縮所得到的稀 疏矩陣 R;其中,R[i,j] = A[i,j]-X[i]_Y[j]。上述技術(shù)方案中,所述的步驟3)包括步驟3-1-1)、以隨機的方式為所述的列向量X和所述的行向量Y賦初值;步驟3-1-2)、計算列向量X的值,包括首先令Di. = {A[i,j]_Y[j]|l彡j彡n},然后用a表示所述Di.中出現(xiàn)頻率最高的 元素,如果a在Di.中的出現(xiàn)次數(shù)大于X[i]在Di.中的出現(xiàn)次數(shù),則令X[i] =^否則乂[土] 的值保持不變;步驟3-1-3)、計算行向量Y的值,包括首先令Dj = {A[i,j]_X[i] |1彡i彡m},然后用a等于Dj中出現(xiàn)頻率最高的元 素,如果3在0」中的出現(xiàn)次數(shù)大于Y[j]在0」中的出現(xiàn)次數(shù),則令Y[j] =a,否則Y[j]的 值保持不變;步驟3-1-4)、判斷所述列向量X與行向量Y的值是否發(fā)生變化,如果兩者都沒有發(fā) 生變化,結(jié)束步驟3)的操作,否則重新執(zhí)行步驟3-1-2)。上述技術(shù)方案中,所述的步驟3)包括步驟3-2-1)、以隨機的方式為所述的列向量X和所述的行向量Y賦初值;步驟3-2-2)、計算行向量Y的值,包括首先令Dj = {A[i,j]_X[i] |1≤i≤m},然后用a等于Dj中出現(xiàn)頻率最高的元 素,如果3在0」中的出現(xiàn)次數(shù)大于Y[j]在0」中的出現(xiàn)次數(shù),則令Y[j] =a,否則Y[j]的 值保持不變;步驟3-2-3)、計算列向量X的值,包括首先令Di. = {A[i,j]_Y[j]|l≤j彡n},然后用a表示所述Di.中出現(xiàn)頻率最高的 元素,如果a在Di.中的出現(xiàn)次數(shù)大于X[i]在Di.中的出現(xiàn)次數(shù),則令X[i] =^否則乂[土] 的值保持不變;步驟3-2-4)、判斷所述列向量X與行向量Y的值是否發(fā)生變化,如果兩者都沒有發(fā)生變化,結(jié)束步驟3)的操作,否則重新執(zhí)行步驟3-2-2)。上述技術(shù)方案中,在所述的步驟4)中,采用矩陣壓縮方法對所述的稀疏矩陣R進 行壓縮。上述技術(shù)方案中,所述的矩陣壓縮方法為包括二分查找法、三數(shù)組法和 Tetris-哈希法在內(nèi)的經(jīng)典矩陣壓縮方法。本發(fā)明還提供了一種用所述的確定自動機狀態(tài)轉(zhuǎn)換表的空間壓縮方法所得到的 結(jié)果實現(xiàn)狀態(tài)查詢的方法,包括步驟1)、讀取當(dāng)前狀態(tài)S,當(dāng)前輸入字符c ;步驟2)、令 t = X [s]+Y [C];步驟3)、查看稀疏矩陣R中的元素R[s,c]是否為零,如果不是,用t+R[s,c]替換 t,如果是,則無需替換;所得到的結(jié)果t為所要轉(zhuǎn)換的下一個狀態(tài)。上述技術(shù)方案中,在所述的步驟3)中,采用BloomFilter方法查看稀疏矩陣R中 的元素R[s, c]。本發(fā)明的優(yōu)點在于本發(fā)明的確定自動機狀態(tài)轉(zhuǎn)換表的空間壓縮方法在減少內(nèi)存中所占用空間的同 時,大大減少了空間開銷。
圖1為由正則表達式所生成的自動狀態(tài)機的示意圖;圖2為一個正則表達式的確定自動狀態(tài)機狀態(tài)轉(zhuǎn)換表的矩陣分解過程示意圖;圖3為本發(fā)明的確定自動機狀態(tài)轉(zhuǎn)換表的空間壓縮方法的流程圖。
具體實施例方式下面結(jié)合附圖和具體實施方式
對本發(fā)明加以說明。在一個實施例中,有如下正則表達式a+|b+C|C*d+。利用該正則表達式可以構(gòu)建 確定自動機(DFA)。由正則表達式構(gòu)建確定自動機的過程為本領(lǐng)域技術(shù)人員所公知的現(xiàn)有 技術(shù),它包括首先將正則表達式解析成一棵表達樹,然后將該表達樹轉(zhuǎn)換成非確定自動機 (NFA),最后把非確定自動機轉(zhuǎn)換為確定自動機。上述過程中正則表達式的表達樹轉(zhuǎn)換為 NFA的方法有很多種,在本實施例中可采用Thompson構(gòu)造法。圖1是前述正則表達式所生 成的DFA的示意圖。在得到DFA后,可將DFA中的狀態(tài)轉(zhuǎn)換關(guān)系用矩陣表示,這一矩陣被稱 為狀態(tài)轉(zhuǎn)換表。在下面的表1中給出了圖1所示DFA所生成的狀態(tài)轉(zhuǎn)換表。
表 1以上根據(jù)正則表達式生成DFA,進而得到DFA的狀態(tài)轉(zhuǎn)換表的實現(xiàn)方法都為現(xiàn)有 技術(shù),本發(fā)明主要涉及在得到DFA的狀態(tài)轉(zhuǎn)換表后,如何壓縮這一狀態(tài)轉(zhuǎn)換表,以減少存儲 空間。DFA的狀態(tài)轉(zhuǎn)換表可以表示為一個mXn的矩陣A,其中m代表狀態(tài)的個數(shù),η代表 字符集的大小,而A[i,j]即為在當(dāng)前狀態(tài)i讀入字符j所達到的下一個狀態(tài)。出于說明的 方便,本實施例中所列舉的正則表達式的形式十分簡單,使得與其對應(yīng)的表1中的狀態(tài)轉(zhuǎn) 換表的形式也十分簡單,不會占據(jù)多大的內(nèi)存空間。但本領(lǐng)域技術(shù)人員很容易想到,一旦正 則表達式復(fù)雜化,則所對應(yīng)的DFA的狀態(tài)轉(zhuǎn)換表就會消耗大量的內(nèi)存。因此,需要對DFA的 狀態(tài)轉(zhuǎn)換表進行壓縮。本發(fā)明在實現(xiàn)對狀態(tài)轉(zhuǎn)換表的壓縮時,利用一個特殊的矩陣D來逼 近A,以使得R = A-D盡可能稀疏,從而達到用D和R來代替A,減小存儲空間的目的。也就是說,本發(fā)明所要解決的問題形式化定義為設(shè)X是一個大小為m的列向 量,Y是一個大小為η的行向量,D是一個由X和Y確定的mXn的矩陣,并滿足D[i,j]= X[i]+Y[j] (1彡i彡m,1彡j彡η)。對于給定的矩陣Amxn,求解X和Y以使得矩陣R = A-D =[A[i,j]-X[i]_Y[j]中非零元素的個數(shù)最少。下面仍然以表1中的矩陣A為例,結(jié)合圖2和圖3就如何確定列向量X、行向量Y 以及稀疏矩陣R加以說明。首先以隨機的方式為列向量X和行向量Y賦初值。假設(shè)初始時X= {1,2,4,0,4} T,Y= {4,3,3,2},則根據(jù)R = A-D= [A[i,j]_X[i]_Y[j]]的公式,此時所得到的矩陣R的 值如下面的表2所示。 表2此時,需要對X、Y的值做迭代計算。在第一次迭代計算的過程中,首先計算X的 值,令Di. = {A[i,j]-Y[j] 11彡j彡η},因此用表1中的第一行減去Y的初始值,得到D1.= {-3,-1,-3,1}。然后從D1.中讀取出現(xiàn)頻率最高的元素,用a表示這一出現(xiàn)頻率最高的元素, 顯然在D1.中,a = -3。接著判斷3在01.中的出現(xiàn)次數(shù)是否大于X[l]在D1.中的出現(xiàn)次數(shù), 如果大于,令X[l] =a。當(dāng)a = _3時,其在隊.中的出現(xiàn)次數(shù)為2,而X[l] = 1,其在D1.出 現(xiàn)的次數(shù)為1,a在D1.出現(xiàn)的次數(shù)大于X[l]在01.出現(xiàn)的次數(shù),所以更新X[l] =a = -3。 參照上述方法,可以得到D2.,然后從D2.中找出出現(xiàn)頻率最高的元素a,通過比較a與X[2] 在~中的出現(xiàn)次數(shù),可以知道是否要將X[2]的值替換為出現(xiàn)頻率最高的元素。結(jié)合前述 實例可以知道,X[2]的值發(fā)生了變化,新的X[2] =-3。類似的,可以知道,X[3] = 1,X[4] =-3,X[5] = -3。也就是說,在經(jīng)過第一次迭代計算后,X由原來的[1,2,4,0,4]τ轉(zhuǎn)變?yōu)?[-3,-3,1, _3,-3]τ。接著對Y的值做迭代計算。在計算Y的值時,令Dj = {A[i,j]_X[i] |1彡i彡m}, 因此用表1中的第一列減去X的值。需要說明的是,此處所述的X的值不是X的初始值,而 是X在經(jīng)過第一次迭代后的新的值。因此,計算得到的D.i= {4,4,0,4,4}τ。在得到D1后, 同樣可以用a表示出現(xiàn)頻率最高的元素,然后將出現(xiàn)頻率最高的元素在D1中的出現(xiàn)次數(shù)與 Y[l]進行比較,由于Y[l] =4 = a,所以無需改變Y[l]的值。同理可計算得到Υ[2] =5、 Υ[3] = 3、Y[4] = 6。也就是說,在經(jīng)過第一次迭代計算后,Y由原來的{4,3,3,2}改變?yōu)?{4,5,3,6}。在經(jīng)過第一次迭代計算后,X、Y的值都發(fā)生了變化,因此,矩陣R的值也會發(fā)生相 應(yīng)變化,在下面的表3中給出了矩陣R的新的值。 表3在完成第一次迭代計算后,需要判斷是否繼續(xù)進行迭代計算。如果X和Y的值在此 次迭代計算過程中都沒有發(fā)生改變,則無需繼續(xù)迭代計算,否則,需要繼續(xù)進行迭代計算。 在第一次迭代計算過程中,X和Y的值都發(fā)生了變化,因此需要繼續(xù)進行迭代計算。在第二次的迭代計算過程中,同樣先計算X的值。X值的計算過程與第一次迭代計 算過程相類似,只是此時Y的值為經(jīng)過第一次迭代計算后的Y值。經(jīng)過第二此迭代計算后 的X的值由{-3,-3,1,-3,-3}τ改變?yōu)閧-3,-3,-3,-3,-3}τ。然后繼續(xù)計算Y的值,Y的值 沒有發(fā)生變化,同樣為{4,5,3,6}。在得到新的X、Y值后,繼續(xù)計算矩陣R的值,在下面的表4中給出了矩陣R的新的值。
表 4由于X的值發(fā)生了變化,因此在第二此迭代計算完成后,需要繼續(xù)進行迭代計算 過程。第三次迭代計算過程與前兩次相似,迭代計算的結(jié)果為X = {-3,-3,-3,-3,-3} T,Y= {4,5,3,6} 0與第二次迭代計算相比,此次迭代計算所得到的Χ、Υ的值并沒有發(fā)生變 化,因此矩陣R的值與表4相比同樣沒有發(fā)生變化,且無需繼續(xù)進行迭代計算過程。由上述計算過程可以知道,表1中所涉及的用矩陣表示的DFA的狀態(tài)轉(zhuǎn)換表經(jīng)過 多次迭代計算轉(zhuǎn)換成了列向量Χ{_3,-3,-3,-3,-3}τ、行向量Υ{4,5,3,6}以及表4所示的 稀疏矩陣R。對于稀疏矩陣R可以采用現(xiàn)有技術(shù)中的相關(guān)方法(如現(xiàn)有技術(shù)中最常用的二 分查找法、三數(shù)組法和Tetris-哈希法)進行壓縮操作,從而達到壓縮DFA狀態(tài)轉(zhuǎn)換表的目 的。雖然在本實施例中,在各次迭代計算的過程中,都是先算X的值,再算Y的值,但在 其它實施例中,也可以先算Y的值,再算X的值。另外,雖然在上面的表2、表3、表4中分別 給出了當(dāng)Χ、Υ的值發(fā)生變化時對應(yīng)的矩陣R的值,但在實際操作中,并不需要多次計算矩陣 R的值,而且出于減少計算量的考慮,通常是在Χ、Υ的值確定后,才一次性計算矩陣R的值。通過理論推導(dǎo)很容易知道,利用本發(fā)明方法壓縮DFA狀態(tài)轉(zhuǎn)換表的空間壓縮率 為 其中,m表示狀態(tài)數(shù),η表示字符數(shù),R表示最后得到的稀疏矩陣,nonzero (R)表示 矩陣R中非零元素的個數(shù)。在表 5 中,以 L7-filter signatures、Snort signatures 等 18 組正貝U表達式集 所生成的DFA狀態(tài)轉(zhuǎn)換表為例,將本發(fā)明方法(在表中用MAT_ADD表示)與前述參考文獻 4中所提到的δ FA算法加以比較。從比較的結(jié)果可以看出,本發(fā)明方法的空間壓縮率在14 組(約占77. 8% )中優(yōu)于現(xiàn)有的δ FA算法。
表 5
通過本發(fā)明的上述方法將DFA的狀態(tài)轉(zhuǎn)換矩陣A替換為列向量X,行向量Y和一個 稀疏矩陣R,并對稀疏矩陣R進行壓縮以后,同樣可以利用所述的X、Y以及壓縮后的R快速 地實現(xiàn)DFA狀態(tài)轉(zhuǎn)換。這一狀態(tài)轉(zhuǎn)換過程包括已知當(dāng)前狀態(tài)為S,當(dāng)前輸入字符為C,令t = X[s]+Y[C],然后查看稀疏矩陣R的 當(dāng)前位置R[S,C]是否為零,如果不是,令t+R[s,c]替換t,如果是,則無需替換。所得到的 結(jié)果t就代表所要轉(zhuǎn)換的下一個狀態(tài)。在上述過程中,查看稀疏矩陣R的當(dāng)前位置R[s,c]是否為零時,可采用現(xiàn)有技術(shù) 中的BloomFilter方法。BloomFilter方法是一種效率較高的內(nèi)存索引算法,它利用位數(shù)組 很簡潔地表示一個集合,并能判斷一個元素是否屬于這個集合。該方法被廣泛應(yīng)用到各種 計算機系統(tǒng)之中表達龐大數(shù)據(jù)集及提高查找效率。本發(fā)明把BloomFilter方法用于稀疏矩 陣元素的查找,能夠有效地提高查找效率。在下面的表6中給出了本發(fā)明方法(在表中用MAT_ADD表示)與參考文獻4中的 S FA算法相比,在不同稀疏矩陣壓縮方法下查找矩陣所花費時間(單位為秒),從中可以看 出,本發(fā)明方法所花費時間遠遠少于現(xiàn)有技術(shù)中的S FA算法,與未壓縮前相比,時間開銷 的差別不大。 表6最后所應(yīng)說明的是,以上實施例僅用以說明本發(fā)明的技術(shù)方案而非限制。盡管參 照實施例對本發(fā)明進行了詳細說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解,對本發(fā)明的技術(shù)方 案進行修改或者等同替換,都不脫離本發(fā)明技術(shù)方案的精神和范圍,其均應(yīng)涵蓋在本發(fā)明 的權(quán)利要求范圍當(dāng)中。
1權(quán)利要求
一種確定自動機狀態(tài)轉(zhuǎn)換表的空間壓縮方法,包括步驟1)、將確定自動機狀態(tài)轉(zhuǎn)換表表示為一個m×n的矩陣A,其中m代表確定自動機中的狀態(tài)的個數(shù),n代表字符集的大?。徊襟E2)、定義一個大小為m的列向量X和一個大小為n的行向量Y;步驟3)、對所述的列向量X和所述的列向量Y做迭代計算,直到對于任意的1≤i≤m,X[i]是多重集Di.中頻率最高的元素,并且對于任意的1≤j≤n,Y[j]是多重集D.j中頻率最高的元素;其中,所述的Di.={A[i,j] Y[j]|1≤j≤n},所述的D.j={A[i,j] X[i]|1≤i≤m};步驟4)、由所述的矩陣A、列向量X和行向量Y計算稀疏矩陣R,并壓縮所得到的稀疏矩陣R;其中,R[i,j]=A[i,j] X[i] Y[j]。
2.根據(jù)權(quán)利要求1所述的確定自動機狀態(tài)轉(zhuǎn)換表的空間壓縮方法,其特征在于,所述 的步驟3)包括步驟3-1-1)、以隨機的方式為所述的列向量X和所述的行向量Y賦初值;步驟3-1-2)、計算列向量X的值,包括首先令Di. = {A[i,j]_Y[j]|l彡j彡n},然后用a表示所述Di.中出現(xiàn)頻率最高的元 素,如果a在Di.中的出現(xiàn)次數(shù)大于X[i]在Di.中的出現(xiàn)次數(shù),則令X[i] =a,否則X[i]的 值保持不變;步驟3-1-3)、計算行向量Y的值,包括首先令Dj = {A[i,j]-X[i] |1彡i彡m},然后用a等于Dj中出現(xiàn)頻率最高的元素,如 果3在0」中的出現(xiàn)次數(shù)大于Y[j]在0」中的出現(xiàn)次數(shù),則令Y[j] =^否則¥[」]的值保 持不變;步驟3-1-4)、判斷所述列向量X與行向量Y的值是否發(fā)生變化,如果兩者都沒有發(fā)生變 化,結(jié)束步驟3)的操作,否則重新執(zhí)行步驟3-1-2)。
3.根據(jù)權(quán)利要求1所述的確定自動機狀態(tài)轉(zhuǎn)換表的空間壓縮方法,其特征在于,所述 的步驟3)包括步驟3-2-1)、以隨機的方式為所述的列向量X和所述的行向量Y賦初值;步驟3-2-2)、計算行向量Y的值,包括首先令Dj = {A[i,j]-X[i] |1彡i彡m},然后用a等于Dj中出現(xiàn)頻率最高的元素,如 果3在0」中的出現(xiàn)次數(shù)大于Y[j]在0」中的出現(xiàn)次數(shù),則令Y[j] =^否則¥[」]的值保 持不變;步驟3-2-3)、計算列向量X的值,包括首先令Di. = {A[i,j]_Y[j]|l彡j彡n},然后用a表示所述Di.中出現(xiàn)頻率最高的元 素,如果a在Di.中的出現(xiàn)次數(shù)大于X[i]在Di.中的出現(xiàn)次數(shù),則令X[i] =a,否則X[i]的 值保持不變;步驟3-2-4)、判斷所述列向量X與行向量Y的值是否發(fā)生變化,如果兩者都沒有發(fā)生變 化,結(jié)束步驟3)的操作,否則重新執(zhí)行步驟3-2-2)。
4.根據(jù)權(quán)利要求1所述的確定自動機狀態(tài)轉(zhuǎn)換表的空間壓縮方法,其特征在于,在所 述的步驟4)中,采用矩陣壓縮方法對所述的稀疏矩陣R進行壓縮。
5.根據(jù)權(quán)利要求4所述的確定自動機狀態(tài)轉(zhuǎn)換表的空間壓縮方法,其特征在于,所述的矩陣壓縮方法為包括二分查找法、三數(shù)組法和Tetris-哈希法在內(nèi)的經(jīng)典矩陣壓縮方 法。
6.一種用權(quán)利要求1-5之一的確定自動機狀態(tài)轉(zhuǎn)換表的空間壓縮方法所得到的結(jié)果 實現(xiàn)狀態(tài)查詢的方法,包括步驟1)、讀取當(dāng)前狀態(tài)s,當(dāng)前輸入字符c ; 步驟 2)、令 t = X [s]+Y [c];步驟3)、查看稀疏矩陣R中的元素R[s,c]是否為零,如果不是,用t+R[s,c]替換t,如 果是,則無需替換;所得到的結(jié)果t為所要轉(zhuǎn)換的下一個狀態(tài)。
7.根據(jù)權(quán)利要求6所述的狀態(tài)查詢方法,其特征在于,在所述的步驟3)中,采用 BloomFilter方法查看稀疏矩陣R中的元素R[s,c]。
全文摘要
本發(fā)明提供一種確定自動機狀態(tài)轉(zhuǎn)換表的空間壓縮方法,包括將確定自動機狀態(tài)轉(zhuǎn)換表表示為一個m×n的矩陣A,其中m代表確定自動機中的狀態(tài)的個數(shù),n代表字符集的大??;定義一個大小為m的列向量X和一個大小為n的行向量Y;對所述的列向量X和所述的列向量Y做迭代計算,直到對于任意的1≤i≤m,X[i]是多重集Di.中頻率最高的元素,并且對于任意的1≤j≤n,Y[j]是多重集D.j中頻率最高的元素;其中,所述的Di.={A[i,j]-Y[j]|1≤j≤n},所述的D.j={A[i,j]-X[i]|1≤i≤m};由所述的矩陣A、列向量X和行向量Y計算稀疏矩陣R,并壓縮所得到的稀疏矩陣R;其中,R[i,j]=A[i,j]-X[i]-Y[j]。本發(fā)明的確定自動機狀態(tài)轉(zhuǎn)換表的空間壓縮方法在減少內(nèi)存中所占用空間的同時,大大減少了空間開銷。
文檔編號G06F17/30GK101916259SQ201010226250
公開日2010年12月15日 申請日期2010年7月6日 優(yōu)先權(quán)日2010年7月6日
發(fā)明者何慧敏, 劉燕兵, 劉萍, 譚建龍, 郭莉 申請人:中國科學(xué)院計算技術(shù)研究所