欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

多模式的串匹配方法和裝置的制造方法

文檔序號(hào):9667361閱讀:736來(lái)源:國(guó)知局
多模式的串匹配方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明實(shí)施例涉及計(jì)算機(jī)數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及一種多模式的串匹配方法 和裝置。
【背景技術(shù)】
[0002] 串匹配問(wèn)題是計(jì)算機(jī)科學(xué)領(lǐng)域中最為經(jīng)常遇到的一類問(wèn)題。串匹配算法在信息減 弱、分子生物學(xué)、數(shù)據(jù)壓縮等方面有著非常廣泛的應(yīng)用。串匹配算法可以被分為單模式串匹 配算法和多模式串匹配算法。而在多模式串匹配算法中,Aho-Corasick算法和Wu-Manber 算法是最為經(jīng)典的兩種算法。
[0003] Aho-Corasick算法簡(jiǎn)稱AC算法,是KMP單模式串匹配算法處理多模式串的擴(kuò)展算 法。AC算法采用有限狀態(tài)自動(dòng)機(jī)來(lái)組織所有的模式串,集成了KMP算法,通過(guò)計(jì)算最長(zhǎng)前綴 移動(dòng)窗口和匹配位置,以減少遍歷所有匹配窗口的循環(huán)次數(shù)。
[0004] 但是,AC算法在執(zhí)行過(guò)程中,是以文本串的每個(gè)字符為單位,逐一進(jìn)行計(jì)算。這就 造成了在運(yùn)行AC算法進(jìn)行串匹配時(shí),比較次數(shù)較多,運(yùn)行效率不高。
[0005] Wu-Manber算法是BM算法在處理多模式串問(wèn)題時(shí)使用的一種派生算法,它的主要 特點(diǎn)是集成了BM算法中不良字符轉(zhuǎn)移機(jī)制,利用塊字符擴(kuò)展了不良字符的轉(zhuǎn)移效果,同時(shí) 利用散列表來(lái)減少匹配過(guò)程的計(jì)算量。
[0006] 在Wu-Manber算法執(zhí)行時(shí),當(dāng)前綴確認(rèn)匹配之后,需要進(jìn)行字符串其余部分的驗(yàn) 證,而且,這種驗(yàn)證是模式串的全長(zhǎng)度驗(yàn)證。顯然,這種模式串的全長(zhǎng)度驗(yàn)證會(huì)導(dǎo)致對(duì)原始 文本內(nèi)容提前的比對(duì)。但是在Wu-Manber算法中,并沒(méi)有對(duì)這種提前發(fā)生的比對(duì)進(jìn)行結(jié)果 記錄,造成尋找下一個(gè)可能的匹配位置時(shí)仍然要依賴再一次的比較操作,造成算法性能的 下降。

【發(fā)明內(nèi)容】

