KMP演算法的next陣列

2021-06-06 14:21:22 字數 623 閱讀 4790

本文參考:

google

,資料結構(

c語言)

#include #include /*

author : silence

time : 2012/5/19

description : kmp演算法的next

*/ using namespace std;

void next(char t,int l,int next)

else

}

}

1 當前i=20,j=8;表示p0-p7和p11-p19相等

2 t[20]==t[8] next[21]=9 增長乙個

2.1 t[20]!=t[8] j= next[8]=3,j=3 next[8]=3表示p0-p2等於p5-p7  t[8]!=t[3]  

t[8]和t[20]失配,但是next[20]=8也就是20之前的8位和開頭的8位匹配,

應該在20之後的8位繼續查詢匹配項,20之後的8項就是開頭的8位

j=next[8]表示在開頭的8位查詢  next[8]=3也就是頭三位和8的前三位相等也就是和20之前的三位相等 所以next[21]=++j,增加一位        

KMP演算法 next陣列

通過上文完全可以對kmp演算法的原理有個清晰的了解,那麼下一步就是程式設計實現了,其中最重要的就是如何根據待匹配的模版字串求出對應每一位的最大相同前字尾的長度。我先給出我的 1 void makenext const char p,int next 214 next q k 15 16 現在我著重講...

KMP演算法 NEXT陣列

kmp和next陣列基本上是一起用的,有了next陣列,才有kmp演算法,講道理來說這兩個都是基於最大前字尾和,也就是說需要用到kmp的時候必須先把next陣列先求出來,next陣列就是由所匹配的word的每個子串的前字尾和最大匹配得到的,說實話next陣列的演算法給優化得已經很無解了,以至於至今我...

kmp演算法next例題 KMP演算法next陣列求解

kmp演算法與bf演算法的比較 bf演算法的想法十分樸素,即先將子串t的第一位與主串s的第一位對齊開始匹配,當不能匹配時將子串整體往後移一位,然後重新匹配,以此類推直至排出結果 如當遇到下圖所示情況時,需將子串整體後移一位,將i,j分別回溯到主串第2位和子串第一位。kmp演算法 對bf進行思考後,我...