kmp模式匹配算法探討

kmp模式匹配算法探討

ID:30619376

大小:17.70 KB

頁數(shù):5頁

時間:2019-01-01

kmp模式匹配算法探討_第1頁
kmp模式匹配算法探討_第2頁
kmp模式匹配算法探討_第3頁
kmp模式匹配算法探討_第4頁
kmp模式匹配算法探討_第5頁
資源描述:

《kmp模式匹配算法探討》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫

1、從本學(xué)科出發(fā),應(yīng)著重選對國民經(jīng)濟具有一定實用價值和理論意義的課題。課題具有先進性,便于研究生提出新見解,特別是博士生必須有創(chuàng)新性的成果KMP模式匹配算法探討摘要介紹了KMP算法并與樸素查找算法進行了比較,提出了前綴函數(shù)的概念,并利用改進的前綴函數(shù)改進KMP算法,最后結(jié)合KMP的改進算法給出了多次匹配的算法。關(guān)鍵詞串匹配,前綴函數(shù),KMP算法在計算機科學(xué)領(lǐng)域,串的模式匹配算法一直都是研究焦點之一。在拼寫檢查、語言翻譯、數(shù)據(jù)壓縮、搜索引擎、網(wǎng)絡(luò)入侵檢測、計算機病毒特征碼匹配以及DNA序列匹配等應(yīng)用中,都需要進行串匹配。串匹配就是在主串中查找模式串的一個或所有出現(xiàn)。在本文中主串表示

2、為S=s1s2s3…sn,模式串表示為T=t1t2…tm。串匹配從方式上可分為精確匹配、模糊匹配、并行匹配等,著名的匹配算法有BF算法、KMP算法、BM算法及一些改進算法。本文主要在精確匹配方面對KMP算法進行了討論并對它做一些改進以及利用改進的KMP來實現(xiàn)多次模式匹配。課題份量和難易程度要恰當,博士生能在二年內(nèi)作出結(jié)果,碩士生能在一年內(nèi)作出結(jié)果,特別是對實驗條件等要有恰當?shù)墓烙嫛谋緦W(xué)科出發(fā),應(yīng)著重選對國民經(jīng)濟具有一定實用價值和理論意義的課題。課題具有先進性,便于研究生提出新見解,特別是博士生必須有創(chuàng)新性的成果最簡單的樸素串匹配算法(BF算法)是從主串的第一個字符和模式串的

3、第一個字符進行比較,若相等則繼續(xù)逐個比較后續(xù)字符,否則從主串的第二個字符起再重新和模式串的第一個字符進行比較。依次類推,直至模式串和主串中的一個子串相等,此時稱為匹配成功,否則稱為匹配失敗。樸素模式匹配算法匹配失敗重新比較時只能向前移一個字符,若主串中存在和模式串只有部分匹配的多個子串,匹配指針將多次回溯,而回溯次數(shù)越多算法的效率越低,它的時間復(fù)雜度一般情況下為O((n-m+1)m),最壞的情況下為O(m*n),最好的情況下為O(m+n)。KMP模式匹配算法正是針對上述算法的不足做了實質(zhì)性的改進。其基本思想是:當一趟匹配過程中出現(xiàn)失配時,不需回溯主串,而是充分利用已經(jīng)得到的部

4、分匹配所隱含的若干個字符,過濾掉那些多余的比較,將模式串向右“滑動”盡可能遠的一段距離后,繼續(xù)進行比較,從而提高模式匹配的效率,該算法的時間復(fù)雜度為O(m+n)。那么如何確定哪些是多余的比較?在KMP算法中通過引入前綴函數(shù)f(x)來確定每次匹配不需要比較的字符,保證了匹配始終向前進行,無須回溯。假設(shè)主串為s1s2,sn.,模式串為t1t2,tm.,其中m≦n,從si+1開始的子串遇到一個不完全的匹配,使得:()如果我們能確定一個最小的整數(shù),使得:()其中,所以確定i'等價于確定k,這里的k值就是我們要求的前綴函數(shù)f(x)。由式和中K值與主串s無關(guān),只與給定的模式串t中與主串匹

5、配的q有關(guān),即k=f(q),f(q)=max{i

6、0iq且t[1..i]是t[1..q]的后綴}()確定KMP前綴函數(shù)的算法如下:#defineMAXSIZE100Typedefunsignedcharstring[MAXSIZE+1];//0號單元用來存放串的長度voidf(sstringt,int*array){m=t[0];//m為當前模式串的長度array=(int*)malloc((m+1)*sizeof(int));//0號元不用課題份量和難易程度要恰當,博士生能在二年內(nèi)作出結(jié)果,碩士生能在一年內(nèi)作出結(jié)果,特別是對實驗條件等要有恰當?shù)墓烙?。從本學(xué)科出發(fā),應(yīng)著重選對

7、國民經(jīng)濟具有一定實用價值和理論意義的課題。課題具有先進性,便于研究生提出新見解,特別是博士生必須有創(chuàng)新性的成果array[1]=0;k=0;for(q=2;q{while(k>0&&t[k+1]!=t[q])k=array[k];if(t[k+1]==t[q])k=k+1;array[q]=k;}}關(guān)于KMP算法的前綴函數(shù)f(x)的示例見表1。表1模式串a(chǎn)baabcacITiabaabcacf(i)當模式串中有i個字符串匹配成功,第i+1個字符不匹配時,則從i-f(i)個字符重新開始比較,這樣不僅無須回溯,而且一次可以向前滑動i-f(i)個字符,大大提高了模式匹配的效率。下面

8、給出樸素匹配算法和KMP匹配算法的比較,見表2。表樸素匹配算法和KMP匹配算法比較表樸素算法KMP算法時間復(fù)雜度O((n-m+1)m)O(m+n)向前移動字符個數(shù)1q-f(q)回溯次數(shù)q-1無其中:n為主串長度,m為模式串長度,q為匹配成功的字符個數(shù)。2KMP算法的改進在KMP算法的實際應(yīng)用中,發(fā)現(xiàn)該算法也存在著不足,結(jié)合下面的表一來論述KMP模式匹配算法的改進。假設(shè)模式串前4個字符與主串的第i+1..i+4匹配成功,第5個字符匹配失敗,此時前綴函數(shù)f(4)=1,下一次匹配將從第i+4開始,并直接將模式

當前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。