[0007] 針對(duì)上述技術(shù)問(wèn)題,本發(fā)明實(shí)施例提供了一種多模式的串匹配方法和裝置,以解 決AC算法中窗口滑動(dòng)慢,以及Wu-Manber算法中比較結(jié)果不留存的問(wèn)題。
[0008] 第一方面,本發(fā)明實(shí)施例提供了一種多模式的串匹配方法,所述方法包括:
[0009] 根據(jù)模式串創(chuàng)建Aho-Corasick自動(dòng)機(jī);
[0010] 根據(jù)模式串創(chuàng)建移動(dòng)表,其中所述移動(dòng)表記錄了所述模式串中字符塊的位移量;
[0011] 若文本串的滑動(dòng)窗口未滑動(dòng)至所述文本串的末尾,根據(jù)所述移動(dòng)表尋找可能的匹 配位置,所述滑動(dòng)窗口的長(zhǎng)度至少是2 ;
[0012] 對(duì)根據(jù)所述移動(dòng)表找到的可能的匹配位置,根據(jù)所述Aho-Corasick自動(dòng)機(jī)進(jìn)行 匹配驗(yàn)證;
[0013] 根據(jù)所述移動(dòng)表繼續(xù)尋找下一個(gè)可能的匹配位置,直至所述滑動(dòng)窗口滑動(dòng)至所述 文本串的末尾。
[0014] 第二方面,本發(fā)明實(shí)施例還提供了一種多模式的串匹配裝置,所述裝置包括:
[0015] 自動(dòng)機(jī)創(chuàng)建模塊,用于根據(jù)模式串創(chuàng)建Aho-Corasick自動(dòng)機(jī);
[0016] 移動(dòng)表創(chuàng)建模塊,用于根據(jù)模式串創(chuàng)建移動(dòng)表,其中所述移動(dòng)表記錄了所述模式 串中字符塊的位移量;
[0017] 位置尋找模塊,用于若文本串的滑動(dòng)窗口未滑動(dòng)至所述文本串的末尾,根據(jù)所述 移動(dòng)表尋找可能的匹配位置,所述滑動(dòng)窗口的長(zhǎng)度至少是2 ;
[0018] 匹配驗(yàn)證模塊,用于對(duì)根據(jù)所述移動(dòng)表找到的可能的匹配位置,根據(jù)所述 Aho-Corasick自動(dòng)機(jī)進(jìn)行匹配驗(yàn)證;
[0019] 重復(fù)尋找模塊,用于根據(jù)所述移動(dòng)表繼續(xù)尋找下一個(gè)可能的匹配位置,直至所述 滑動(dòng)窗口滑動(dòng)至所述文本串的末尾。
[0020] 本發(fā)明實(shí)施例提供的多模式的串匹配方法和裝置,利用移動(dòng)表尋找文本串與多 個(gè)模式串之間可能的匹配位置,再利用Aho-Corasick自動(dòng)機(jī)對(duì)所述可能的匹配位置進(jìn)行 匹配驗(yàn)證,綜合了AC算法及Wu-Manber算法的優(yōu)點(diǎn),解決了AC算法中窗口滑動(dòng)慢,以及 Wu-Manber算法中比較結(jié)果不留存的問(wèn)題,提高了串匹配的執(zhí)行效率。
【附圖說(shuō)明】
[0021] 通過(guò)閱讀參照以下附圖所作的對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本發(fā)明的其它 特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯:
[0022] 圖1是本發(fā)明第一實(shí)施例提供的多模式的串匹配方法的流程圖;
[0023] 圖2是本發(fā)明第一實(shí)施例提供的Aho-Corasick自動(dòng)機(jī)的結(jié)構(gòu)示意圖;
[0024] 圖3是本發(fā)明第二實(shí)施例提供的多模式的串匹配方法中自動(dòng)機(jī)創(chuàng)建操作的流程 圖;
[0025] 圖4是本發(fā)明第三實(shí)施例提供的多模式的串匹配裝置的結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0026] 下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說(shuō)明。可以理解的是,此處所描 述的具體實(shí)施例僅僅用于解釋本發(fā)明,而非對(duì)本發(fā)明的限定。另外還需要說(shuō)明的是,為了便 于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部結(jié)構(gòu)。
[0027] 第一實(shí)施例
[0028] 本實(shí)施例提供了多模式的串匹配方法的一種技術(shù)方案。在該技術(shù)方案中,作為主 字符串的文本串一次與至少兩個(gè)模式串進(jìn)行匹配。并且,所述文本串及所述模式串的內(nèi)容 均出自于預(yù)先定義的一個(gè)有限的符號(hào)集合。
[0029] 參見(jiàn)圖1,所述多模式的串匹配方法包括:
[0030] S11,根據(jù)模式串創(chuàng)建Aho-Corasick自動(dòng)機(jī)。
[0031] 所述Aho-Corasick自動(dòng)機(jī)是AC算法中必須使用的一種數(shù)據(jù)結(jié)構(gòu),它屬于有限狀 態(tài)自動(dòng)機(jī)(Finitestatemachine,FSA)中的一種。所述Aho-Corasick自動(dòng)機(jī)是Aho等人 對(duì)trie結(jié)構(gòu)進(jìn)行擴(kuò)展后形成的,其基本結(jié)構(gòu)是由所有模式串所構(gòu)成的樹形結(jié)構(gòu)。與傳統(tǒng)的 tire結(jié)構(gòu)相比,每個(gè)節(jié)點(diǎn)增加了一個(gè)轉(zhuǎn)移指針。所述轉(zhuǎn)移指針指向每個(gè)狀態(tài)的失效節(jié)點(diǎn),表 示該節(jié)點(diǎn)對(duì)應(yīng)子串在KMP算法中根據(jù)最長(zhǎng)前綴計(jì)算出的轉(zhuǎn)移節(jié)點(diǎn)。圖2示出了由模式串集 合P= {he,she,his,hers}所構(gòu)成的Aho-Corasick自動(dòng)機(jī)。
[0032] 具體的,所述Aho-Corasick自動(dòng)機(jī)的創(chuàng)建過(guò)程與現(xiàn)有的AC算法中Aho-Corasick 自動(dòng)機(jī)的創(chuàng)建過(guò)程相同。具體的,可以通過(guò)分別創(chuàng)建所述模式串的轉(zhuǎn)移函數(shù)、失效函數(shù)以及 輸出函數(shù),實(shí)現(xiàn)對(duì)所述Aho-Corasick自動(dòng)機(jī)的創(chuàng)建。
[0033] S12,根據(jù)模式串創(chuàng)建移動(dòng)表,其中所述移動(dòng)表記錄了所述模式串中字符塊的位移 量。
[0034] 所述移動(dòng)表也被稱為shift表,是在Wu-Manber算法中必須使用的一種表。它 與哈希(hash)表及前綴(prefix)表共同形成了Wu-Manber算法獨(dú)有的查詢?cè)~典,使得 mi-Manber算法中可以快速的進(jìn)行窗口的滑動(dòng)而不需要針對(duì)每個(gè)字符進(jìn)行比較,并且有效 的避免一些不必要的匹配的發(fā)生。
[0035] 所述移動(dòng)表是在模式集中取每個(gè)模式串的前B個(gè)字符,計(jì)算該字符塊的哈希值對(duì) 應(yīng)表項(xiàng)的跳轉(zhuǎn)值。通過(guò)所述移動(dòng)表,整個(gè)字符查找的過(guò)程就變成了根據(jù)詞表進(jìn)行跳轉(zhuǎn)的過(guò) 程。所述移動(dòng)表也有自己的默認(rèn)跳轉(zhuǎn)值,與所有模式串中最短長(zhǎng)度有關(guān)系。因此,假設(shè)模式 串集合中所有模式串的長(zhǎng)度都很長(zhǎng)的時(shí)候,執(zhí)行串匹配的跳轉(zhuǎn)速度會(huì)很快。
[0036] 建立所述Aho-Corasick自動(dòng)機(jī)的步驟以及建立所述移動(dòng)表的步驟是真正開始執(zhí) 行串匹配運(yùn)算之前的準(zhǔn)備步驟。但是,由于本實(shí)施例提供的方法在執(zhí)行串匹配運(yùn)算時(shí)需要 使用上述兩種數(shù)據(jù)結(jié)構(gòu),因此上述兩種數(shù)據(jù)結(jié)構(gòu)的創(chuàng)建必須在真正執(zhí)行串匹配操作之前完 成。
[0037]S13,若文本串的滑動(dòng)窗口未滑動(dòng)至所述文本串的末尾,根據(jù)所述移動(dòng)表尋找可能 的匹配位置,所述滑動(dòng)窗口的長(zhǎng)度至少是2。
[0038] 利用所述滑動(dòng)窗口在所述文本串上的滑動(dòng),找尋所述文本串上可能的匹配位置。 而且,所述滑動(dòng)窗口的長(zhǎng)度至少是2。
[0039] 優(yōu)選的,可以通過(guò)查找所述移動(dòng)表中位移量是0的位置,并將位移量為0的位置作 為可能的匹配位置。
[0040] S14,對(duì)根據(jù)所述移動(dòng)表找到的可能的匹配位置,根據(jù)所述Aho-Corasick自動(dòng)機(jī) 進(jìn)行匹配驗(yàn)證。
[0041] 具體的,根據(jù)所述Aho-Corasick自動(dòng)機(jī)進(jìn)行匹配驗(yàn)證就是在所述可能的匹配位 置上運(yùn)行AC算法,從而驗(yàn)證所述可能的匹配位置是不是與模式串真正匹配。
[0042] S15,根據(jù)所述移動(dòng)表繼續(xù)尋找下一個(gè)可能的匹配位置,直至所述滑動(dòng)窗口滑動(dòng)至 所述文本串的末尾。
[0043] 在執(zhí)行了對(duì)一個(gè)可能的匹配位置的匹配驗(yàn)證之后,根據(jù)所述移動(dòng)表查找下一個(gè)可 能的匹配位置,并對(duì)所述下一個(gè)可能的匹配位置進(jìn)行匹配驗(yàn)證。當(dāng)所述滑動(dòng)串口被滑動(dòng)至 所述文本串的末尾時(shí),所述多模式的串匹配方法執(zhí)行結(jié)束。
[0044] 本實(shí)施例通過(guò)根據(jù)模式串創(chuàng)建Aho-Corasick自動(dòng)機(jī),根據(jù)模式串創(chuàng)建移動(dòng)表,若 文本串的滑動(dòng)窗口未滑動(dòng)至所述文本串的末尾,
當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
山东| 蒲江县| 陆丰市| 安仁县| 葵青区| 儋州市| 阜阳市| 绥化市| 新野县| 什邡市| 枞阳县| 广灵县| 常熟市| 历史| 大庆市| 蒙山县| 积石山| 义乌市| 江华| 寻乌县| 平舆县| 庄浪县| 神池县| 新蔡县| 枣庄市| 阳朔县| 分宜县| 茌平县| 章丘市| 彰武县| 鹤山市| 湾仔区| 永嘉县| 景谷| 宁河县| 磐安县| 桐乡市| 晋中市| 开封市| 忻州市| 鲁甸县|