新四季網

一種基於Sunday算法的字符搜索方法與流程

2023-10-09 00:23:09 2


本發明涉及字符搜索,特別是一種基於sunday算法的字符搜索方法,用於計算機網絡領域中對字符進行搜索。



背景技術:

字符串是計算機科學中常見的基本概念,搜索問題也是計算機科學中的基本問題。隨著網際網路的日漸龐大,信息也是越來越多,如何在海量的信息中快速查找自己所要的信息是網絡搜索研究的熱點所在;在這其中,字符串匹配算法起著非常重要的作用,一個高效的字符串匹配算法,可以極大的提高搜索的效率和質量。字符串匹配在網絡領域有著廣泛的應用。比如,拼寫檢查、語言翻譯、數據壓縮、搜尋引擎、網絡入侵檢測等。

現有的常見的字符串匹配算法有bruteforce、kmp、boyermoore、sunday、robin_karp和bitap等。其中,sunday算法是平均效率較高的一種匹配方案。

sunday算法是danielm.sunday於1990年提出的一種字符串模式匹配算法。其核心思想是:在匹配過程中,模式串並不被要求一定要按從左向右進行比較還是從右向左進行比較,它在發現不匹配時,算法能跳過儘可能多的字符以進行下一步的匹配,從而提高了匹配效率。

sunday算法思想跟bm算法很相似,在匹配失敗時關注的是文本串中參加匹配的最末位字符的下一位字符。如果該字符沒有在匹配串中出現則直接跳過,即移動步長=匹配串長度+1;否則,同bm算法一樣其移動步長=匹配串中最右端的該字符到末尾的距離+1。

sunday算法在模式串很長的時候(很多實際應用中,模式串都會很長),文本窗口外下一個字符在模式串中出現的概率會很高,這樣會增加很多無效匹配,由此sunday算法的效率會顯著降低。



技術實現要素:

基於以上技術問題,本發明提供了一種基於sunday算法的字符搜索方法,從而解決了在字符搜索中產生很多無效匹配的技術問題。

本發明的技術方案如下:

一種基於sunday算法的字符搜索方法,包括以下步驟:

步驟1:利用模式串中相鄰兩字符的信息構建輔助數組,所述模式串為待匹配的字符串;

步驟2:文本窗口與文本字符串左對齊,所述文本字符串為待搜索文本,所述文本窗口在所述文本字符串上滑動;利用所述輔助數組判斷所述文本窗口內最後兩個字符是否在模式串中出現;若未出現,跳轉到步驟4;若出現,則將模式串中出現的字符與所述最後兩個字符對齊,判斷模式串與文本字符串對應位置上的字符是否匹配,若匹配,則匹配成功程序結束;若不匹配,則跳轉到步驟3;

步驟3:採用sunday算法進行下一次的匹配和跳轉,若採用sunday算法匹配成功,則程序結束;若採用sunday算法匹配失敗,則判斷sunday算法跳轉的長度是否超過文本窗口的長度,若超過文本窗口長度,則跳轉到步驟4;若未超過文本窗口長度,則重複步驟3;

步驟4:文本窗口向右移動j個字符長度,將文本窗口中的末位字符和文本窗外與所述末位字符相鄰的字符作為組合字符,利用輔助數組判斷所述組合字符是否在模式串中出現;若出現,跳轉到步驟5;若未出現,判斷文本窗口是否超出文本字符串,若超出,則匹配失敗程序結束;若未超出,重複步驟4的內容;其中模式串的長度和文本窗口的長度均為j個字符長度;

步驟5:模式串中出現的字符與所述組合字符對齊,判斷模式串與文本字符串對應位置上的字符是否匹配;若匹配則匹配成功程序結束;若不匹配,跳轉到步驟3。

進一步的,步驟1中輔助數組構建方式如下:

s201:利用模式串中字符的ascii碼值和設定的index值,計算模式串中相鄰兩字符的哈希值,採用如下公式:

h[i]=a[i]×index+a[i+1]×(index+1)(1)

其中,i表示模式串中字符的位置序號;h[i]表示模式串中相鄰兩字符的哈希值;a[i]表示第i個字符的ascii碼值;

s202:利用所有字符兩兩組合產生的最大哈希值作為輔助數組中元素的個數,且字符兩兩組合產生的哈希值的大小為所述元素的位置序號;

s203:將s201中計算出的哈希值映射到輔助數組中,具體方式如下:

哈希值h[i]對應位置上的元素為1,若模式串中兩組及以上相鄰兩字符組合產生的哈希值h[i]相同,則將該哈希值h[i]對應位置上的元素設為大於1的數,輔助數組中其餘位置上的元素均為0。

進一步的,所述利用輔助數組進行判斷方法為:計算文本字符串中需要判斷的相鄰兩字符的哈希值,利用該哈希值查找輔助數組中對應位置上的元素,若元素為1,則代表文本字符串中相鄰兩字符與模式串匹配或出現在模式串中;若元素為0,則代表文本字符串中相鄰兩字符與模式串不匹配或未出現在模式串中;若元素為大於1的數,則代表該字符組合與其餘字符組合的哈希值相同,則進行步驟3的內容。

綜上所述,由於採用了上述技術方案,本發明的有益效果是:

