




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
基于MATLAB《數(shù)據(jù)結(jié)構(gòu)與算法》?延邊大學(xué)信息管理專業(yè)(13級)?崔基哲KMP模式匹配算法MATLAB編程之基礎(chǔ)算法3串的模式匹配算法一、基本概念1、模式匹配(定位)設(shè)有主串S和子串T(將S稱為目標(biāo)串,將T稱為模式串),在主串S中,從位置start開始查找,如若在主串S中找到一個(gè)與子串T相等的子串,則返回T的第一個(gè)字符在主串中的位置,否則返回-1。2、算法目的確定主串中所含子串第一次出現(xiàn)的位置(定位)3、算法種類KMP算法KMP模式匹配算法?
它是:在一個(gè)長字符串中匹配一個(gè)短子串的無回溯算法。定義?
s:模式串,m:模式串的長度?
text:要匹配的字符串,n:text的長度?
設(shè)text:x1,x2,…xn,s:a1,a2,…am,則當(dāng)存使xi+k=ak(k=1,2,…m)時(shí),認(rèn)為text與模式串匹配,當(dāng)然text也可能與模式串有多處匹
配?
例如:text:abcabca,s:abc則text與s匹配位置有3和6KMP算法?作為一種無回溯的算法,它是高效的,待會(huì)兒你將看到它的時(shí)間復(fù)雜度為O(m+n),空間復(fù)雜度也為O(m+n)?而且,它很容易理解,代碼也很短定義?
next:為對應(yīng)模式串的數(shù)組?
設(shè)字符串為s1s2s3...sm,其中s1,s2,s3,...si,...sm均是字符,則next[i]=m,當(dāng)且僅當(dāng)滿足如下條件:字符串s1s2...smequals字符串s(i-m+1)...si-1
si并且
s1s2...sm
s(m+1)unequals
s(i-m)s(i-m+1)...si-1
si。?
通俗地講,next[i]保存了以s[i]為結(jié)尾的后與模式串前綴的最長匹配數(shù)。KMP算法的運(yùn)行過程?
我們用兩個(gè)指針i和j分別表示,A[i-j+1..i]與B[1..j]完全也就是說,i是不斷增加的,隨著i的增加j相應(yīng)地變化,且j滿足以A[i]結(jié)尾的長度為j的字符串正好匹配B串的前j個(gè)字符(j當(dāng)然越大越好),現(xiàn)在需要檢驗(yàn)A[i+1]和B[j+1]的關(guān)系。?
如果a[i+1]==b[j+1],i和j各加1,什么時(shí)候j==m,就說B是A的子串(B串已經(jīng)整完了)KMP算法的運(yùn)行過程?
如果a[i+1]!=b[j+1],這時(shí)候怎么辦??
i
=
1
2
3
4
5
6
7
8
9
……?
A
=
a
b
a
b
a
b
a
a
b
a
b
…?
B
=
a
b
a
b
a
c
bj
=
1
2
3
4
5
6
7j=5時(shí),a[i+1]!=b[j+1],我們要把j改成比它小的值j‘。改多少合適呢?KMP算法的運(yùn)行過程?
i
=
1
2
3
4
5
6
7
8
9
……?
A
=
a
b
a
b
a
b
a
a
b
a
b
…?
B
=
a
b
a
b
a
c
bj
=
1
2
3
4
5
6
7?
記住,我們要保持A[i-j+1..i]與B[1..j]完全相等,因而j’最大的數(shù)使a[i-j’+1..i]與B[1..j’]完全相等.KMP算法的運(yùn)行過程?
i
=
1
2
3
4
5
6
7
8
9
……?
A
=
a
b
a
b
a
b
a
a
b
a
b
…?
B
=
a
b
a
b
a
c
bj
=
1
2
3
4
5
6
7?
顯然是求一個(gè)最長的以i為末尾的后綴要與B的前綴匹配。由于A[i-j+1..i]與B[1..j]完全相等,故令j’=next[j]即可性質(zhì)保留KMP算法的運(yùn)行過程?
i
=
1
2
3
4
5
6
7
8
9
……?
A
=
a
b
a
b
a
b
a
a
b
a
b
…?
B
=
a
b
a
b
a
c
bj
=
1
2
3
4
5
6
7?
i
=
1
2
3
4
5
6
7
8
9
……?
A
=
a
b
a
b
a
b
a
a
b
a
b
…?B
=
a
b
a
b
a
c
bj
‘=
1
2
3
4
5
6
7KMP算法的運(yùn)行過程?
需要注意的是i并沒有動(dòng),改變的只是j的值?
如果改變j的值后a[i+1]仍不等于b[j+1]的話,繼續(xù)改變j值直到a[i+1]==b[j+1]或者j=0?
j=0表示i+1前面無論怎么匹配都不能使
a[i+1]==b[j+1],只好讓a[i+1]與b[j+1]單獨(dú)匹配?
還是上一個(gè)例子,再演示一下KMP算法的運(yùn)行過程??i
=
1
2
3
4
5
6
7
8
9
……A
=
a
b
a
b
a
b
a
a
b
a
b
…??B
=j
=a
b
a
b
a
c
b1
2
3
4
5
6
7?
當(dāng)i=6,j=5時(shí),a[i+1]!=b[j+1],故令
j=next[5]=3KMP算法的運(yùn)行過程??i
=
1
2
3
4
5
6
7
8
9
……A
=
a
b
a
b
a
b
a
a
b
a
b
…??B
=j
=a
b
a
b
a
c
b1
2
3
4
5
6
7?
此時(shí)i=6,j=3仍不滿足a[i+1]==b[j+1],故繼續(xù)減小j,使j=next[3]=1KMP算法的運(yùn)行過程??i
=
1
2
3
4
5
6
7
8
9
……A
=
a
b
a
b
a
b
a
a
b
a
b
…??B
=j
=a
b
a
b
a
c
b1
2
3
4
5
6
7?
此時(shí)i=6,j=1仍不滿足a[i+1]==b[j+1],故繼續(xù)減小j,使j=next[1]=0KMP算法的運(yùn)行過程??i
=
1
2
3
4
5
6
7
8
9
……A
=
a
b
a
b
a
b
a
a
b
a
b
…??B
=j
=a
b
a
b
a
c
b1
2
3
4
5
6
7?
終于,A[8]=B[1],i變?yōu)?,j為1KMP算法的運(yùn)行過程??i
=
1
2
3
4
5
6
7
8
9
……A
=
a
b
a
b
a
b
a
d
b
a
b
…??B
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設(shè)計(jì)用人聘用協(xié)議書
- 員工股權(quán)授予協(xié)議書
- 在先權(quán)利確認(rèn)協(xié)議書
- 進(jìn)入泰安報(bào)備協(xié)議書
- 醫(yī)院投資項(xiàng)目協(xié)議書
- 政務(wù)棋牌轉(zhuǎn)讓協(xié)議書
- 外聘兼職電工協(xié)議書
- 冷庫出租協(xié)議書范本
- 醫(yī)院器械消毒協(xié)議書
- 家具代購協(xié)議書范本
- 計(jì)算與人工智能概論(湖南大學(xué))知到智慧樹章節(jié)答案
- 飛機(jī)構(gòu)造基礎(chǔ)(完整課件)
- 三年級上冊勞動(dòng)《立體賀卡》課件
- 12萬噸年丁二烯抽提裝置、10-3萬噸年MTBE-丁烯-1裝置總承包工程施工組織設(shè)計(jì)
- 骨盆骨折治療新進(jìn)展
- 防范電信詐騙安全教育共建平安校園宣傳課件
- DFMEA-磷酸鐵鋰電池案例
- GB/T 44625-2024動(dòng)態(tài)響應(yīng)同步調(diào)相機(jī)技術(shù)要求
- 網(wǎng)絡(luò)銷售食品監(jiān)督抽檢抽樣指南
- 第七屆江西省大學(xué)生金相技能大賽知識(shí)競賽單選題題庫附有答案
- 中醫(yī)內(nèi)科學(xué)全套課件
評論
0/150
提交評論