kmp算法詳解_第1頁
已閱讀1頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、KMP字符串模式匹配詳解字符串模式匹配詳解KMP字符串模式匹配通俗點說就是一種在一個字符串中定位另一個串的高效算法。簡單匹配算法的時間復(fù)雜度為O(mn)KMP匹配算法。可以證明它的時間復(fù)雜度為O(mn).。一.簡單匹配算法簡單匹配算法先來看一個簡單匹配算法的函數(shù):intIndex_BF(S[]T[]intpos)若串S中從第pos(S的下標(biāo)0≤posStrLength(S))個字符起存在和串T相同的子串,則稱匹配成功,返回第一個這樣的子

2、串在串S中的下標(biāo),否則返回1inti=posj=0while(S[ij]!=0繼續(xù)比較后一字符elseij=0重新開始新的一輪匹配if(T[j]==0)returni匹配成功返回下標(biāo)elsereturn1串S中(第pos個字符起)不存在和串T相同的子串Index_BF此算法的思想是直截了當(dāng)?shù)模簩⒅鞔甋中某個位置i起始的子串和模式串T相比較。即從j=0起比較S[ij]與T[j],若相等,則在主串S中存在以i為起始位置匹配成功的可能性,繼續(xù)

3、往后比較(j逐步增1),直至與T串中最后一個字符相等為止,否則改從S串的下一個字符起重新開始進行下一輪的“匹配“,即將串T向后滑動一位,即i增1,而j退回至0,重新開始新一輪的匹配。二.KMP匹配算法匹配算法還是相同的例子,在S=”abcabcabdabba”中查找T=”abcabd”,如果使用KMP匹配算法,當(dāng)?shù)谝淮嗡阉鞯絊[5]和T[5]不等后,S下標(biāo)不是回溯到1,T下標(biāo)也不是回溯到開始,而是根據(jù)T中T[5]==’d’的模式函數(shù)值(

4、next[5]=2,為什么?后面講),直接比較S[5]和T[2]是否相等,因為相等,S和T的下標(biāo)同時增加因為又相等,S和T的下標(biāo)又同時增加。。。最終在S中找到了T。如圖:KMP匹配算法和簡單匹配算法效率比較,一個極端的例子是:在S=“AAAAAA…AAB“(100個A)中查找T=”AAAAAAAAAB”簡單匹配算法每次都是比較到T的結(jié)尾,發(fā)現(xiàn)字符不同,然后T的下標(biāo)回溯到開始,S的下標(biāo)也要回溯相同長度后增1,繼續(xù)比較。如果使用KMP匹配算

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論