




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、模式匹配的kmp算法Kmp算法是由Knuth、Morris、Pratt與1969年夏天提出的快速串匹配算法,它是由對(duì)BF算法的很大改進(jìn)而成的,這主要體現(xiàn)在每當(dāng)某趟匹配失敗是,指針不必回溯,而是利用已經(jīng)得到的“部分匹配”結(jié)果,將模式向右“滑動(dòng)“若干個(gè)位置后繼續(xù)比較。由于KMP算法避免了BF算法中頻繁的回溯,普遍提高了模式匹配的工作效率,因此它又被稱(chēng)為“不回溯的字符串搜索算法”。假設(shè)有目標(biāo)串T(t0,t1,t2,t3,tm-1)和模式串P(p,p1,p2,p3,pn-1),使用BF算法進(jìn)行模式匹配,當(dāng)進(jìn)行第一輪比較時(shí),若tkpk,則算法結(jié)束本輪比較,如下所示: T t0,t1,t2,tk,tk+1
2、,tn-2,tn-1,tm-2,tm-1 P p0,p1,p2,pk,pk+1,pn-2,pn-1 (第一輪比較結(jié)束)由于在字符串與中第一個(gè)不相等的字符位于處,所以?xún)勺址皞€(gè)字符是相等的。此時(shí),可用字符串P(p0,p1,p2,p3,pk-1) 字符串T(t0,t1,t2,t3,tk-1),于是原目標(biāo)串可轉(zhuǎn)化為T(mén)(p0,p1,p2,p3,pk-1,pk,tm-1)。在進(jìn)行第二輪比較前,算法同樣把字符串P整體向后移動(dòng)一個(gè)字符,此時(shí)字符串T與P之間的關(guān)系如下: T p0,p1,p2,pk-1,pk, tn-2,tn-1,tm-2,tm-1 P p0,p1,p2,pk,pk+1,pn-2,pn-1(
3、第二輪比較)在第二輪比較中算法首先要比較的字符是P中首字符p0與T中第二個(gè)字符p1,若p0與p1相等,則算法順序比較P中第二個(gè)字符p1與T中第三個(gè)字符p2;若不等,則算法仍然把模式串P整體向后移動(dòng)一個(gè)字符,此時(shí)字符串T與P之間的關(guān)系如下 T p0,p1,p2,pk-1,pk, tn-2,tn-1,tm-2,tm-1P p0,pk-3,pk-2,pn-1(第三次比較)算法依照同樣的次序,首先對(duì)P中字符p0與T中字符p2進(jìn)行比較,若相等,則順序比較后續(xù)的字母;若不等,則把字符串P整體向后移動(dòng)一個(gè)字符。仔細(xì)考慮上述過(guò)程,可能會(huì)發(fā)現(xiàn):在第二輪比較開(kāi)始是,首先進(jìn)行比較的字符是p0和p1,其次進(jìn)行的是p1
4、和p2;在第三輪比較開(kāi)始時(shí),首先進(jìn)行比較的是p0與p2,其次進(jìn)行的是 p1和p3。而p0,p1,p2,p3全部是字符串P中的字符,它們之間的關(guān)系可以在調(diào)用字符串匹配算法前就確定下來(lái)。 KMP算法正式利用這種思想,算法在對(duì)字符串進(jìn)行匹配前,先計(jì)算出,模式串P中個(gè)字符的關(guān)系,然后再依據(jù)此關(guān)系對(duì)模式串與目標(biāo)串T進(jìn)行匹配。在上述過(guò)程中,記錄字符串P中各個(gè)字符之間關(guān)系的函數(shù)成為字符串P的失效函數(shù)。 下面是失效函數(shù)獲取的辦法(對(duì)于P=“caatcat”): 首先確定函數(shù)的定義域,失效函數(shù)自變量j的取值范圍是模式串在失配前匹配的字符個(gè)數(shù),那么它的定義域?yàn)閖0,1,2,3,4,5,由此可見(jiàn)失效函數(shù)的定義域是0
5、-len(p)-1。 接著是獲取失效函數(shù)值域的辦法,失效函數(shù)的取值k定義如下 Kk|0<=k<j其中,k是滿(mǎn)足條件p0p1pk=pj-kpj-k+1pj的最大正整數(shù)。這樣的k有可能并不存在,此時(shí)規(guī)定失效函數(shù)的取值為-1。下面是利用上述規(guī)則求字符串P的失效函數(shù)值域的過(guò)程: 當(dāng)j=0時(shí),由于0<=k<0,所以滿(mǎn)足條件的k并不存在,此時(shí)失效函數(shù)的取值為-1,即f(0)=-1.當(dāng)j=1時(shí),k可能的取值為0,由于p0 p1,所以k不能取0,此時(shí)滿(mǎn)足條件的失效函數(shù)的值仍為-1,即f(1)=-1。當(dāng)j=2時(shí),k的可能取值為0,1。由于p0p2且p0p1 p1p2,所以滿(mǎn)足條件的k不存
6、在,即f(2)=-1。當(dāng)j=3時(shí),k可能的取值為0,1,2。由于p0p3,p0p1p2 p3且p0p1p2p1p2 p3。所以滿(mǎn)足條件的k不存在,即f(3)=-1。當(dāng)j=4時(shí),k可能的取值為0,1,2,3。由于p0=p4,p0p1p3 p4,p0p1 p2p2 p3 p4且p0p1 p2 p3p1p2 p3 p4。所以滿(mǎn)足條件的k為0,此時(shí)f(4)=0。當(dāng)j=5時(shí),k可能的取值為0,1,2,3,4。由于p0p5,p0p1= p4p5,p0p1p2p3 p4 p5,p0p1 p2 p3p2 p3 p4 p5且p0p1 p2 p3 p4p1p2 p3 p4 p5,所以f(5)=1;同理可求當(dāng)j=6
7、時(shí),f(6)=-1。求完模式串p的失效函數(shù)后,就可以應(yīng)用KMP算法對(duì)它進(jìn)行匹配。具體的匹配過(guò)程分為兩種情況。假設(shè)在進(jìn)行某一輪比較時(shí),失配的情況發(fā)生在模式p的第j位,那么如果j=0,則讓目標(biāo)的指針前進(jìn)一位,模式串的起始比較地址 回到P0處。否則,在進(jìn)行下一輪的比較時(shí),目標(biāo)指針不發(fā)生回溯,仍指向失配的位置,而模式串的起始比較地址為Pf(j-1)+1.由失效函數(shù)的計(jì)算過(guò)程可見(jiàn),函數(shù)f(j)僅與字符串P有關(guān),而與目標(biāo)串無(wú)關(guān)。所以只需給定模式字符串P,無(wú)論目標(biāo)字符串T的取值是什么,均可應(yīng)用同一個(gè)失配函數(shù)對(duì)它匹配。例子 模式串P=”caatcat”,目標(biāo)串T=”ctcaatcacaatcat”。第一次比較
8、: T c t c a a t c a c a a t c a t P c a a t c a t第二輪比較: T c t c a a t c a c a a t c a t P c a a t c a t第三輪比較: T c t c a a t c a c a a t c a t P c a a t c a t第四輪比較: T c t c a a t c a c a a t c a t P c a a t c a t第一輪比較,模式串與目標(biāo)串在第二個(gè)字符處發(fā)生匹配 。算法檢測(cè)到失陪后結(jié)束本輪比較,并且指針不發(fā)生回溯,仍指向失配位置。由于失配發(fā)生在第二個(gè)字符處,此時(shí)j=1,所以模式匹配P在下一
9、輪匹配時(shí)的起始比較地址是P f(1-1)+1,即p0。第二輪比較中,由于模式字符串P所在的第一個(gè)字符處發(fā)生失配,此時(shí)j=0,所以讓目標(biāo)的指針前進(jìn)一位,模式的其實(shí)比較位置回到p0。接著進(jìn)行第三輪比較。模式串P中的第7個(gè)字符發(fā)生失配,此時(shí)j=6。可知下一輪匹配的起始比較位置為P f(6-1)+1,即p2。目標(biāo)指針不發(fā)生回溯,仍指向失配位置。接著進(jìn)行第四輪匹配,第四輪匹配成功。 T c t c a a t c a c a a t c a tP c a a t c a t (成功)#include<stdio.h>#include<string.h>char str1000,s
10、t1000;int next1000;void getf()int j=0,k=-1,m;next0=-1;m=strlen(st);while(j<m)if(k=-1|stj=stk)j+;k+;if(stj!=stk)nextj=k;else nextj=nextk;else k=nextk;for(j=0;j<m;j+)printf("%d ",nextj);int KMP()int i=0,j=0;memset(next,0,sizeof(next);getf();int m=strlen(str);int n=strlen(st);while(i<m&&
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 五年級(jí)英語(yǔ)下冊(cè) Module 1 Unit 2 She didn't have a television教學(xué)設(shè)計(jì)設(shè)計(jì)(pdf) 外研版(三起)
- 人教部編版五年級(jí)上冊(cè)16 太陽(yáng)教案及反思
- 會(huì)議簽到表(模版)
- 初中語(yǔ)文口語(yǔ)交際 討論教學(xué)設(shè)計(jì)
- 人教部編版七年級(jí)下冊(cè)寫(xiě)作 文從字順教學(xué)設(shè)計(jì)及反思
- 五年級(jí)信息技術(shù)下冊(cè) 第三課 節(jié)約用電1教學(xué)設(shè)計(jì) 龍教版
- 人教版地理七上第五章《發(fā)展與合作》同步教學(xué)設(shè)計(jì)
- 2024吉林水投集團(tuán)公司年輕干部競(jìng)聘上崗35個(gè)崗位筆試參考題庫(kù)附帶答案詳解
- 2024華潤(rùn)集團(tuán)|總部辦公室/人力資源部/財(cái)務(wù)部崗位公開(kāi)招聘若干人筆試參考題庫(kù)附帶答案詳解
- 初中語(yǔ)文人教部編版九年級(jí)上冊(cè)周總理你在哪里教學(xué)設(shè)計(jì)
- 寧夏回族自治區(qū)銀川市一中2025屆高三下學(xué)期模擬訓(xùn)練數(shù)學(xué)試題
- 狗咬傷病人護(hù)理
- 湘豫名校聯(lián)考2024-2025學(xué)年高三春季學(xué)期第二次模擬考試物理試題及答案
- 質(zhì)量和食品安全管理手冊(cè)有效版
- 熱點(diǎn)主題作文寫(xiě)作指導(dǎo):數(shù)字工具(審題指導(dǎo)與例文)
- 大學(xué)生法學(xué)試題題庫(kù)及答案
- 2025-2030中國(guó)數(shù)據(jù)要素市場(chǎng)發(fā)展前景及趨勢(shì)預(yù)測(cè)分析研究報(bào)告
- 2024年福建省漳州市醫(yī)院招聘工作人員考試真題
- 腫瘤專(zhuān)科??荚囶}及答案
- 2025年2月時(shí)事政治100題及參考答案
- 2025年湖南鐵道職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)帶答案
評(píng)論
0/150
提交評(píng)論