數(shù)據(jù)結(jié)構(gòu)第四章-串_第1頁
數(shù)據(jù)結(jié)構(gòu)第四章-串_第2頁
數(shù)據(jù)結(jié)構(gòu)第四章-串_第3頁
數(shù)據(jù)結(jié)構(gòu)第四章-串_第4頁
數(shù)據(jù)結(jié)構(gòu)第四章-串_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

主要內(nèi)容4.1簡單模式匹配算法4.2

KMP算法——效率較高的匹配算法學(xué)習(xí)方法建議:

本章內(nèi)容的學(xué)習(xí)注重理解模式匹配算法的匹配過程。第四章

串?dāng)?shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第1頁。引言一、基本概念二、簡單模式匹配算法(BF算法)三、算法分析四、BF算法的特點(diǎn)小結(jié)在BF算法的比較過程中,可能產(chǎn)生回溯,故算法的漸近時間復(fù)雜度為O(n*m)。4.1簡單模式匹配算法數(shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第2頁。一、基本概念

串是一種特殊的線性表,它特殊在:數(shù)據(jù)元素都是來自字符集!由于數(shù)據(jù)元素特殊,它的操作有些不同于一般線性表,例如:操作的對象一般是子串(即一組數(shù)據(jù)元素)而不是單個數(shù)據(jù)元素!有些高級語言已經(jīng)把串ADT物理實現(xiàn)了,所以,我們這里只是簡單討論一下串模式匹配。4.1簡單模式匹配算法子串:串中連續(xù)的任意個字符組成的子序列,稱為該串的子串;主串:包含子串的串;數(shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第3頁。字符在串中的位置:字符在串中的序號(即第幾個數(shù)據(jù)元素);子串在串中的位置:子串的第一個字符在主串中的位置;

串相等:兩個串的長度相等,且各對應(yīng)位置處的字符都相等;例如,設(shè)A和B分別為A=“Thisisastring!”,B=“is”

則A的長度為17,B的長度為2;B是A的子串,A為主串。B在A中出現(xiàn)了兩次,其中首次出現(xiàn)所對應(yīng)的主串位置是3。因此,稱B在A中的序號(或位置)為3。模式匹配:子串的定位操作通常稱作串的模式匹配。在一個主串中,查找子串是否存在,存在返回子串在主串中的位置;不存在返回0。子串稱為模式串。數(shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第4頁。5二、簡單模式匹配算法(BF算法)

采用回溯法:從主串的第i個位置開始,與子串的每個字符逐個比較,若均相等,則找到,位置為i;否則,即在某個位置出現(xiàn)了不等,則說明從該起點(diǎn)開始的子串不是模式串,換一個新起點(diǎn),重新開始,繼續(xù)逐一比較,直到找到,或i>=Length為止。

TPij數(shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第5頁。6第1趟

Tabbaba Paba

第2趟

Tabbaba P

aba

i=2j=2i=1j=0第3趟

Tabbaba Paba

第4趟

Tabbaba P

aba

i=2j=0i=6j=3每趟:

主串回溯到上次起點(diǎn)的下一個位置;模式串回到0

數(shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第6頁。7三、算法分析:設(shè)目標(biāo)串長度為n,模式串長度為m。1.在匹配成功時,即T串中肯定包含P串,則:(1)最好情況下:模式P出現(xiàn)在T的最開始,O(m)T:aaaaabbbbbbP:aaa(2)最壞情況下:模式P出現(xiàn)在T的最后①無回溯,最后是模式串,O(n)T:cbbbcbcbaaaP:aaa②有回溯,每次比較時,只有P的最后一個字符出現(xiàn)不等

T:aaaaaaaaaaaabP:aaaab

O(n*m)數(shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第7頁。82.在匹配不成功時,即T串中不包含P串,則:(1)最好情況下:模式P的第一個字符就沒在T中出現(xiàn),O(n)T:aaaaaaaaaaaaP:xyz(2)最壞情況下:只有P的最后一個字符匹配不上,而其它字符每次都匹配上,O(n*m)T:aaaaaaaaaaaaaP:aaaab數(shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第8頁。四、BF算法的特點(diǎn):

a.時間復(fù)雜性為O(n*m)。

b.由于有回溯,所以主串輸入后必須保存。改進(jìn):首尾匹配算法基本思想:先比較第一個字符,再比最后一個字符,若相等,再比較第2到n-1個字符。最壞的情況是倒數(shù)第2個字符不同。由于仍然需要回溯,時間復(fù)雜度還是O(n*m)。

T:aaaaaaaaaaaaaP:aaaab數(shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第9頁。引言一、KMP算法(BF算法)二、失敗函數(shù)的定義三、算法的特點(diǎn)四、改進(jìn)NEXT值小結(jié)在KMP算法的比較過程中,不產(chǎn)生回溯,匹配失敗時,主串的指針不回溯,只要在模式串中找合適的字符(由失敗函數(shù)確定)與其比較即可,故算法的漸近時間復(fù)雜度為O(n)。4.2

KMP算法——效率較高的匹配算法數(shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第10頁。一、改進(jìn)的模式匹配算法——KMP算法(解決了回溯)

D.E.KnuthJ.H.MorrisV.R.PrattKMP算法的基本思想:

KMP算法最大的改進(jìn)之處:在匹配失敗時,主串中的指針i不需要回溯,而是在模式中找出適當(dāng)?shù)淖址^續(xù)比較。數(shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第11頁。12假設(shè)主串為T=‘t0t1t2...tn-1’模式串為P=‘p0p1p2...pm-1’m<<n…TiPjk≠

在主串的第i個字符ti與模式中pj匹配失敗時,i不回退,而是在模式中找適當(dāng)字符pk與ti繼續(xù)比較,pk與ti,pk+1與ti+1……..當(dāng)然此pk不是任意的,得根據(jù)一定算法找出。數(shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第12頁。13

運(yùn)用KMP算法的匹配過程第1趟目標(biāo)

a

c

abaabaabcacaabc

模式

a

baabcac

第2趟目標(biāo)a

cabaabaabcacaabc

模式

a

baabcac

第3趟目標(biāo)acabaab

a

abcacaabc

模式

abaab

c

ac

第4趟目標(biāo)acabaab

a

abcac

aabc

模式

(ab)

a

abcac

數(shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第13頁。主串:s=“abcaabbabcabaa”模式串:p=“abcabaa”第1趟:abcaabbabcabaai=4i=0,j=0abcabaaj=4第2趟:abcaabbabcabaai=4i=4,j=1abcabaaj=1第3趟:abcaabbabcabaai=6i=4,j=0abcabaaj=2第4趟:abcaabbabcabaai=6i=6,j=0abcabaaj=0第5趟:abcaabbabcabaai=14,j=7i=7,j=0abcabaa匹配成功數(shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第14頁。假設(shè)在比較中,遇到一個不匹配字符t[i]<>p[j],主串不動,模式串向右滑動,使主串中的第i個字符與模式串中的第幾個字符比較?i

1j

TPx數(shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第15頁。

i-k+1

i-1i

1

j-1j

TPx

假設(shè)此時應(yīng)與模式中第k(k<j)個字符比較,則模式中前k-1個字符必須滿足:

‘p1p2…pk-1’=‘ti-k+1,ti-k+2…ti-1’k-1數(shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第16頁。已經(jīng)得到的部分匹配的結(jié)果,

‘pj-k+1pj-k+2…pj-1’=‘ti-k+1,ti-k+2…ti-1’所以,應(yīng)該有:‘p1p2…pk-1’=‘pj-k+1pj-k+2…pj-1’,則下一次模式串應(yīng)該從k開始比較。那么如何求k呢?1

j-1j

tpxki-k+1i-1數(shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第17頁。從分析可知:p[1..k-1]是p[1..j]的最長的既是真前綴又是真后綴的子串(即長度小于j)所以,求k就是求p[1..j]中最長的既是真前綴又是真后綴的子串的長度。

k與主串無關(guān)??!

j=012345678910111213求失敗函數(shù):abcaabbabcabaa-10001120123421數(shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第18頁。19根據(jù)前面的分析,失敗函數(shù)可以定義為:

-1當(dāng)

j=0時next[j]=max{k|0<k<j且‘p0p1...pk-1’=‘pj-k...pj-1’}非空

0其它情況jkk

k0pj-kpj-1二、失敗函數(shù)的定義數(shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第19頁。20利用next失敗函數(shù)進(jìn)行匹配處理:若在進(jìn)行某一趟匹配比較時在模式P的第j位失配:如果j>0,那么在下一趟比較時模式串P的起始比較位置是pnext(j),目標(biāo)串T的指針不回溯,仍指向上一趟失配的字符;如果

j=0,則目標(biāo)串T指針進(jìn)一,模式串P指針回到p0,繼續(xù)進(jìn)行下一趟匹配比較。j01234567Pabaabcacnext(j)-10011201數(shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第20頁。21

運(yùn)用KMP算法的匹配過程第1趟目標(biāo)

a

c

abaabaabcacaabc

模式

a

baabcac

j=1next(1)=0,下次p0第2趟目標(biāo)a

cabaabaabcacaabc

模式

a

baabcac

j=0下次p0,目標(biāo)指針進(jìn)1

第3趟目標(biāo)acabaab

a

abcacaabc

模式

abaab

c

ac

j=5next(5)=2,

下次p2

j01234567Pabaabcacnext(j)-10011201數(shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第21頁。22

第3趟目標(biāo)acabaab

a

abcacaabc

模式

abaab

c

ac

j=5next(5)=2,

下次p2第4趟目標(biāo)acabaab

a

abcacaabc

模式

(ab)

a

abcac

j01234567Pabaabcacnext(j)-10011201數(shù)據(jù)結(jié)構(gòu)第四章-串全文共25頁,當(dāng)前為第22頁。三、KMP算法的特點(diǎn)四、改進(jìn)NEXT值

next[j]=k即si與pj比

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論