KMP演算法 學習筆記

2021-10-07 07:23:05 字數 1035 閱讀 1606

學習知乎大牛 筆記![在這裡插入描述](

**把握住 i和j指向的是啥就好接受了,i指向的next陣列的下標 只能遞增j指向i所指字元之前的字串的最大交集字首末尾+1的下標

也就是說 只有if裡面的成立了 才執行next的新賦值。

else 語句是:

當串不能在上一最大交集串的基礎上增加時(也就是p[i]!=p[j]),檢查最大交集字首字串裡next值

此處next[3]等於1,j=next[j],j的值成為1,指向串的最大前字尾交集的字首的尾。

一定記得j指向的是什麼?next[j]指的又是什麼?

1、給j和i和next[i]賦初值

2、只要next陣列沒有計算完成進行以下步驟

3、j == -1(判斷開始?)或者p[i] ==p[j](主串的字首尾與字尾尾是否一致?)

4、若一致賦值next[i] = j; j指向字串最大字首後乙個字串,同時也代表字首字尾交集的最大長度。

5、若不滿足3條件,則代表字首字尾交集沒法增加了,所以就縮短字首。。。。。此處又卡住了。。。。。。如圖1,顯然字尾尾與字首尾不一致,需要縮短長度,那麼縮短長度為多少呢?

需要看字首next值了,也就是abab 不行,就找aba的前字尾交集

發現此時j指向了b,一樣j指向的公共交集的字首尾字元a,在字尾就有一樣的字元a,

然後判斷 ab 是否 匹配 ac

亂七八糟 ,,,一定要感受那個中庸的思想,太極生兩儀,兩儀生四象,四象生八卦。。。

主串分前字尾。。前或字尾再分前或字尾。。。

Kmp演算法學習筆記

kmp演算法我認為難點在next陣列的建立。看kmp前我仔細看了下傳統的匹配模式,為 首元素存放串的長度 int index sstring s,sstring t else i i j 2 if j t 0 return i t 0 else return 0 我認為想深刻理解好kmp演算法要和傳...

KMP演算法學習筆記

kmp是一種字串匹配演算法,網上有許多的講解和介紹,都非常清楚明白,這裡只說明一點next i 表示 1,i 1 位中的最長公共字首字尾,因此在遇到字元不匹配時,直接將字串右移j next j 位即可。不多說了,直接上習題 poj 3461 oulipo kmp演算法裸題,直接上模板 code in...

KMP演算法學習筆記

前幾天學習了關於字串處理的kmp演算法,剛學的時候沒怎麼懂,通過今天的練題,終於把kmp掌握了。kmp演算法利用了字串的一些特殊性質,通過字首陣列,將單個字串的匹配問題由o m n 優化到了o m n 這裡,我存幾段關鍵性 首先是get next 函式 void get next 然後是kmp vo...