關於KMP中next陣列的計算

2021-08-22 16:38:28 字數 1409 閱讀 7611

目標字串 | abcdefgh 

模式字串 | abcab

模式字串 | abcab
例子:abcab的next陣列計算方法下標0

1234

模式字串ab

cabnext陣列01

112

1.下標為 0 的初值這裡設定為 0;

2.下標為 1 的初值這裡設定為 1;

3.下標為 2 的初值的計算步驟:

(1).這裡假設 i=2;

(2).觀察在i下標之前的模式串,及[ 0 ~ i-1 ].這裡為ab

(3).在i下標之前的模式串,分別從左到右從右到左列出所有的字串,作比較。這裡為 :

從左到右:a ; 從右到左:b ; 跨度 1

(4).從左到右 和 從右到左 的模式串不相等則對應i的 next 的值保持不變 1;

4.下標為 3 的初值的計算步驟:

(1).這裡假設 i=3;

(2).觀察在i下標之前的模式串,及[ 0 ~ i-1 ].這裡為abc

(3).在i下標之前的模式串,分別從左到右,從右到左列出所有的字串,作比較。這裡為 :

從左到右:a ; 從右到左:c ; 跨度 1

從左到右:ab ; 從右到左:bc ; 跨度 2

(4).從左到右 和 從右到左 的模式串不相等則對應i的 next 的值保持不變 1;

4.下標為 4 的初值的計算步驟:

(1).這裡假設 i=4;

(2).觀察在i下標之前的模式串,及[ 0 ~ i-1 ].這裡為abca

(3).在i下標之前的模式串,分別從左到右,從右到左列出所有的字串,作比較。這裡為 :

從左到右:a ; 從右到左:a ; 跨度 1

從左到右:ab ; 從右到左:ca ; 跨度 2

從左到右:abc ; 從右到左:bca ; 跨度 3

(4).從左到右 和 從右到左 的模式串跨度為1的模式串 相等則對應i的 next 的值+跨度即為 +1;

關於KMP的next陣列

明明寫的和課本一樣,但是在pta就是不正確,參考了別人的答案,發現有乙個地方不一樣記錄一下!include include include int next1 1000 next1 j k,表示當t i p j 時,j指標的下乙個位置。求字串在主串中第一次出現的位置 void get next1 c...

KMP演算法中next陣列的計算

getnext的個人理解 首先先說一下next串的定義吧 在對於字串t中每個字元 t j 0 j len 1 存在乙個整數 k k使得模式串t中 開頭的k個字元依次與 t j 的前面的 k個字元相同。include 順序串.cpp 關於順序串的基本操作,下邊放有源 void getnext sqst...

關於KMP演算法的next陣列

kmp的next陣列求法是很不容易搞清楚的一部分,也是最重要的一部分。我這篇文章就以我自己的感悟來慢慢推導一下吧!保證你看完過後是知其然,也知其所以然。如果你還不知道kmp是什麼,請先閱讀上面的鏈結,先搞懂kmp是要幹什麼。下面我們就來說說kmp的next陣列求法。kmp的next陣列簡單來說,假設...