拓展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...