採用字符的ascii值和index值進行哈希值的計算,簡便易行;利用組合字符形式來進行匹配,可有效的降低無效匹配的概率,從而提高sunday算法的效率。

模式串一旦確定,通過預處理得出輔助數組後再匹配,提高在實際應用中的使用效率;比如網絡入侵中惡意代碼的檢測、論文檢索中大段文本的搜索,病毒多特徵掃描,由於這些應用的模式串一般都很長,所以在本發明的應用上能有較大效率的提升。

附圖說明

圖1是本發明的流程圖;

圖2是本發明的實驗結果圖

具體實施方式

本說明書中公開的所有特徵,除了互相排斥的特徵和/或步驟以外,均可以以任何方式組合。

下面結合附圖對本發明作詳細說明。

一種基於sunday算法的字符搜索方法,包括以下步驟:

步驟1:利用模式串中相鄰兩字符的信息構建輔助數組,所述模式串為待匹配的字符串;

輔助數組構建方式如下:

s201:利用模式串中字符的ascii碼值和設定的index值,計算模式串中相鄰兩字符的哈希值,採用如下公式:

h[i]=a[i]×index+a[i+1]×(index+1)(2)

其中,i表示模式串中字符的位置序號;h[i]表示模式串中相鄰兩字符的哈希值;a[i]表示第i個字符的ascii碼值;

s202:利用所有字符兩兩組合產生的最大哈希值作為輔助數組中元素的個數,且字符兩兩組合產生的哈希值的大小為所述元素的位置序號;

s203:將s201中計算出的哈希值映射到輔助數組中,具體方式如下:

哈希值h[i]對應位置上的元素為1,若模式串中兩組及以上相鄰兩字符組合產生的哈希值h[i]相同,則將該哈希值h[i]對應位置上的元素設為大於1的數,輔助數組中其餘位置上的元素均為0。

步驟2:文本窗口與文本字符串左對齊,所述文本字符串為待搜索文本,所述文本窗口在所述文本字符串上滑動;計算所述文本窗口內最後兩個字符的哈希值,在輔助數組中,若計算出的哈希值對應位置上的元素為0,則代表最後兩個字符未出現在模式串中,跳轉到步驟4;若計算出的哈希值對應位置上的元素為1,則代表則代表最後兩個字符出現在模式串中,則將模式串中出現的字符與所述最後兩個字符對齊,判斷模式串與文本字符串對應位置上的字符是否匹配,若匹配,則匹配成功程序結束;若不匹配,則跳轉到步驟3;若計算出的哈希值對應位置上的元素為大於1的值,則代表存在另外組合字符的哈希值與該哈希值相同,為減小錯誤率,跳轉到步驟3。

步驟3:採用sunday算法進行下一次的匹配和跳轉,若採用sunday算法匹配成功,則程序結束;若採用sunday算法匹配失敗,則判斷sunday算法跳轉的長度是否超過文本窗口的長度,若超過文本窗口長度,則跳轉到步驟4;若未超過文本窗口長度,則重複步驟3;

步驟4:文本窗口向右移動j個字符長度,將文本窗口中的末位字符和文本窗外與所述末位字符相鄰的字符作為組合字符,計算所述組合字符的哈希值,在輔助數組中,若計算出的哈希值對應位置上的元素為0,則代表最後兩個字符未出現在模式串中,判斷文本窗口是否超出文本字符串,若超出,則匹配失敗程序結束;若未超出,重複步驟4的內容;若計算出的哈希值對應位置上的元素為1,則代表則代表最後兩個字符出現在模式串中,跳轉到步驟5;若計算出的哈希值對應位置上的元素為大於1的值,則代表存在另外組合字符的哈希值與該哈希值相同,為減小錯誤率,跳轉到步驟3;其中模式串的長度和文本窗口的長度均為j個字符長度;

步驟5:模式串中出現的字符與所述組合字符對齊,判斷模式串與文本字符串對應位置上的字符是否匹配;若匹配則匹配成功程序結束;若不匹配,跳轉到步驟3。

本發明的工作原理是:構建輔助數組,文本窗口在文本字符串上滑動,滑動長度為模式串的長度;將文本窗口的最後一個字符與文本窗外的下一個字符進行組合,通過輔助數組來判斷該字符組合是否出現在模式串中,以此來對字符串進行匹配。

下面,結合具體實施例來對本發明做進一步詳細說明。

具體實施例

具體實施例1

以下為本發明c語言的實現程序:

具體實施例2

以下為本發明的實驗結果圖,具體為與sunday算法的效率比較圖。

生成10kb的隨機純英文字母和數字作為文本字符串,選取特定特點的字符串作模式串,用原sunday算法和本發明採用的算法進行搜索,比較它們的實際效率,重複調用1000次求總時間(單位:毫秒),得出下列統計圖。

圖中,a代表sunday算法,b代表本發明採用的算法;

柱體1採用的模式串為:abcdef;

柱體2採用模式串為:abcdefghijklmnopqrstuvwxyz;

柱體3採用模式串為:

abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz;

柱體4採用模式串為:

abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz1234567

如上所述即為本發明的實施例。本發明不局限於上述實施方式,任何人應該得知在本發明的啟示下做出的結構變化,凡是與本發明具有相同或相近的技術方案,均落入本發明的保護範圍之內。

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