拓展KMP詳解 (筆記)

2021-08-07 06:56:13 字數 826 閱讀 7987

拓展kmp演算法詳解blog:

我自己的筆記部分:

拓展kmp是在kmp的基礎上得到的。

首先有以下幾點:is

aaaa

baat

aaaa

aextend

next

s:長度為n的母串    t:長度為m的子串

extend:

extend[i]表示t與s[i,n-1]的最長公共字首

next[i]表示t[i,m-1]與t陣列的最長公共字首

由next[1]= 4得出   t[0,3] = t [1,4]     =>     t[0,2] = t[1,3]

由extend[0]= 4 得出  s[0,3] = t[0,3]    =>  s[1,3] = t[1,3]

那麼可以得出   s[1,3] = t[0,2]   

那麼我們在進行匹配時可以轉化為直接判斷 s[1,3] 與t[0,2] 是否匹配

由 以上 可得出  s[ po, p ] = t[ 0 , p-po]   =>  s[k+1,p] = t[k-po+1,p-po]    len=next[k-po+1]

(注:其中 po表示得出extend最遠距離初始的下標 ,p表示由extend得出的以匹配的最遠距離的下標, k表示當前下標  )

1k+lenextend[k+1]=len

2k+len>=p時  =>  從s[p+1] 和 t[p-k+1]開始匹配,直到失配,得到extend[k+1]+(k+1) 大於p,更新p和po;

o(n+m)    (n為母串長,m為子串長)

拓展KMP演算法詳解

拓展kmp解決的問題是給兩個串s和t,長度分別是n和m,求s的每乙個字尾子串與t的最長公共字首分別是多少,記作extend陣列,也就是說extend i 表示s i,n 1 i從0開始 和t的最長公共字首長度。需要注意的是如果extend i m,即s i,n 1 和t的最長公共字首長度是m 正好是...

拓展KMP分析

拓展kmp是對kmp演算法的擴充套件,它解決如下問題 定義母串s,和字串t,設s的長度為n,t的長度為m,求t與s的每乙個字尾的最長公共字首,也就是說,設extend陣列,extend i 表示t與s i,n 1 的最長公共字首,要求出所有extend i 0 i 注意到,如果有乙個位置extend...

拓展KMP分析

拓展kmp是對kmp演算法的擴充套件,它解決如下問題 定義母串s,和字串t,設s的長度為n,t的長度為m,求t與s的每乙個字尾的最長公共字首,也就是說,設extend陣列,extend i 表示t與s i,n 1 的最長公共字首,要求出所有extend i 0 i 注意到,如果有乙個位置extend...