專利名稱:多模式搜尋的方法與系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明是有關(guān)于一種字串搜尋,且特別是有關(guān)于一種使用跳表的多才莫式(multi-pattern) 4叟尋方法與系統(tǒng)。
技術(shù)背景目前的個(gè)人i十算才幾(personal computer, PC)的發(fā)展是趨 于對(duì)于不同功能,分別設(shè)置不同的對(duì)應(yīng)處理器來加快個(gè)人計(jì)算 機(jī)的運(yùn)算表現(xiàn),例如, 一般的程序運(yùn)作是由中央處理器(central processing unit, CPU)負(fù)責(zé),而游戲與繪圖的3D ( 3 dimension ) 運(yùn)算則是由圖形處理器(graphic processing unit, GPU)所處 理,如此可以減輕3D運(yùn)算對(duì)中央處理器的負(fù)擔(dān)。在一般狀態(tài)下(例如,文書作業(yè),聽音樂等),圖形處理器 是被閑置的。所以在一般狀態(tài)時(shí),如果能將中央處理器的部分 運(yùn)算轉(zhuǎn)到圖形處理器中代為運(yùn)算,則可以達(dá)到更有效率的表現(xiàn)。 例如,于聽音樂中想要同時(shí)進(jìn)行計(jì)算機(jī)病毒的掃描,而病毒掃 描對(duì)于中央處理器而言是冗長又會(huì)降低執(zhí)行效能,如果通過其 他的處理器進(jìn)行病毒掃描,則中央處理器就可以另外處理其他 程序,而系統(tǒng)效能的表現(xiàn)就會(huì)更好。一般而言,計(jì)算機(jī)病毒的掃描是經(jīng)由病毒碼——比對(duì)計(jì)算 機(jī)中所有的文件。其中最常用的技術(shù)就是Aho-Corasick演算法 (以下簡稱AC演算法),AC演算法是一種模式搜尋(pattern search)演算法,其具有快速的比對(duì)速度及不需使用到繁復(fù)的 計(jì)算。AC演算法首先需要多個(gè)模式字串來建立AC演算法的關(guān) 鍵字樹(keyword tree ),在此列舉一 組才莫式字串作為說明{he, she, his, hers} ( 1-1 )
圖1A繪示AC演算法的關(guān)鍵字樹的建制流程圖。圖1B繪示AC演算法的關(guān)鍵字樹示意圖。請(qǐng)同時(shí)參考圖1A與圖1B。圖1B 中的關(guān)4定字樹100中包括多個(gè)節(jié)點(diǎn)(node )以及多個(gè)邊緣(edge ), 每 一 邊緣以 一 標(biāo)示字來標(biāo)示,每 一 節(jié)點(diǎn)以 一 識(shí)別編號(hào)來代表, 例如根節(jié)點(diǎn)110的節(jié)點(diǎn)編號(hào)為"0",根節(jié)點(diǎn)110與節(jié)點(diǎn)編號(hào)為"1" 的節(jié)點(diǎn)120之間的邊緣140的標(biāo)示字為"h"。首先在步驟S110中, 建立根節(jié)點(diǎn)110。接著,在步驟S120中,輸入所有模式字串其 中之一。在步驟S130中,假設(shè)一個(gè)觀察節(jié)點(diǎn),并暫時(shí)先令其為 根節(jié)點(diǎn)110。接下來在步驟S140中,依序輸入目前被輸入的模 式字串內(nèi)的一個(gè)字。并于步驟S150中,檢查觀察節(jié)點(diǎn)是否具有 符合標(biāo)示邊緣,所謂具有符合標(biāo)示邊緣就是指由觀察節(jié)點(diǎn)為 參考點(diǎn),與此觀察節(jié)點(diǎn)連結(jié)且箭頭向外的邊緣,并且此邊緣的 標(biāo)示字與被輸入的字相同。當(dāng)觀察節(jié)點(diǎn)具有符合標(biāo)示邊緣時(shí), 則進(jìn)行步驟S151,跟隨此符合標(biāo)示邊緣的路徑,令觀察節(jié)點(diǎn)轉(zhuǎn) 移至此符合標(biāo)示邊緣的路徑的下 一 個(gè)節(jié)點(diǎn)。如果當(dāng)觀察節(jié)點(diǎn)不具有符合標(biāo)示邊緣時(shí),則進(jìn)行步驟 S152 ,新增 一 個(gè)箭頭向外的邊緣及在箭頭所指處新增 一 個(gè)節(jié) 點(diǎn),再使新增的邊緣的標(biāo)示字為被輸入的字,并對(duì)新增的節(jié)點(diǎn) 給予識(shí)別編號(hào),且令觀察節(jié)點(diǎn)轉(zhuǎn)移至新增的節(jié)點(diǎn)。在此定義兩 個(gè)名詞"前路徑邊緣"與"前路徑字值",上述新增的邊緣為 新增的節(jié)點(diǎn)的"前路徑邊緣",上述新增的邊緣的標(biāo)示字為新增 的節(jié)點(diǎn)的"前路徑字值"。在步驟S160中,判斷輸入的字是否 為目前輸入的模式字串中的最后一個(gè)字,如果不是則到步驟 S140去執(zhí)行,換句話說,重復(fù)S140后的步驟,直至被輸入的模 式字串結(jié)束為止后。在步驟S170中,因?yàn)閳?zhí)行到此步驟,表示 輸入了 一個(gè)完整的模式字串,所以使目前的觀察節(jié)點(diǎn)為輸出節(jié) 點(diǎn),以便在利用此關(guān)鍵字樹作搜尋時(shí),根據(jù)此輸出節(jié)點(diǎn)來表示 搜尋到一個(gè)符合的模式字串,例如輸出節(jié)點(diǎn)130 (節(jié)點(diǎn)編號(hào)為"2")為輸入了 一個(gè)完整的模式字串"he"而產(chǎn)生,故定義此 輸出節(jié)點(diǎn)130所對(duì)應(yīng)的模式字串為"he"。接著,在步驟180中, 判斷輸入的字串是否為所有模式字串中的最后一個(gè),如果不是 則到步驟S120去執(zhí)行,換句話說,重復(fù)S120后的步驟,直至所 有的模式字串都輸入為止,即完成此關(guān)4建字樹100的建立。在AC演算法中包括了三種函數(shù),分別為跳轉(zhuǎn)函數(shù)(go-to function )、 失敗函數(shù)(failure function)及輸出函數(shù)(output function )。跳轉(zhuǎn)函數(shù)是表示當(dāng)前節(jié)點(diǎn)中若具有其標(biāo)示字與輸入 字相同的邊緣時(shí),就可以移轉(zhuǎn)到當(dāng)前節(jié)點(diǎn)的次一個(gè)節(jié)點(diǎn)。跳轉(zhuǎn) 函數(shù)的表示方法如下式所示g (x,c) =y ( 1-2)其中x代表為當(dāng)前節(jié)點(diǎn)編號(hào),c為輸入字串的其中一字,y 則是當(dāng)前節(jié)點(diǎn)的次一節(jié)點(diǎn)的節(jié)點(diǎn)編號(hào)。舉例來說,在根節(jié)點(diǎn)(識(shí) 別編號(hào)為"0")時(shí),輸入的字為"h",則跳轉(zhuǎn)函數(shù)為g(O,h) =1,其中"1"表示根節(jié)點(diǎn)所連結(jié)且標(biāo)示字為"h"的邊緣的次 一節(jié)點(diǎn)的編號(hào)。圖1C繪示失敗函數(shù)的移轉(zhuǎn)示意圖。失敗函數(shù)是當(dāng)前節(jié)點(diǎn)在 跳轉(zhuǎn)函數(shù)不成立時(shí),將當(dāng)前節(jié)點(diǎn)移轉(zhuǎn)至另一個(gè)節(jié)點(diǎn),其中另一 節(jié)點(diǎn)為具有其標(biāo)示字與輸入字相同的邊緣的節(jié)點(diǎn),換句話說, 另 一節(jié)點(diǎn)具有 一個(gè)連結(jié)邊緣,其中此連結(jié)邊緣的標(biāo)示字與輸入字相同。g ( x,c) =f ( 1-3 )f ( x) =x、 ( 1-4)其中f代表為失敗函數(shù)所移轉(zhuǎn)的次一節(jié)點(diǎn)的編號(hào)。x、代表為 在節(jié)點(diǎn)編號(hào)為"x"的節(jié)點(diǎn)時(shí)移轉(zhuǎn)的另 一節(jié)點(diǎn)的節(jié)點(diǎn)編號(hào)為"x"'。 另外,為更加清楚說明失敗函數(shù),于圖1C中另以粗黑邊緣表示。
例如,當(dāng)處在節(jié)點(diǎn)編號(hào)為"4"的節(jié)點(diǎn)時(shí),輸入的字為"h",在節(jié)點(diǎn)編號(hào)為"4"的節(jié)點(diǎn)的跳轉(zhuǎn)函數(shù)中并無此節(jié)點(diǎn)可供移轉(zhuǎn),所 以節(jié)點(diǎn)編號(hào)為"4"的節(jié)點(diǎn)的跳轉(zhuǎn)函數(shù)則為g ( 4,h) =f。此時(shí)節(jié) 點(diǎn)編號(hào)為"4"的節(jié)點(diǎn)則會(huì)使用失敗函數(shù)f ( 4) =1,將節(jié)點(diǎn)編號(hào) 為"1"的節(jié)點(diǎn)設(shè)為節(jié)點(diǎn)編號(hào)為"4"的節(jié)點(diǎn)的次一節(jié)點(diǎn)。輸出函數(shù)是依據(jù)所輸入的模式字串,分別對(duì)其最末字所對(duì) 應(yīng)的節(jié)點(diǎn)作標(biāo)記,使得在搜尋時(shí),當(dāng)依據(jù)輸入字串的字而進(jìn)入 這些節(jié)點(diǎn)時(shí),表示此輸入字串是符合上述模式字串其中之一。 如圖1C所示,節(jié)點(diǎn)編號(hào)為"5"的節(jié)點(diǎn)所對(duì)應(yīng)的模式字串為"she" 或 "he"。圖1D繪示已知AC演算法的搜尋流程圖。AC演算法的搜尋 比對(duì)流程包括下列步驟在步驟S210中,令觀察節(jié)點(diǎn)為根節(jié)點(diǎn) 110。接著在步驟S220中,依序從輸入字串中獲得一個(gè)字并稱 之為目標(biāo)字。在步驟S230中,以此目標(biāo)字為索引判斷目前的觀 察節(jié)點(diǎn)是否具有對(duì)應(yīng)的跳轉(zhuǎn)函數(shù)。若具有對(duì)應(yīng)跳轉(zhuǎn)函數(shù),則執(zhí)行步驟S231,則移轉(zhuǎn)至次一節(jié)點(diǎn)。若不具有對(duì)應(yīng)跳轉(zhuǎn)函數(shù),則 執(zhí)行步驟S232,則依據(jù)其失敗函數(shù)移轉(zhuǎn)至另 一節(jié)點(diǎn)。在步驟 S240中,判斷觀察節(jié)點(diǎn)是否為輸出節(jié)點(diǎn),當(dāng)觀察節(jié)點(diǎn)為輸出節(jié) 點(diǎn)時(shí),在步驟S241中,輸出此輸出節(jié)點(diǎn)所對(duì)應(yīng)的模式字串。最 后在步驟S250中,判斷輸入的字是否為輸入字串中的最后一個(gè) 字,如果不是則到步驟S220去執(zhí)行,換句話說,重復(fù)上述三個(gè) 步驟,直至輸入字串中的所有字都輸入為止。以依據(jù)上述所建立的關(guān)鍵字樹100作搜尋,且輸入一字串 (sher)為例。依序輸入"s"、 "h"、 "e"、 "r"各字為目標(biāo)字。首 先在根節(jié)點(diǎn)110狀態(tài)時(shí)第一個(gè)接收到字為"s",因根節(jié)點(diǎn)110具 有一個(gè)標(biāo)示字"s"的邊緣,所以移轉(zhuǎn)至節(jié)點(diǎn)編號(hào)為"3"的節(jié) 點(diǎn)。接著,在節(jié)點(diǎn)編號(hào)為"3"的節(jié)點(diǎn),判斷節(jié)點(diǎn)編號(hào)為"3"
的節(jié)點(diǎn)是否具有對(duì)應(yīng)輸入字"h"的跳轉(zhuǎn)函數(shù)。此時(shí),節(jié)點(diǎn)編號(hào)為"3"的節(jié)點(diǎn)具有對(duì)應(yīng)輸入字"h,,的跳轉(zhuǎn)函數(shù),所以移轉(zhuǎn)至 次一節(jié)點(diǎn)為節(jié)點(diǎn)編號(hào)為"4"的節(jié)點(diǎn)。其余字則以此類推。當(dāng)在 節(jié)點(diǎn)編號(hào)為"5"的節(jié)點(diǎn)時(shí),則目前的輸入字組合({she})符 合輸出函數(shù)({she})。最后在節(jié)點(diǎn)標(biāo)號(hào)為"5"的節(jié)點(diǎn)時(shí),所輸入的字為"r",此 時(shí)節(jié)點(diǎn)標(biāo)號(hào)為"5"的節(jié)點(diǎn)的跳轉(zhuǎn)函數(shù)因不具有此標(biāo)示字,所以 需另外導(dǎo)入失敗函數(shù)作為其判斷。在節(jié)點(diǎn)編號(hào)為"5"的節(jié)點(diǎn)的 失敗函數(shù)且對(duì)應(yīng)字"r"的移轉(zhuǎn)節(jié)點(diǎn)為節(jié)點(diǎn)編號(hào)為"2"的節(jié)點(diǎn)。 所以字串(sher)在關(guān)鍵字樹100中的移轉(zhuǎn)順序?yàn)楣?jié)點(diǎn)編號(hào)為 "0"的節(jié)點(diǎn)—節(jié)點(diǎn)編號(hào)為"3"的節(jié)點(diǎn)—節(jié)點(diǎn)編號(hào)為"4"的節(jié) 點(diǎn)—節(jié)點(diǎn)編號(hào)為"5"的節(jié)點(diǎn)—節(jié)點(diǎn)編號(hào)為"2"的節(jié)點(diǎn)。AC演算法對(duì)于一般的處理單元(例如,中央處理器)可以 發(fā)揮其快速的比對(duì)效能,但是對(duì)于前文中提到的圖形處理單元卻無法發(fā)揮其快速比對(duì)的效能。原因是圖形處理器的設(shè)計(jì)主要 以3D圖形繪制運(yùn)算為主,使得圖形處理器不適合進(jìn)行上述的流 程控制處理。發(fā)明內(nèi)容本發(fā)明的目的是提供一種多模式搜尋的方法,用以比對(duì)所 輸入字串中是否包含有預(yù)設(shè)模式字串其中之一,并使得輸入字 串的比對(duì)能夠更加快速。本發(fā)明的另一目的是提供一種多模式搜尋的系統(tǒng),用以比 對(duì)所輸入字串中是否包含有預(yù)設(shè)模式字串其中之一,并改進(jìn)系 統(tǒng)整體的效能。本發(fā)明提出一種多模式搜尋的方法,其可比對(duì)輸入字串中 是否包含有多個(gè)模式字串其中之一,這些模式字串是用以建立
關(guān)鍵字樹,此關(guān)鍵字樹包括多個(gè)節(jié)點(diǎn)以及多個(gè)邊緣,每一個(gè)邊 緣以 一 個(gè)標(biāo)示字來標(biāo)示,每 一 個(gè)節(jié)點(diǎn)以 一 個(gè)識(shí)別編號(hào)來代表, 關(guān)鍵字樹的第一個(gè)節(jié)點(diǎn)為根節(jié)點(diǎn)。本發(fā)明的多模式搜尋的方法 會(huì)針對(duì)關(guān)鍵字樹中的每一個(gè)節(jié)點(diǎn)分別建立跳表,此跳表包括多 個(gè)索引字以及對(duì)應(yīng)索引字的多個(gè)識(shí)別編號(hào),其中識(shí)別編號(hào)為目 前所處于節(jié)點(diǎn)且以索引字為索引時(shí),應(yīng)進(jìn)入的下 一 個(gè)節(jié)點(diǎn)的識(shí) 別編號(hào)。本發(fā)明的多模式搜尋的方法根據(jù)上述所有節(jié)點(diǎn)的跳表, 來比對(duì)輸入字串中是否包含有這些模式字串其中之一。本發(fā)明另提出 一種多模式搜尋的系統(tǒng)。此多模式搜尋系統(tǒng) 包括第一處理單元、第一存儲(chǔ)器單元及第二處理單元。第一處 理單元用以根據(jù)多個(gè)模式字串,來建立關(guān)鍵字樹,關(guān)鍵字樹包 括多個(gè)節(jié)點(diǎn)以及多個(gè)邊緣,每一個(gè)邊緣以一個(gè)標(biāo)示字來標(biāo)示, 每一個(gè)節(jié)點(diǎn)以一個(gè)識(shí)別編號(hào)來代表,并且針對(duì)關(guān)鍵字樹中的每 一個(gè)節(jié)點(diǎn)分別建立跳表,跳表中包括多個(gè)索引字以及對(duì)應(yīng)索引 字的多個(gè)識(shí)別編號(hào),其中識(shí)別編號(hào)為目前所處于所針對(duì)的節(jié)點(diǎn) 且以索引字為索引時(shí),應(yīng)進(jìn)入的下一個(gè)節(jié)點(diǎn)的識(shí)別編號(hào)。第一 存儲(chǔ)器單元用以儲(chǔ)存關(guān)鍵字樹中所有節(jié)點(diǎn)的跳表。第二處理單 元耦接至第一存儲(chǔ)器單元,并用以根據(jù)第 一存儲(chǔ)器單元所儲(chǔ)存 的所有節(jié)點(diǎn)的跳表,借此來比對(duì)輸入字串中是否包含有這些模 式字串其中之一。依據(jù)本發(fā)明的上述方法或系統(tǒng)中,根據(jù)所有節(jié)點(diǎn)的跳表來比對(duì)輸入字串中是否包含有模式字串其中之一包括下列步驟 先令一觀察節(jié)點(diǎn)為根節(jié)點(diǎn),再依序輸入上述輸入字串中的字來 獲得一目標(biāo)字,并以此目標(biāo)字為索引,從目前的觀察節(jié)點(diǎn)的跳 表中,獲得對(duì)應(yīng)目標(biāo)字的識(shí)別編號(hào),再令觀察節(jié)點(diǎn)變?yōu)樽R(shí)別編 號(hào)所代表的節(jié)點(diǎn),接著,判斷觀察節(jié)點(diǎn)是否為一輸出節(jié)點(diǎn),當(dāng) 觀察節(jié)點(diǎn)為輸出節(jié)點(diǎn)時(shí),輸出此輸出節(jié)點(diǎn)對(duì)應(yīng)的模式字串,重 復(fù)輸入上述輸入字串中的字后的動(dòng)作,直至輸入字串結(jié)束為止。 本發(fā)明因針對(duì)關(guān)鍵字樹的每一個(gè)節(jié)點(diǎn)分別建立跳表,然后 再利用此跳表進(jìn)行多模式搜尋,因此使得輸入字串的比對(duì)能夠 更加快速。尤其是本發(fā)明的系統(tǒng),將利用跳表來進(jìn)行多模式搜 尋以第二處理單元來執(zhí)行,更能增加系統(tǒng)的效能。
圖1A繪示AC演算法的關(guān)鍵字樹的建制流程圖。 圖1B繪示AC演算法的關(guān)鍵字樹示意圖。 圖1C繪示失敗函數(shù)的移轉(zhuǎn)示意圖。 圖1D繪示已知AC演算法的搜尋流程圖。 圖2A繪示本發(fā)明的 一 實(shí)施例的多才莫式搜尋系統(tǒng)的示意圖。 圖2B繪示本發(fā)明的 一 實(shí)施例的節(jié)點(diǎn)的跳表的建立流程圖。 圖3繪示本發(fā)明的 一 實(shí)施例的關(guān)鍵字樹各節(jié)點(diǎn)對(duì)應(yīng)其跳表 的連結(jié)狀態(tài)示意圖。圖4繪示本發(fā)明的 一 實(shí)施例的搜尋流程圖。圖5繪示本發(fā)明的 一 實(shí)施例的總跳表的示意圖。
具體實(shí)施方式
為讓本發(fā)明的上述和其他目的、特征和優(yōu)點(diǎn)能更明顯易懂, 下文特舉較佳實(shí)施例,并配合所附圖式,作詳細(xì)說明如下。本發(fā)明為能改善AC演算法應(yīng)用于圖形處理器的執(zhí)行效能, 所以針對(duì)AC演算法作流程控制的改良,使其更能符合圖形處理 器的運(yùn)作。關(guān)于AC演算法建立關(guān)鍵字樹于前文已有詳細(xì)描述, 所以在此不多加贅述。圖2A繪示本發(fā)明的多模式搜尋系統(tǒng)的示意圖。多模式搜尋 系統(tǒng)200包括第一處理單元210、第一存儲(chǔ)器單元220、第二處理 單元230及第二存儲(chǔ)器單元240。第一處理單元210根據(jù)多個(gè)模式 字串,建立關(guān)4建字樹。在本實(shí)施例中,第一處理單元210為一中 央處理器。第一存儲(chǔ)器單元220耦接于第一處理單元210。當(dāng)?shù)?一處理單元210建立關(guān)鍵字樹后,將關(guān)鍵字樹中所有節(jié)點(diǎn)的跳表 儲(chǔ)存至第一存儲(chǔ)器單元220中。第二處理單元230耦接至第一存 儲(chǔ)器單元220,根據(jù)第 一 存儲(chǔ)器單元220所儲(chǔ)存的所有節(jié)點(diǎn)的跳 表,來比對(duì)輸入字串中是否包含有模式字串之一。在本實(shí)施例 中,第二處理單元230為一圖形處理單元。在本實(shí)施例中,第二 存儲(chǔ)器單元240設(shè)置于第二處理單元230之中,用以暫存部分的 輸入字串,但并非限定本發(fā)明,其他可以讓第二處理單元存取 的存儲(chǔ)器,都可用來暫存部分的輸入字串。當(dāng)?shù)谝惶幚韱卧?10建立關(guān)鍵字樹后,對(duì)關(guān)鍵字樹中的每一 節(jié)點(diǎn)分別建立其對(duì)應(yīng)的跳表。并對(duì)關(guān)鍵字樹中(除根節(jié)點(diǎn)以外) 所有的節(jié)點(diǎn)分別定義 一 組前路徑邊緣以及前路徑字值。舉例來 說,對(duì)于節(jié)點(diǎn)編號(hào)為"5"的節(jié)點(diǎn)而言,其前路徑邊緣則為其與 節(jié)點(diǎn)編號(hào)為"4"的節(jié)點(diǎn)間的連結(jié)邊緣,所以節(jié)點(diǎn)編號(hào)為"5" 的節(jié)點(diǎn)的前路徑字值為"e"。圖2B繪示本發(fā)明的節(jié)點(diǎn)的跳表的建立流程圖。圖3繪示關(guān) 鍵字樹的各節(jié)點(diǎn)對(duì)應(yīng)其跳表的連結(jié)狀態(tài)示意圖。并請(qǐng)同時(shí)參考 圖2B與圖3,選擇關(guān)鍵字樹300中的一個(gè)節(jié)點(diǎn)作為暫存節(jié)點(diǎn),并 針對(duì)此節(jié)點(diǎn)建立跳表。首先在步驟S31000中,第一處理單元210 令一暫存字為字集合中其中之一,所謂的字集合就是為輸入字 串中所有可能出現(xiàn)的字的集合。例如,假設(shè)輸入字串只可能為 {sher},則字集合為字"s"、 "h"、 "e,,以及"r,,所組成的集合。 接下來,在步驟S32000中,第一處理單元210暫時(shí)先令一結(jié)果 節(jié)點(diǎn)為根節(jié)點(diǎn),再將暫存字記錄于跳表中的索引字其中之一。 舉例來說,令節(jié)點(diǎn)編號(hào)為"1"的節(jié)點(diǎn)為暫存節(jié)點(diǎn),將輸入字"h"
設(shè)為暫存字。在步驟S33000中,檢查暫存節(jié)點(diǎn)是否具有一個(gè)連 結(jié)邊緣,其中此連結(jié)邊緣的標(biāo)示字與暫存字相同。若暫存節(jié)點(diǎn)具有此連結(jié)邊緣時(shí),則執(zhí)行步驟S33100,則將 連結(jié)邊緣所連結(jié)的次 一 節(jié)點(diǎn)的識(shí)別編號(hào)記錄于跳表中對(duì)應(yīng)該暫 存字的識(shí)別編號(hào),再跳到步驟S34100,檢查在字集合中是否沒 有其他可能的字可以用來變更暫存字,當(dāng)已經(jīng)沒有可能字可以 變更時(shí)則結(jié)束,否則執(zhí)行步驟S34200,變更暫存字為字集合中 的另外一個(gè)沒有使用過的字,接著跳到步驟S32000去執(zhí)行。舉 例來說,令圖3中節(jié)點(diǎn)編號(hào)為"1"的節(jié)點(diǎn)為暫存節(jié)點(diǎn)且暫存字 為"e",則節(jié)點(diǎn)編號(hào)為"2"的節(jié)點(diǎn)與暫存節(jié)點(diǎn)之間具有一個(gè)連 結(jié)邊緣,且其索引標(biāo)示字為"e"。所以將節(jié)點(diǎn)編號(hào)"2"記錄至 跳表中對(duì)應(yīng)該暫存字"e"的識(shí)別編號(hào)。若暫存節(jié)點(diǎn)不具有此連結(jié)邊緣時(shí),則執(zhí)行步驟S33200,從關(guān)鍵字樹300中找出 一組符合節(jié)點(diǎn)集合,此符合節(jié)點(diǎn)集合中所包 括的符合節(jié)點(diǎn)的前路徑字值與暫存字相同。在步驟S33300中,將符合節(jié)點(diǎn)集合中的符合節(jié)點(diǎn)反推到具 有符合節(jié)點(diǎn)的前路徑邊緣的節(jié)點(diǎn)。舉例來說,對(duì)于節(jié)點(diǎn)編號(hào)為"5"的節(jié)點(diǎn)且暫存字為"r"而言,在關(guān)鍵字樹300中的符合節(jié) 點(diǎn)為節(jié)點(diǎn)編號(hào)為"8"的節(jié)點(diǎn)。再將符合節(jié)點(diǎn)反推至其前路徑邊 緣的節(jié)點(diǎn)(意即為節(jié)點(diǎn)編號(hào)為"2"的節(jié)點(diǎn)),并且將前路徑邊 緣的節(jié)點(diǎn)設(shè)為新的符合節(jié)點(diǎn)。接下來,在步驟S33400中,比對(duì)符合節(jié)點(diǎn)集合中的某一符 合節(jié)點(diǎn)與暫存節(jié)點(diǎn)的前路徑字值是否相同。若符合節(jié)點(diǎn)與暫存 節(jié)點(diǎn)的前路徑字值相同時(shí),則跳到步驟S33500,依續(xù)前例,比 對(duì)符合節(jié)點(diǎn)(節(jié)點(diǎn)編號(hào)為"2"的節(jié)點(diǎn))與暫存節(jié)點(diǎn)(節(jié)點(diǎn)編號(hào) 為"5"的節(jié)點(diǎn))兩者的前路徑字。因兩者的前路徑字相同,則 跳到步驟S 3 3 5 0 0 。若符合節(jié)點(diǎn)與暫存節(jié)點(diǎn)的前路徑字值不相同
時(shí),則執(zhí)行步驟S33420,比對(duì)此符合節(jié)點(diǎn)是否為根節(jié)點(diǎn)310。 若符合節(jié)點(diǎn)為根節(jié)點(diǎn)310時(shí),則執(zhí)行步驟S33421,令結(jié)果節(jié)點(diǎn) 等于此符合節(jié)點(diǎn)最原始未被反推前的節(jié)點(diǎn)。接著執(zhí)行步驟 S33422從符合節(jié)點(diǎn)集合中移除此符合節(jié)點(diǎn)。接著,在步驟 S33500中,檢查符合節(jié)點(diǎn)集合中是否所有符合節(jié)點(diǎn)都已經(jīng)比對(duì) 過。如果不是,則執(zhí)行步驟S33510的變更符合節(jié)點(diǎn)后,再跳到 步驟S33400去執(zhí)行,換句話說,重復(fù)執(zhí)行步驟S33400后的步驟, 直至完成所有的符合節(jié)點(diǎn)為止。若符合節(jié)點(diǎn)集合中所有符合節(jié) 點(diǎn)都已經(jīng)比對(duì)過的話,則執(zhí)行步驟S33520,將暫存節(jié)點(diǎn)反推到具有暫存節(jié)點(diǎn)的前路徑邊緣的節(jié)點(diǎn)。依續(xù)前例,將暫存節(jié)點(diǎn)反 推至其前路徑邊緣的節(jié)點(diǎn)(意即為節(jié)點(diǎn)編號(hào)為"4"的節(jié)點(diǎn))。
接著,執(zhí)行步驟S33600,比對(duì)此暫存節(jié)點(diǎn)是否為根節(jié)點(diǎn)310。 若暫存節(jié)點(diǎn)不為根節(jié)點(diǎn)310,則到步驟S33300去執(zhí)行,換句話 說,重復(fù)執(zhí)行步驟S33300后的步驟,直到暫存節(jié)點(diǎn)前推至根節(jié) 點(diǎn)310。若暫存節(jié)點(diǎn)為根節(jié)點(diǎn)310,則跳至步驟S33700執(zhí)行,并 令結(jié)果節(jié)點(diǎn)的識(shí)別編號(hào)記錄于跳表中對(duì)應(yīng)暫存字的識(shí)別編號(hào), 再跳到步驟S34100執(zhí)行。也就是說,變更暫存字為字集合中的 下一字,重復(fù)步驟S32000后的步驟,直至字集合的所有字都曾 經(jīng)為暫存字為止。最后,當(dāng)?shù)谝惶幚韱卧?10建立完關(guān)鍵字樹300 中所有節(jié)點(diǎn)的跳表后,將這些跳表儲(chǔ)存于第一存儲(chǔ)器單元220中。
延續(xù)前例,比對(duì)符合節(jié)點(diǎn)(節(jié)點(diǎn)編號(hào)為"2"的節(jié)點(diǎn))與暫 存節(jié)點(diǎn)兩者的前路徑字(節(jié)點(diǎn)編號(hào)為"5"的節(jié)點(diǎn))。因符合節(jié) 點(diǎn)與暫存節(jié)點(diǎn)兩者的前路徑字皆為"e",所以將符合節(jié)點(diǎn)反推 至其前路徑邊緣的節(jié)點(diǎn),將此前路徑邊緣的節(jié)點(diǎn)(節(jié)點(diǎn)編號(hào)為 "1"的節(jié)點(diǎn))設(shè)為符合節(jié)點(diǎn)。再將暫存節(jié)點(diǎn)反推至其前路徑邊 緣的節(jié)點(diǎn),并將此前路徑邊緣的節(jié)點(diǎn)(節(jié)點(diǎn)編號(hào)為"4"的節(jié)點(diǎn))
設(shè)為暫存節(jié)點(diǎn)。再重復(fù)反推及比對(duì)兩者的前路徑字,直至?xí)捍?節(jié)點(diǎn)抵達(dá)根節(jié)點(diǎn)310為止。在此將符合節(jié)點(diǎn)的節(jié)點(diǎn)編號(hào)移轉(zhuǎn)順序分別列出節(jié)點(diǎn)編號(hào)為"2"的節(jié)點(diǎn)—節(jié)點(diǎn)編號(hào)為"1"的節(jié)點(diǎn)—節(jié)點(diǎn)編號(hào)為"0"的 節(jié)點(diǎn)。符合節(jié)點(diǎn)移轉(zhuǎn)時(shí)所對(duì)應(yīng)的前路徑字分別為"e"、 "h"。另 外,暫存節(jié)點(diǎn)的節(jié)點(diǎn)編號(hào)移轉(zhuǎn)順序也分別列出節(jié)點(diǎn)編號(hào)為"5" 的節(jié)點(diǎn)—節(jié)點(diǎn)編號(hào)為"4"的節(jié)點(diǎn)—節(jié)點(diǎn)編號(hào)為"3"的節(jié)點(diǎn)— 節(jié)點(diǎn)編號(hào)為"0"的節(jié)點(diǎn)。暫存節(jié)點(diǎn)移轉(zhuǎn)時(shí)所對(duì)應(yīng)的前路徑字分 別為"e"、 "h"與"s"。而節(jié)點(diǎn)編號(hào)為"8"的節(jié)點(diǎn)會(huì)被設(shè)為結(jié) 果節(jié)點(diǎn)。圖4繪示本發(fā)明的實(shí)施例搜尋流程圖。當(dāng)有輸入字串欲進(jìn)行 比對(duì)時(shí),第二處理單元230會(huì)根據(jù)本實(shí)施例的AC演算法比對(duì)搜 尋輸入字串是否符合預(yù)設(shè)的多模式字串,搜尋方法包括下列步 驟在步驟S410中,首先第二處理單元230令觀察節(jié)點(diǎn)為根節(jié) 點(diǎn)310。接著在步驟S420中,依序從輸入字串中獲得一個(gè)字并 稱之為目標(biāo)字。在步驟S430中,以目標(biāo)字為索引,并從觀察節(jié) 點(diǎn)的跳表中,獲得對(duì)應(yīng)目標(biāo)字的識(shí)別編號(hào),再令觀察節(jié)點(diǎn)移轉(zhuǎn) 到識(shí)別編號(hào)所代表的節(jié)點(diǎn)。接下來在步驟S440中,判斷觀察節(jié) 點(diǎn)是否為輸出節(jié)點(diǎn)。若觀察節(jié)點(diǎn)為輸出節(jié)點(diǎn),則執(zhí)行步驟S441 輸出此輸出節(jié)點(diǎn)的模式字串。最后,步驟S450第二處理單元230 重復(fù)上述三個(gè)步驟,直至輸入字串結(jié)束為止。依據(jù)前例所建立的關(guān)鍵字樹3 0 0及其所有節(jié)點(diǎn)的跳表,并且 輸入一字串(sher》來搜尋為例。依序輸入"s"、 "h"、 "e"、 "r" 各字。首先在根節(jié)點(diǎn)310狀態(tài)時(shí)第一個(gè)接收到字為"s",因根節(jié) 點(diǎn)310具有一個(gè)標(biāo)示字"s"的邊緣,所以移轉(zhuǎn)至節(jié)點(diǎn)編號(hào)為"3" 的節(jié)點(diǎn)。接著,索引節(jié)點(diǎn)編號(hào)為"3"的節(jié)點(diǎn)的跳表是否具有目 標(biāo)字"h"的對(duì)應(yīng)的識(shí)別編號(hào),因節(jié)點(diǎn)編號(hào)為"3"的節(jié)點(diǎn)的跳
表對(duì)應(yīng)"h"的識(shí)別編號(hào)為節(jié)點(diǎn)編號(hào)為"4"的節(jié)點(diǎn)。其余字則以此類推。所以字串(sher)在此關(guān)鍵字樹300的移轉(zhuǎn)順序?yàn)楣?jié) 點(diǎn)編號(hào)為"0"的節(jié)點(diǎn)—節(jié)點(diǎn)編號(hào)為"3"的節(jié)點(diǎn)—節(jié)點(diǎn)編號(hào)為 "4"的節(jié)點(diǎn)—節(jié)點(diǎn)編號(hào)為"5"的節(jié)點(diǎn)—節(jié)點(diǎn)編號(hào)為"8"的節(jié) 點(diǎn)。本實(shí)施例的A C演算法是利用索引找查跳表的方式取代原先 的流程控制處理。除此之外,本領(lǐng)域普通技術(shù)人員應(yīng)當(dāng)知道,跳表的建立方 式不僅限于各節(jié)點(diǎn)分別建立跳表。當(dāng)然,也可以將關(guān)鍵字樹的 所有節(jié)點(diǎn)的跳表總和成一總跳表500,并將其儲(chǔ)存于第 一存儲(chǔ)器 單元220中。圖5繪示總跳表的示意圖。另外在總跳表500中更加 入各節(jié)點(diǎn)索引項(xiàng)次,以供節(jié)點(diǎn)索引其對(duì)應(yīng)的跳表。如圖5所示, 例如當(dāng)在節(jié)點(diǎn)編號(hào)為"5"時(shí),索引總跳表中對(duì)應(yīng)的標(biāo)示字分別 可以得到其移轉(zhuǎn)的次一 節(jié)點(diǎn)編號(hào)。其表示式如下所示 J[k|[e]=n (2-1 )其中,k代表索引節(jié)點(diǎn)編號(hào)。e為被索引節(jié)點(diǎn)的索引項(xiàng)次, 索引項(xiàng)次是對(duì)應(yīng)此節(jié)點(diǎn)對(duì)其他節(jié)點(diǎn)的標(biāo)示字。n代表為對(duì)應(yīng)索引 項(xiàng)次的移轉(zhuǎn)至次一節(jié)點(diǎn)編號(hào)。根據(jù)圖3而言J[5][104 ( h) ] = 1 ( 2-2)J[5][114 ( r ) ]=8 ( 2-3 )J[5][115 ( s ) ]=3 ( 2-4 )當(dāng)處于節(jié)點(diǎn)編號(hào)為"5"的節(jié)點(diǎn),且索引項(xiàng)次為'104,(即 標(biāo)示字為"h")時(shí)則移轉(zhuǎn)至節(jié)點(diǎn)編號(hào)為"1"的節(jié)點(diǎn)。當(dāng)處于節(jié) 點(diǎn)編號(hào)為"5"的節(jié)點(diǎn),且索引項(xiàng)次為'114,(即標(biāo)示字為"r") 時(shí)則移轉(zhuǎn)至節(jié)點(diǎn)編號(hào)為"8"的節(jié)點(diǎn)。其他可依此類推。綜上所述,本發(fā)明因采用對(duì)關(guān)鍵字樹的每一個(gè)節(jié)點(diǎn)分別建 立跳表,在跳表中包括多個(gè)索引字以及對(duì)應(yīng)索引字的多個(gè)識(shí)別 編號(hào),這些識(shí)別編號(hào)為處于所針對(duì)的節(jié)點(diǎn)且以這些索引字為索 引時(shí),應(yīng)進(jìn)入的下一個(gè)節(jié)點(diǎn)的識(shí)別編號(hào)。使得將圖形處理器所 不適合的流程控制處理,改成索引找查表的方式進(jìn)行,使得第 二處理單元應(yīng)用對(duì)于本發(fā)明的AC演算法時(shí)可以能夠更加快速地搜尋。以上所述僅為本發(fā)明較佳實(shí)施例,然其并非用以限定本發(fā) 明的范圍,任何熟悉本項(xiàng)技術(shù)的人員,在不脫離本發(fā)明的精神 和范圍內(nèi),可在此基礎(chǔ)上做進(jìn)一步的改進(jìn)和變化,因此本發(fā)明 的保護(hù)范圍當(dāng)以本申請(qǐng)的權(quán)利要求書所界定的范圍為準(zhǔn)。附圖中符號(hào)的簡單說明如下100:關(guān)鍵字樹110:根節(jié)點(diǎn)200:多模式搜尋系統(tǒng)210:第一處理單元220:第一存儲(chǔ)器230:第二處理單元240:第二存儲(chǔ)器300:關(guān)鍵字樹310:才艮節(jié)點(diǎn)500:總跳表S110 S190: AC演算法的建制的步驟 S210 S250: AC演算法搜尋的步驟 S31000 S33700:浪匕表的建立的步4聚 S410 S450:本發(fā)明的實(shí)施例中搜尋的步驟。
權(quán)利要求
1.一種多模式搜尋的方法,用以比對(duì)一輸入字串中是否包含有多個(gè)模式字串其中之一,所述模式字串用以建立一關(guān)鍵字樹,該關(guān)鍵字樹包括多個(gè)節(jié)點(diǎn)以及多個(gè)邊緣,每一邊緣以一標(biāo)示字來標(biāo)示,每一節(jié)點(diǎn)以一識(shí)別編號(hào)來代表,該關(guān)鍵字樹的第一個(gè)節(jié)點(diǎn)為一根節(jié)點(diǎn),其特征在于,該方法包括下列步驟針對(duì)該關(guān)鍵字樹中的每一節(jié)點(diǎn)建立一跳表,該跳表包括多個(gè)索引字以及對(duì)應(yīng)所述索引字的多個(gè)識(shí)別編號(hào),所述識(shí)別編號(hào)為處于該節(jié)點(diǎn)且以所述索引字為索引時(shí),應(yīng)進(jìn)入的下一個(gè)節(jié)點(diǎn)的識(shí)別編號(hào);令一觀察節(jié)點(diǎn)為該根節(jié)點(diǎn);步驟一依序輸入該輸入字串中的字,以獲得一目標(biāo)字;步驟二以該目標(biāo)字為索引,從該觀察節(jié)點(diǎn)的該跳表中,獲得對(duì)應(yīng)該目標(biāo)字的該識(shí)別編號(hào),再令該觀察節(jié)點(diǎn)變?yōu)樵撟R(shí)別編號(hào)所代表的節(jié)點(diǎn);步驟三判斷該觀察節(jié)點(diǎn)是否為一輸出節(jié)點(diǎn),當(dāng)該觀察節(jié)點(diǎn)為該輸出節(jié)點(diǎn)時(shí),輸出該輸出節(jié)點(diǎn)對(duì)應(yīng)的模式字串;以及重復(fù)上述步驟一至步驟三的動(dòng)作,直至該輸入字串結(jié)束為止。
2. 根據(jù)權(quán)利要求l所述的多模式搜尋的方法,其特征在于, 針對(duì)該關(guān)鍵字樹中除該根節(jié)點(diǎn)以外的所有節(jié)點(diǎn)定義一前路徑邊 緣以及一 前路徑字值,該前路徑邊緣的^各徑的下 一 節(jié)點(diǎn)即為所 針對(duì)的節(jié)點(diǎn),且該前路徑邊緣的該標(biāo)示字即為該前路徑字值, 則針對(duì)該關(guān)鍵字樹中的一暫存節(jié)點(diǎn)建立該跳表,更包括下列步 驟步驟四令一暫存字為一字集合中其中之一,該字集合為該輸入字串的所有可能出現(xiàn)的字的集合;步驟五令一結(jié)果節(jié)點(diǎn)為該根節(jié)點(diǎn),將該暫存字記錄于該跳表中的所述索引字其中之一;步驟六檢查該暫存節(jié)點(diǎn)是否具有一連結(jié)邊緣,其中該連 結(jié)邊緣的標(biāo)示字與該暫存字相同;步驟七若該暫存節(jié)點(diǎn)具有該連結(jié)邊緣時(shí),將該連結(jié)邊緣 所連結(jié)的次 一 節(jié)點(diǎn)的識(shí)別編號(hào)記錄于該跳表中對(duì)應(yīng)該暫存字的 該識(shí)別編號(hào),并跳到步驟十八;步驟八若該暫存節(jié)點(diǎn)不具有該連結(jié)邊緣時(shí)步驟九從該關(guān)鍵字樹中找出一符合節(jié)點(diǎn)集合,該符合節(jié) 點(diǎn)集合中的一符合節(jié)點(diǎn)的該前路徑字值與該暫存字相同;步驟十將該符合節(jié)點(diǎn)集合中的所述符合節(jié)點(diǎn)反推到具有 該符合節(jié)點(diǎn)的該前路徑邊緣的節(jié)點(diǎn);步驟十一比對(duì)該符合節(jié)點(diǎn)集合中一個(gè)符合節(jié)點(diǎn)與該暫存 節(jié)點(diǎn)的該前路徑字值是否相同;步驟十二 若該符合節(jié)點(diǎn)的該前路徑字值與該暫存節(jié)點(diǎn)的 該前路徑字值不相同時(shí)步驟十三比對(duì)該符合節(jié)點(diǎn)是否為該根節(jié)點(diǎn),若為該根節(jié) 點(diǎn)時(shí),令該結(jié)果節(jié)點(diǎn)等于該符合節(jié)點(diǎn)最原始未被反推前的節(jié)點(diǎn); 以及步驟十四從該符合節(jié)點(diǎn)集合中移除該符合節(jié)點(diǎn);步驟十五變更該符合節(jié)點(diǎn)為該符合節(jié)點(diǎn)集合中的下 一 符 合節(jié)點(diǎn),重復(fù)步驟十一至步驟十四的動(dòng)作,直至該符合節(jié)點(diǎn)集 合中所有符合節(jié)點(diǎn)都比對(duì)過為止;步驟十六將該暫存節(jié)點(diǎn)反推到具有該暫存節(jié)點(diǎn)的該前路 徑邊緣的節(jié)點(diǎn);以及步驟十七比對(duì)該暫存節(jié)點(diǎn)是否為該根節(jié)點(diǎn),若為該根節(jié) 點(diǎn)時(shí),令該結(jié)果節(jié)點(diǎn)的識(shí)別編號(hào)記錄于該跳表中對(duì)應(yīng)該暫存字 的該識(shí)別編號(hào),并跳到步驟十八;以及 步驟十八變更該暫存字為該字集合中的下一字,重復(fù)步 驟五至步驟十八的動(dòng)作,直至該字集合的所有字都曾經(jīng)為該暫 存字為止。
3. 根據(jù)權(quán)利要求l所述的多模式搜尋的方法,其特征在于, 建立該關(guān)鍵字樹,更包括下列步驟步驟十九建立該根節(jié)點(diǎn); 步驟二十輸入所述模式字串之一; 步驟二十一令該觀察節(jié)點(diǎn)為該根節(jié)點(diǎn); 步驟二十二依序輸入被輸入的所迷模式字串內(nèi)的一個(gè)字; 步驟二十三檢查該觀察節(jié)點(diǎn)是否具有一符合標(biāo)示邊緣,該符合標(biāo)示邊緣的該標(biāo)示字與被輸入的所述字相同步驟二十四當(dāng)具有時(shí),跟隨該符合標(biāo)示邊緣的路徑,令該觀察節(jié)點(diǎn)變?yōu)樵摲蠘?biāo)示邊緣的路徑的下 一 節(jié)點(diǎn);以及步驟二十五當(dāng)不具有時(shí),新增一個(gè)邊緣與一個(gè)節(jié)點(diǎn),使新增的所述邊緣的該標(biāo)示字為被輸入的所述字,并對(duì)新增的所述節(jié)點(diǎn)給予該識(shí)別編號(hào),且令該觀察節(jié)點(diǎn)變?yōu)樾略龅乃龉?jié)點(diǎn); 步驟二十六重復(fù)步驟二十二至步驟二十五的動(dòng)作,直至被輸入的模式字串結(jié)束為止后,使目前的該觀察節(jié)點(diǎn)為該輸出節(jié)點(diǎn);以及步驟二十七重復(fù)步驟二十至步驟二十六的動(dòng)作,直至所 有所述模式字串都輸入為止。
4. 一種多模式搜尋的系統(tǒng),其特征在于,包括 一第一處理單元,用以根據(jù)多個(gè)模式字串,建立一關(guān)鍵字樹,該關(guān)鍵字樹包括多個(gè)節(jié)點(diǎn)以及多個(gè)邊緣,每一邊緣以一標(biāo) 示字來標(biāo)示,每一節(jié)點(diǎn)以一識(shí)別編號(hào)來代表,并且針對(duì)該關(guān)鍵 字樹中的每一節(jié)點(diǎn)建立一跳表,該跳表包括多個(gè)索引字以及對(duì) 應(yīng)所述索引字的多個(gè)識(shí)別編號(hào),所述識(shí)別編號(hào)為處于所針對(duì)的 節(jié)點(diǎn)且以所述索引字為索引時(shí),應(yīng)進(jìn)入的下一個(gè)節(jié)點(diǎn)的識(shí)別編—弓—■一第一存儲(chǔ)器單元,用以儲(chǔ)存該關(guān)鍵字樹中所有節(jié)點(diǎn)的該跳表;以及一第二處理單元,耦接至該第一存儲(chǔ)器單元,用以根據(jù)該 第一存儲(chǔ)器單元所儲(chǔ)存的所有節(jié)點(diǎn)的該跳表,來比對(duì)一輸入字 串中是否包含有所述模式字串其中之一。
5. 根據(jù)權(quán)利要求4所述的多模式搜尋的系統(tǒng),其特征在于, 該關(guān)鍵字樹的第一個(gè)節(jié)點(diǎn)為一根節(jié)點(diǎn),該第二處理單元先令一 觀察節(jié)點(diǎn)為該根節(jié)點(diǎn),再依序輸入該輸入字串中的字來獲得一 目標(biāo)字,并以該目標(biāo)字為索引,從該觀察節(jié)點(diǎn)的該跳表中,獲 得對(duì)應(yīng)該目標(biāo)字的該識(shí)別編號(hào),再令該觀察節(jié)點(diǎn)變?yōu)樵撟R(shí)別編 號(hào)所代表的節(jié)點(diǎn),接著,判斷該觀察節(jié)點(diǎn)是否為一輸出節(jié)點(diǎn), 當(dāng)該觀察節(jié)點(diǎn)為該輸出節(jié)點(diǎn)時(shí),輸出該輸出節(jié)點(diǎn)對(duì)應(yīng)的模式字 串,該第二處理單元重復(fù)輸入該輸入字串中的字后的動(dòng)作,直 至該輸入字串結(jié)束為止。
6. 根據(jù)權(quán)利要求4所述的多模式搜尋的系統(tǒng),其特征在于, 針對(duì)該關(guān)鍵樹中除該根節(jié)點(diǎn)以外的所有節(jié)點(diǎn)定義一前路徑邊緣 以及一前^各徑字值,該前^各徑邊緣的^各徑的下一節(jié)點(diǎn)即為所針 對(duì)的節(jié)點(diǎn),且該前路徑邊緣的該標(biāo)示字即為該前路徑字值,則 所述第一處理單元針對(duì)一暫存節(jié)點(diǎn)建立該跳表時(shí)步驟一令一暫存字為一字集合中其中之一,該字集合為 該輸入字串的所有可能出現(xiàn)的字的集合;步驟二令一結(jié)果節(jié)點(diǎn)為該根節(jié)點(diǎn),將該暫存字記錄于該 跳表中的所述索引字其中之一;步驟三檢查該暫存節(jié)點(diǎn)是否具有一連結(jié)邊緣,其中該連 結(jié)邊緣的標(biāo)示字與該暫存字相同; 步驟四若該暫存節(jié)點(diǎn)具有該連結(jié)邊緣時(shí),將該連結(jié)邊緣 所連結(jié)的次 一 節(jié)點(diǎn)的識(shí)別編號(hào)記錄于該跳表中對(duì)應(yīng)該暫存字的該識(shí)別編號(hào),并跳到步驟十五;以及步驟五若該暫存節(jié)點(diǎn)不具有該連結(jié)邊緣時(shí)步驟六從該關(guān)鍵字樹中找出一符合節(jié)點(diǎn)集合,該符合節(jié)點(diǎn)集合中的一符合節(jié)點(diǎn)的該前路徑字值與該暫存字相同;步驟七將該符合節(jié)點(diǎn)集合中的所述符合節(jié)點(diǎn)反推到具有該符合節(jié)點(diǎn)的該前路徑邊緣的節(jié)點(diǎn);步驟八比對(duì)該符合節(jié)點(diǎn)集合中一個(gè)符合節(jié)點(diǎn)與該暫存節(jié)點(diǎn)的該前路徑字值是否相同;步驟九若該符合節(jié)點(diǎn)的該前路徑字值與該暫存節(jié)點(diǎn)的該前路徑字值不相同時(shí)步驟十比對(duì)該符合節(jié)點(diǎn)是否為該根節(jié)點(diǎn),若為該根節(jié)點(diǎn)時(shí),令該結(jié)果節(jié)點(diǎn)等于該符合節(jié)點(diǎn)最原始未被反推前的節(jié)點(diǎn);以及步驟十一從該符合節(jié)點(diǎn)集合中移除該符合節(jié)點(diǎn);步驟十二變更該符合節(jié)點(diǎn)為該符合節(jié)點(diǎn)集合中的下 一符 合節(jié)點(diǎn),重復(fù)步驟八至步驟十一的動(dòng)作,直至該符合節(jié)點(diǎn)集合 中所有符合節(jié)點(diǎn)都比對(duì)過為止;步驟十三將該暫存節(jié)點(diǎn)反推到具有該暫存節(jié)點(diǎn)的該前路 徑邊緣的節(jié)點(diǎn);以及步驟十四比對(duì)該暫存節(jié)點(diǎn)是否為該根節(jié)點(diǎn),若為該根節(jié) 點(diǎn)時(shí),令該結(jié)果節(jié),泉的識(shí)別編號(hào)記錄于該跳表中對(duì)應(yīng)該暫存字 的該識(shí)別編號(hào),并跳到步驟十五;以及步驟十五變更該暫存字為該字集合中的下一字,重復(fù)步 驟二至步驟十五的動(dòng)作,直至該字集合的所有字都曾經(jīng)為該暫 存字為止。
7. 根據(jù)權(quán)利要求4所述的多模式搜尋的系統(tǒng),其特征在于, 該系統(tǒng)更包括一第二存儲(chǔ)器單元,設(shè)置于該第二處理單元中, 用以暫存部分的該輸入字串。
8. 根據(jù)權(quán)利要求4所述的多模式搜尋的系統(tǒng),其特征在于, 該第一處理單元為一中央處理器。
9. 根據(jù)權(quán)利要求4所述的多模式搜尋的系統(tǒng),其特征在于,該第二處理單元為 一 圖形處理器。
全文摘要
本發(fā)明提供一種多模式搜尋的方法與系統(tǒng),此系統(tǒng)包括第一處理單元、第一存儲(chǔ)器單元及第二處理單元。第一處理單元根據(jù)多個(gè)模式字串來建立關(guān)鍵字樹,并針對(duì)關(guān)鍵字樹中的每一節(jié)點(diǎn)來建立跳表,此跳表包括多個(gè)索引字以及對(duì)應(yīng)這些索引字的多個(gè)識(shí)別編號(hào),這些識(shí)別編號(hào)為處于所針對(duì)的節(jié)點(diǎn)且以這些索引字為索引時(shí),應(yīng)進(jìn)入的下一個(gè)節(jié)點(diǎn)的識(shí)別編號(hào)。第二處理單元根據(jù)第一存儲(chǔ)器單元所儲(chǔ)存的所有節(jié)點(diǎn)的跳表,來比對(duì)一輸入字串中是否包含有上述模式字串之一。本發(fā)明使用第二處理單元及跳表來執(zhí)行搜尋,因此可改進(jìn)系統(tǒng)整體的效能。
文檔編號(hào)G06F17/30GK101158980SQ20071019553
公開日2008年4月9日 申請(qǐng)日期2007年12月4日 優(yōu)先權(quán)日2007年12月4日
發(fā)明者張國峰 申請(qǐng)人:威盛電子股份有限公司