KMP演算法中next函式的解析

2021-07-24 11:07:33 字數 864 閱讀 2408

今天花了半天的時間,終於把kmp演算法中的next函式整明白了

先看看next資料值的求解方法

位序 1 2 3 4 5 6 7 8

模式串 a b a a b c a c

next值 0 1 1 2  2 3  1 2

next陣列的求解方法是:

1.第一位的next值為0

2.第二位的next值為1

後面求解每一位的next值時,根據前一位進行比較

3.第三位的next值:第二位的模式串為b ,對應的next值為1;將第二位的模式串b與第一位的模式串a進行比較,不相等;則第三位的next值為1

4.第四位的next值:第三位的模式串為a ,對應的next值為1;將第三位的模式串a與第一位的模式串a進行比較,相同,則第四位的next值得為2

5.第五位的next值:第四位的模式串為a,對應的next值為2;將第四位的模式串a與第二位的模式串b進行比較,不相等;第二位的b對應的next值為1,則將第四位的模式串a與第一位的模式串a進行比較,相同,則第五位的next的值為2

6.第六位的next值:第五位的模式串為b,對應的next值為2;將第五位的模式串b與第二位的模式中b進行比較,相同,則第六位的next值為3

7.第七位的next值:第六位的模式串為c,對應的next值為3;將第六位的模式串c與第三位的模式串a進行比較,不相等;第三位的a對應的next值為1,則將第六位的模式串c與第一位的模式串a進行比較,不相同,則第七位的next值為1

8.第八位的next值:第七位的模式串為a,對應的next值為1;將第七位的模式串a與第一位的模式串a進行比較,相同,則第八位的next值為2

以上這種分析方法,位序是從1開始的,如果位序從0開始,剛第一位的next值為-1,後面的方法則相同

KMP演算法中next函式的解析

今天花了半天的時間,終於把kmp演算法中的next函式整明白了 先看看next資料值的求解方法 位序 1 2 3 4 5 6 7 8 模式串 a b a a b c a c next值 0 1 1 2 2 3 1 2next陣列的求解方法是 1.第一位的next值為0 2.第二位的next值為1 後...

KMP演算法中next陣列解析

接上篇 next 陣列 主要記錄 子串 的 每乙個字首 按順序 的 最長匹配真前字尾 的長度。這裡講一下 求解原理。陣列從零開始,第乙個數 1 代表不存在 有的以 0 為起點代表空,這不矛盾,全加1 即為此格式 此陣列是一點點增長的,下乙個資料依賴之前的資料。舉例子來描述原理 當新的最後乙個字母過來...

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