KMP演算法(2),對Next函式的理解

2021-08-18 12:16:33 字數 586 閱讀 1717

next函式返回匹配字串中當前位置 j (j=1,2,3...)前面的子字串中,最長前字尾長度+1(j=1時,定義為0)

kmp演算法中,j = next(j),在i不變的情況下,直接丟棄了匹配字串中的最長字首,從next(j)位置與i位置繼續比較。

*********************************************

(例)設一段字串abxyab*****,當匹配到abxyab之後出錯。

源字串        *****abxyabm****

匹配字串            abxyabn****

此時,i == j == 7,s[i] == 'm'。

然後,j = next[7] = 3。

直接用s[7]與p[3]繼續比較,丟棄匹配字串子串pj的最長字首。

源字串        *****abxyabm****                 

匹配字串                    abxyabn*****

實際比較的是:

源字串        m****      

匹配字串     xyabn*****

KMP演算法中的next函式

kmp演算法詳解看 next i 表示當模式串t i 與主串失配時,模式串的索引回溯到next i 主串的索引不變 下面串的下標均從0開始 1 i 0 next i max k 0 k 證明模式串next函式的可行性 當t i 與 s j 失配時,即 t i s j 時 可得t 0.i 1 s j ...

KMP演算法的next函式詳解

不得不說,kmp的next函式是在是難以理解,智商拙計。在幾天的斷斷續續理解之後一度想放棄,在得知了它的別名看毛片後重新提起了興趣。kmp演算法理解的難點在於next遞推的理解,也就是說當next j k的時候,如何求出next j 1 的值。先解釋一下next j k的意義。這說明在子串中該j位置...

對KMP演算法的next陣列的理解

最近正在看 大話資料結構 在看到kmp演算法的時候怎麼進行字串匹配的基本上可以理解,但是在看原始碼求解next陣列的時候,我蒙了,一頭霧水,和我想象的完全不一樣,真的好簡潔,簡潔到我都不知道為什麼會這樣寫,我試圖 所以然,然後研究了將近三天時間,因此在這僅僅說明我對next陣列的理解。如果理解錯誤的...