本發(fā)明涉及信息檢索、模式識(shí)別和計(jì)算機(jī)體系結(jié)構(gòu)領(lǐng)域,特別涉及一種串匹配算法的加速方法及裝置。
背景技術(shù):
串匹配算法廣泛應(yīng)用在生物信息學(xué)、入侵檢測(cè)、信息過(guò)濾、數(shù)據(jù)庫(kù)、中文分詞等眾多領(lǐng)域,高性能串匹配算法研究具有重要的理論意義和應(yīng)用價(jià)值。
在多模式串匹配算法中基于狀態(tài)機(jī)的模式匹配算法最具代表性,應(yīng)用也最為廣泛,基于狀態(tài)機(jī)的模式匹配算法具備性能穩(wěn)定的特點(diǎn),該類算法以Aho-Corasick算法為代表,Aho-Corasick算法由貝爾實(shí)驗(yàn)室的Aho和Corasick于1975年提出,它采用有限狀態(tài)自動(dòng)機(jī)結(jié)構(gòu)一次接收所有模式串,通過(guò)構(gòu)造狀態(tài)機(jī)來(lái)掃描匹配文本,在狀態(tài)機(jī)結(jié)構(gòu)中,無(wú)論某個(gè)前綴同時(shí)屬于幾個(gè)模式,它都有唯一的狀態(tài)來(lái)表示,Aho-Corasick算法的時(shí)間復(fù)雜度為O(n),其中,n為輸入串的長(zhǎng)度。
IBM蘇黎世研究院的Lunteren在2006年提出了帶優(yōu)先級(jí)的狀態(tài)機(jī)類算法,它通過(guò)對(duì)轉(zhuǎn)換規(guī)則進(jìn)行優(yōu)先級(jí)劃分,從而進(jìn)一步壓縮了Aho-Corasick算法所需存儲(chǔ)空間,盡管該算法具有很好的存儲(chǔ)效率,并可以針對(duì)正則表達(dá)式進(jìn)行匹配,但并沒(méi)有進(jìn)一步找到AC算法存儲(chǔ)空間很大的本質(zhì)原因。
Smith等人在2008年提出了將每個(gè)狀態(tài)結(jié)合一個(gè)擴(kuò)展變量的擴(kuò)展?fàn)顟B(tài)機(jī)XFA,該方法可以通過(guò)定義變量進(jìn)一步減少多模式產(chǎn)生的狀態(tài)機(jī)規(guī)模,給出了一種靈活壓縮狀態(tài)機(jī)的辦法,然而,該方法由于復(fù)雜的狀態(tài)操作,更適用于軟件實(shí)現(xiàn),硬件實(shí)現(xiàn)復(fù)雜性較高.盡管Smith也給出了相關(guān)的硬件設(shè)計(jì),但由于關(guān)鍵路徑相關(guān)性很高,無(wú)法進(jìn)行有效的流水線設(shè)計(jì),延長(zhǎng)了最短路徑時(shí)間,從而降低了頻率影響整體性能。
Yang等人提出了針對(duì)多正則表達(dá)式匹配的時(shí)空可切換半確定狀態(tài)機(jī)SFA,該狀態(tài)機(jī)是DFA(確定有窮自動(dòng)機(jī))和NFA(不確定有窮自動(dòng)機(jī))之間的一種結(jié)構(gòu),由確定數(shù)量并行DFA組成,但由該方法構(gòu)造的狀態(tài)機(jī)十分復(fù)雜,不適合大規(guī)模模式使用。
此外,GPU作為高速處理引擎,近年來(lái)也被引入多模式匹配領(lǐng)域,由于GPU具有高度并行性,且編程容易,已有方法都取得了較好效果,由于網(wǎng)絡(luò)處理具有較為固定的處理模式,不需要經(jīng)常改變,定制電路設(shè)計(jì)相比GPU,在芯片使用效率和成本上更有優(yōu)勢(shì)。
隨著對(duì)模式匹配性能需求的增加,基于狀態(tài)機(jī)類的模式匹配算法成為高性能模式匹配體系結(jié)構(gòu)設(shè)計(jì)的基礎(chǔ),但是,這類算法生成的DFA規(guī)模較大,尤其是對(duì)于大規(guī)模模式集(10萬(wàn)以上規(guī)模的模式集),所生成狀態(tài)機(jī)規(guī)模對(duì)存儲(chǔ)空間需求很大,既不利于軟件算法快速實(shí)現(xiàn),也無(wú)法適合硬件實(shí)現(xiàn),為此,國(guó)際上相關(guān)研究主要圍繞如何降低狀態(tài)機(jī)類算法所需的規(guī)模和存儲(chǔ)空間展開(kāi),應(yīng)該說(shuō),簡(jiǎn)潔且有效的算法是解決該領(lǐng)域問(wèn)題的首選,過(guò)分追求存儲(chǔ)空間最優(yōu)但造成結(jié)構(gòu)復(fù)雜的方法生命力有限。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)的不足,本發(fā)明提出一種串匹配算法的加速方法及裝置。
本發(fā)明提出一種串匹配算法的加速方法,包括
構(gòu)造基本轉(zhuǎn)換規(guī)則與交叉轉(zhuǎn)換規(guī)則,根據(jù)緩存策略函數(shù)確定狀態(tài)緩存寄存器中的狀態(tài)Sc1與Sc2,判斷當(dāng)前狀態(tài)Si在基本轉(zhuǎn)換規(guī)則和n步交叉轉(zhuǎn)換規(guī)則中是否存在接收當(dāng)前字符c的轉(zhuǎn)換規(guī)則,如果存在對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,則應(yīng)用對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,并跳到下一個(gè)狀態(tài)Sk,應(yīng)用基本轉(zhuǎn)換規(guī)則或n步交叉轉(zhuǎn)換規(guī)則,同時(shí)按緩存策略函數(shù)更新緩存寄存器中的狀態(tài)Sc1與Sc2;否則,將被緩存的狀態(tài)Sc2取出,并以狀態(tài)Sc2為當(dāng)前狀態(tài),在基本轉(zhuǎn)換規(guī)則與n步交叉轉(zhuǎn)換規(guī)則中尋找接收當(dāng)前字符c的轉(zhuǎn)換規(guī)則;如果尋找到對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,則跳轉(zhuǎn)到對(duì)應(yīng)的下一個(gè)狀態(tài)Sj,并應(yīng)用2步交叉轉(zhuǎn)換規(guī)則;否則,將被緩存的狀態(tài)Sc1取出,并以狀態(tài)Sc1為當(dāng)前狀態(tài)在基本轉(zhuǎn)換規(guī)則與n步交叉轉(zhuǎn)換規(guī)則中尋找接收當(dāng)前字符c的轉(zhuǎn)換規(guī)則;如果尋找到對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,則跳轉(zhuǎn)到對(duì)應(yīng)的下一個(gè)狀態(tài)Sj,并應(yīng)用1步交叉轉(zhuǎn)換規(guī)則;否則,判斷初始狀態(tài)S0是否接收字符c;如果接收字符c,則跳到相應(yīng)狀態(tài),應(yīng)用重啟轉(zhuǎn)換規(guī)則;否則,跳轉(zhuǎn)到初始狀態(tài)S0,用于失敗轉(zhuǎn)換規(guī)則。
通過(guò)狀態(tài)轉(zhuǎn)換函數(shù)R構(gòu)造所述交叉轉(zhuǎn)換規(guī)則,所述狀態(tài)轉(zhuǎn)換函數(shù)R的定義為:
其中,Si為當(dāng)前狀態(tài),Sj為被緩存的狀態(tài)、Rbasic為基本轉(zhuǎn)換規(guī)則、Rn-cross為交叉轉(zhuǎn)換規(guī)則、字符c、狀態(tài)Sj、狀態(tài)Si、狀態(tài)Sk、狀態(tài)Sc1、狀態(tài)Sc2、初始狀態(tài)S0、priority為優(yōu)先級(jí)標(biāo)識(shí),4為最高優(yōu)先級(jí),0為最低優(yōu)先級(jí),如果高優(yōu)先級(jí)的結(jié)果有效,則與最高優(yōu)先級(jí)的結(jié)果被優(yōu)先采納。
所述重啟轉(zhuǎn)換規(guī)則為從其他狀態(tài)轉(zhuǎn)換到初始狀態(tài)的后一個(gè)狀態(tài)的轉(zhuǎn)換規(guī)則。
所述失敗轉(zhuǎn)換規(guī)則為從其他狀態(tài)轉(zhuǎn)換到初始狀態(tài)的轉(zhuǎn)換規(guī)則。
本發(fā)明還提出一種串匹配算法的加速裝置,包括
構(gòu)造基本轉(zhuǎn)換規(guī)則模塊,用于構(gòu)造基本轉(zhuǎn)換規(guī)則;
構(gòu)造交叉轉(zhuǎn)換規(guī)則模塊,用于構(gòu)造交叉轉(zhuǎn)換規(guī)則;
匹配模塊,用于根據(jù)緩存策略函數(shù)確定狀態(tài)緩存寄存器中的狀態(tài)Sc1與Sc2,判斷當(dāng)前狀態(tài)Si在基本轉(zhuǎn)換規(guī)則和n步交叉轉(zhuǎn)換規(guī)則中是否存在接收當(dāng)前字符c的轉(zhuǎn)換規(guī)則,如果存在對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,則應(yīng)用對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,并跳到下一個(gè)狀態(tài)Sk,應(yīng)用基本轉(zhuǎn)換規(guī)則或n步交叉轉(zhuǎn)換規(guī)則,同時(shí)按緩存策略函數(shù)更新緩存寄存器中的狀態(tài)Sc1與Sc2;否則,將被緩存的狀態(tài)Sc2取出,并以狀態(tài)Sc2為當(dāng)前狀態(tài),在基本轉(zhuǎn)換規(guī)則與n步交叉轉(zhuǎn)換規(guī)則中尋找接收當(dāng)前字符c的轉(zhuǎn)換規(guī)則;如果尋找到對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,則跳轉(zhuǎn)到對(duì)應(yīng)的下一個(gè)狀態(tài)Sj,并應(yīng)用2步交叉轉(zhuǎn)換規(guī)則;否則,將被緩存的狀態(tài)Sc1取出,并以狀態(tài)Sc1為當(dāng)前狀態(tài)在基本轉(zhuǎn)換規(guī)則與n步交叉轉(zhuǎn)換規(guī)則中尋找接收當(dāng)前字符c的轉(zhuǎn)換規(guī)則;如果尋找到對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,則跳轉(zhuǎn)到對(duì)應(yīng)的下一個(gè)狀態(tài)Sj,并應(yīng)用1步交叉轉(zhuǎn)換規(guī)則;否則,判斷初始狀態(tài)S0是否接收字符c;如果接收字符c,則跳到相應(yīng)狀態(tài),應(yīng)用重啟轉(zhuǎn)換規(guī)則;否則,跳轉(zhuǎn)到初始狀態(tài)S0,用于失敗轉(zhuǎn)換規(guī)則。
通過(guò)狀態(tài)轉(zhuǎn)換函數(shù)R構(gòu)造所述交叉轉(zhuǎn)換規(guī)則,所述狀態(tài)轉(zhuǎn)換函數(shù)R的定義為:
其中,Si為當(dāng)前狀態(tài),Sj為被緩存的狀態(tài)、Rbasic為基本轉(zhuǎn)換規(guī)則、Rn-cross為交叉轉(zhuǎn)換規(guī)則、字符c、狀態(tài)Sj、狀態(tài)Si、狀態(tài)Sk、狀態(tài)Sc1、狀態(tài)Sc2、初始狀態(tài)S0、priority為優(yōu)先級(jí)標(biāo)識(shí),4為最高優(yōu)先級(jí),0為最低優(yōu)先級(jí),如果高優(yōu)先級(jí)的結(jié)果有效,則與最高優(yōu)先級(jí)的結(jié)果被優(yōu)先采納。
所述重啟轉(zhuǎn)換規(guī)則為從其他狀態(tài)轉(zhuǎn)換到初始狀態(tài)的后一個(gè)狀態(tài)的轉(zhuǎn)換規(guī)則。
所述失敗轉(zhuǎn)換規(guī)則為從其他狀態(tài)轉(zhuǎn)換到初始狀態(tài)的轉(zhuǎn)換規(guī)則。
還包括緩存寄存器模塊,用于緩存各狀態(tài)。
還包括選通電路。
由以上方案可知,本發(fā)明的優(yōu)點(diǎn)在于:
本發(fā)明通過(guò)增加狀態(tài)緩存組件和選通電路,如寄存器組和多路選通器,在串匹配過(guò)程中動(dòng)態(tài)生成轉(zhuǎn)換規(guī)則,實(shí)現(xiàn)了串匹配算法的加速,同時(shí)能夠消除傳統(tǒng)串匹配算法中需存儲(chǔ)的大量轉(zhuǎn)換規(guī)則,降低生成狀態(tài)機(jī)的規(guī)模,提高串匹配算法的執(zhí)行速度。
附圖說(shuō)明
圖1為本發(fā)明的總體結(jié)構(gòu)圖;
圖2為交叉轉(zhuǎn)換規(guī)則動(dòng)態(tài)生成裝置圖;
圖3為總體流程框圖;
圖4為有窮狀態(tài)機(jī)DFA圖。
具體實(shí)施方式
本發(fā)明的總體結(jié)構(gòu)圖如圖1所示,包含如下步驟:
步驟1)轉(zhuǎn)換規(guī)則預(yù)處理
步驟11)構(gòu)造基本轉(zhuǎn)換規(guī)則
基本轉(zhuǎn)換規(guī)則是指從確定有窮狀態(tài)自動(dòng)機(jī)DFA初始狀態(tài)開(kāi)始直接接收模式所包含字符串的轉(zhuǎn)換規(guī)則,以Rbasic表示。
步驟12)構(gòu)造交叉轉(zhuǎn)換規(guī)則
交叉轉(zhuǎn)換規(guī)則表示狀態(tài)機(jī)中某個(gè)狀態(tài)代表的模式后綴與其他模式或該模式的前綴相同,其實(shí)質(zhì)是某一段子模式與其他模式或者該模式的前綴相同。在此處只需構(gòu)造3步及3步以上的交叉轉(zhuǎn)換規(guī)則,以Rn-cross表示,其中n為步長(zhǎng)值,而大量的1步和2步交叉轉(zhuǎn)換規(guī)則在后續(xù)步驟中動(dòng)態(tài)生成。
步驟13)構(gòu)造重啟轉(zhuǎn)換規(guī)則和失敗轉(zhuǎn)換規(guī)則
重啟轉(zhuǎn)換規(guī)則為DFA中從其他狀態(tài)轉(zhuǎn)換到初始狀態(tài)的后一個(gè)狀態(tài)的轉(zhuǎn)換規(guī)則,這類轉(zhuǎn)換規(guī)則在模式匹配問(wèn)題中表示輸入字符無(wú)法正確匹配當(dāng)前的模式路徑,但可以從初始狀態(tài)重新開(kāi)始一次模式匹配過(guò)程,并已經(jīng)接收了第1個(gè)字符;失敗轉(zhuǎn)換規(guī)則為DFA中從其他狀態(tài)轉(zhuǎn)換到初始狀態(tài)的轉(zhuǎn)換規(guī)則,這類轉(zhuǎn)換規(guī)則代表輸入字符無(wú)法正確地匹配任何模式及其子模式,因此狀態(tài)機(jī)回到初始位置。根據(jù)已有的帶優(yōu)先級(jí)的狀態(tài)機(jī)類算法,可將重啟轉(zhuǎn)換規(guī)則和失敗轉(zhuǎn)換規(guī)則合并,并控制在256條規(guī)則以內(nèi)。
步驟2)構(gòu)造1步和2步交叉轉(zhuǎn)換規(guī)則生成裝置
步驟21)狀態(tài)轉(zhuǎn)換函數(shù)
狀態(tài)轉(zhuǎn)換函數(shù)R的定義為:
其中,Si為當(dāng)前狀態(tài),Sj為被緩存的狀態(tài),空集表示不存在對(duì)應(yīng)的轉(zhuǎn)換規(guī)則;priority為優(yōu)先級(jí)標(biāo)識(shí),4為最高優(yōu)先級(jí),0為最低優(yōu)先級(jí),如果高優(yōu)先級(jí)的結(jié)果有效(非空),則該結(jié)果被優(yōu)先采納;如果優(yōu)先級(jí)高的結(jié)果無(wú)效,則低優(yōu)先級(jí)結(jié)果被采納,結(jié)果無(wú)效是指某一狀態(tài)Si在Rbasic和Rn-cross轉(zhuǎn)換函數(shù)中沒(méi)有接收字符c的轉(zhuǎn)換規(guī)則。
步驟22)交叉轉(zhuǎn)換規(guī)則動(dòng)態(tài)生成裝置
交叉轉(zhuǎn)換規(guī)則動(dòng)態(tài)生成裝置如圖2所示。
生成裝置在原有狀態(tài)機(jī)功能中增加對(duì)歷史信息的記錄,并由當(dāng)前狀態(tài)、當(dāng)前輸入符號(hào)和狀態(tài)機(jī)的歷史信息一起決定下一個(gè)狀態(tài),從外部接口來(lái)看,生成裝置與傳統(tǒng)狀態(tài)機(jī)一樣,僅接收輸入符號(hào),輸出狀態(tài)機(jī)的判斷結(jié)果。所不同之處在于內(nèi)部增加了緩存寄存器,能夠?qū)顟B(tài)按照緩存策略函數(shù)T進(jìn)行狀態(tài)緩存。
步驟3)多模式串匹配
步驟31)根據(jù)緩存策略函數(shù)確定狀態(tài)緩存寄存器1和2緩存的狀態(tài)Sc1和Sc2,others是指不滿足if后面的表達(dá)式的所有情況,即if(Rbasic(Sc1,c)≠Sj&&Rn-cross(Sc1,c)≠Sj):
步驟32)根據(jù)步驟1)的轉(zhuǎn)換規(guī)則集和步驟2)中的狀態(tài)轉(zhuǎn)換函數(shù)進(jìn)行串匹配:
判斷當(dāng)前狀態(tài)Si在基本轉(zhuǎn)換規(guī)則和n步交叉轉(zhuǎn)換規(guī)則中是否存在接收當(dāng)前字符c的轉(zhuǎn)換規(guī)則:
步驟321)如果存在對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,則應(yīng)用該規(guī)則,跳到下一個(gè)狀態(tài)Sk,實(shí)施基本轉(zhuǎn)換規(guī)則或n步交叉轉(zhuǎn)換規(guī)則,同時(shí)按緩存策略函數(shù)更新緩存寄存器1和緩存寄存器2中的轉(zhuǎn)換規(guī)則Sc1和Sc2;
步驟322)如果不存在對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,則將被緩存的狀態(tài)Sc2取出,并以Sc2狀態(tài)為當(dāng)前狀態(tài)在基本轉(zhuǎn)換規(guī)則和n步交叉轉(zhuǎn)換規(guī)則中尋找接收當(dāng)前字符c的轉(zhuǎn)換規(guī)則:
步驟3221)如果存在對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,則跳轉(zhuǎn)到對(duì)應(yīng)的下一個(gè)狀態(tài)Sj,實(shí)施2步交叉轉(zhuǎn)換規(guī)則;
步驟3222)如果不存在對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,則將被緩存的狀態(tài)Sc1取出,并以Sc1狀態(tài)為當(dāng)前狀態(tài)在基本轉(zhuǎn)換規(guī)則和n步交叉轉(zhuǎn)換規(guī)則中尋找接收當(dāng)前字符c的轉(zhuǎn)換規(guī)則:
步驟32221)如果存在對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,則跳轉(zhuǎn)到對(duì)應(yīng)的下一個(gè)狀態(tài)Sj,實(shí)施1步交叉轉(zhuǎn)換規(guī)則;
步驟32222)如果不存在對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,則判斷初始狀態(tài)S0是否接收字符c:
步驟322221)如果接收字符c,則跳到相應(yīng)狀態(tài),實(shí)施重啟轉(zhuǎn)換規(guī)則;
步驟322222)如果不接收字符c,跳轉(zhuǎn)到初始狀態(tài)S0,實(shí)施失敗轉(zhuǎn)換規(guī)則。
本發(fā)明還提出一種串匹配算法的加速裝置,包括
構(gòu)造基本轉(zhuǎn)換規(guī)則模塊,用于構(gòu)造基本轉(zhuǎn)換規(guī)則;
構(gòu)造交叉轉(zhuǎn)換規(guī)則模塊,用于構(gòu)造交叉轉(zhuǎn)換規(guī)則;
匹配模塊,用于根據(jù)緩存策略函數(shù)確定狀態(tài)緩存寄存器中的狀態(tài)Sc1與Sc2,判斷當(dāng)前狀態(tài)Si在基本轉(zhuǎn)換規(guī)則和n步交叉轉(zhuǎn)換規(guī)則中是否存在接收當(dāng)前字符c的轉(zhuǎn)換規(guī)則,如果存在對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,則應(yīng)用對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,并跳到下一個(gè)狀態(tài)Sk,應(yīng)用基本轉(zhuǎn)換規(guī)則或n步交叉轉(zhuǎn)換規(guī)則,同時(shí)按緩存策略函數(shù)更新緩存寄存器中的狀態(tài)Sc1與Sc2;否則,將被緩存的狀態(tài)Sc2取出,并以狀態(tài)Sc2為當(dāng)前狀態(tài),在基本轉(zhuǎn)換規(guī)則與n步交叉轉(zhuǎn)換規(guī)則中尋找接收當(dāng)前字符c的轉(zhuǎn)換規(guī)則;如果尋找到對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,則跳轉(zhuǎn)到對(duì)應(yīng)的下一個(gè)狀態(tài)Sj,并應(yīng)用2步交叉轉(zhuǎn)換規(guī)則;否則,將被緩存的狀態(tài)Sc1取出,并以狀態(tài)Sc1為當(dāng)前狀態(tài)在基本轉(zhuǎn)換規(guī)則與n步交叉轉(zhuǎn)換規(guī)則中尋找接收當(dāng)前字符c的轉(zhuǎn)換規(guī)則;如果尋找到對(duì)應(yīng)的轉(zhuǎn)換規(guī)則,則跳轉(zhuǎn)到對(duì)應(yīng)的下一個(gè)狀態(tài)Sj,并應(yīng)用1步交叉轉(zhuǎn)換規(guī)則;否則,判斷初始狀態(tài)S0是否接收字符c;如果接收字符c,則跳到相應(yīng)狀態(tài),應(yīng)用重啟轉(zhuǎn)換規(guī)則;否則,跳轉(zhuǎn)到初始狀態(tài)S0,用于失敗轉(zhuǎn)換規(guī)則。
通過(guò)狀態(tài)轉(zhuǎn)換函數(shù)R構(gòu)造所述交叉轉(zhuǎn)換規(guī)則,所述狀態(tài)轉(zhuǎn)換函數(shù)R的定義為:
其中,Si為當(dāng)前狀態(tài),Sj為被緩存的狀態(tài)、Rbasic為基本轉(zhuǎn)換規(guī)則、Rn-cross為交叉轉(zhuǎn)換規(guī)則、字符c、狀態(tài)Sj、狀態(tài)Si、狀態(tài)Sk、狀態(tài)Sc1、狀態(tài)Sc2、初始狀態(tài)S0、priority為優(yōu)先級(jí)標(biāo)識(shí),4為最高優(yōu)先級(jí),0為最低優(yōu)先級(jí),如果高優(yōu)先級(jí)的結(jié)果有效,則與最高優(yōu)先級(jí)的結(jié)果被優(yōu)先采納。
所述重啟轉(zhuǎn)換規(guī)則為從其他狀態(tài)轉(zhuǎn)換到初始狀態(tài)的后一個(gè)狀態(tài)的轉(zhuǎn)換規(guī)則。
所述失敗轉(zhuǎn)換規(guī)則為從其他狀態(tài)轉(zhuǎn)換到初始狀態(tài)的轉(zhuǎn)換規(guī)則。
還包括緩存寄存器模塊,用于緩存各狀態(tài);選通電路。
以下為本發(fā)明的具體實(shí)施例,如下所示:
本方法的總體流程框圖如圖3所示:
現(xiàn)在采用一個(gè)模式集為{BASIC,SIEAN}的實(shí)例作為本發(fā)明的一個(gè)實(shí)施例,結(jié)合本發(fā)明的算法,對(duì)輸入“BASIEAN”進(jìn)行串匹配操作。
步驟1轉(zhuǎn)換規(guī)則預(yù)處理:
首先,構(gòu)建基本轉(zhuǎn)換規(guī)則Rbasic的DFA圖,如圖4所示:
接著由此DFA圖建立基本轉(zhuǎn)換規(guī)則表1:(12)
由于沒(méi)有3個(gè)字符及以上的子串與模式集的前綴相同,故3步及3步以上的交叉轉(zhuǎn)換規(guī)則無(wú)。
重啟規(guī)則和失敗規(guī)則見(jiàn)表2:(13)
步驟2利用1步和2步交叉轉(zhuǎn)換規(guī)則生成裝置動(dòng)態(tài)生成轉(zhuǎn)換規(guī)則并完成串匹配:
第一個(gè)周期接收字符“B”,此時(shí)應(yīng)用規(guī)則R1,當(dāng)前狀態(tài)S0變?yōu)镾1,同時(shí)根據(jù)緩存策略函數(shù)可得緩存寄存器2的內(nèi)容則為空(Sc2=φ,others),緩存寄存器1的內(nèi)容為狀態(tài)S1(Sc1=Rbasic(S0,B)=S1);
第二個(gè)周期接收字符“A”,此時(shí)應(yīng)用規(guī)則R2,當(dāng)前狀態(tài)S1變?yōu)镾2,同時(shí)緩存寄存器2的內(nèi)容則為S2(Sc2=Rbasic(Sc1,A)||Rn-cross(Sc1,A)=Rbasic(S1,A)||Rn-cross(S1,A)=S2),緩存寄存器1的內(nèi)容為狀態(tài)S0(Rbasic(S0,A)=φ→Sc1=S0);
第三個(gè)周期接收字符“S”,此時(shí)應(yīng)用規(guī)則R3,當(dāng)前狀態(tài)S2變?yōu)镾3,同時(shí)緩存寄存器2的內(nèi)容則為S6(Sc2=Rbasic(Sc1,S)||Rn-cross(Sc1,S)=Rbasic(S0,S)||Rn-cross(S0,S)=S6),緩存寄存器1的內(nèi)容為狀態(tài)S6(Sc1=Rbasic(S0,S)=S6);
第四個(gè)周期接收字符“I”,此時(shí)應(yīng)用規(guī)則R4,當(dāng)前狀態(tài)S3變?yōu)镾4,同時(shí)緩存寄存器2的內(nèi)容為S7(Sc2=Rbasic(Sc1,S)||Rn-cross(Sc1,S)=Rbasic(S6,I)||Rn-cross(S6,I)=S7),緩存寄存器1的內(nèi)容為狀態(tài)S0(Rbasic(S0,I)=φ→Sc1=S0);
第五個(gè)周期接收字符“E”,基本轉(zhuǎn)換規(guī)則都為空,此時(shí)取出緩存寄存器2的內(nèi)容S7,應(yīng)用規(guī)則R8,當(dāng)前狀態(tài)S4變?yōu)镾8,同時(shí)緩存寄存器2的內(nèi)容變?yōu)榭?Sc2=Rbasic(Sc1,E)||Rn-cross(Sc1,E)=Rbasic(S0,E)||Rn-cross(S0,E)=φ),緩存寄存器1的內(nèi)容為狀態(tài)S0(Rbasic(S0,E)=φ→Sc1=S0);
第六個(gè)周期接收字符“A”,此時(shí)應(yīng)用規(guī)則R9,當(dāng)前狀態(tài)S8變?yōu)镾9,同時(shí)緩存寄存器2的內(nèi)容則為空(Sc2=Rbasic(Sc1,A)||Rn-cross(Sc1,A)=Rbasic(S0,A)||Rn-cross(S0,A)=φ),緩存寄存器1的內(nèi)容為狀態(tài)S0(Rbasic(S0,A)=φ→Sc1=S0);
第七個(gè)周期接收字符“N”,此時(shí)應(yīng)用規(guī)則R10,當(dāng)前狀態(tài)S9變?yōu)镾10,S10為終止?fàn)顟B(tài)且字符輸入完畢,故成功匹配字符串“SIEAN”,串匹配結(jié)束。