KMP模式匹配演算法求next陣列

2021-09-26 15:46:34 字數 681 閱讀 3429

j12

3456

78值a

baab

cacnext01

1223

12j是字串中的位置(從1開始計算),值是字串對應j位置的字母,next是next陣列中的值。

下面是計算方法:

(1)首先next[1] = 0,next[2] = 1 這兩個是固定不變的

(2)除了j=1和j=2時,求解next[j],首先我們要獲取到next[j-1],然後我們就看字串前j個字母的前next[j-1]和後next[j-1]是否相同。若相同,next[j]就等於next[j-1]+1,如不相同,就看前j個字母的前next[j-1]-1和後next[j-1]-1個字母是否相同。相同的話next[j] = next[j-1] - 1 + 1,不相同的話,檢查前next[j-1]-2和後next[j-1]-2是否相同,以此類推。。。。。。直到前j個字母的前乙個字母和後乙個字母不等時,令next[j] = 1(其實等價於前0個字母和後0個字母等價,所以next[j] = 0+1 = 1)。

舉個例子,拿j=6來說,因為next[5] = 3,我們就看前6個字母abaabc,前三個字母aba,後三個字母abc,不相等。看前兩個字母ab,後兩個字母bc,不相等。看前乙個字母a和後乙個字母c,不相等。那麼next[6] = 0 + 1 = 1。

KMP模式匹配演算法 next值求解

j 1 2 3 4 5 6 7 8 模式串 a b a a b c a c next j 0 1 1 2 2 3 1 2 各個位的解釋 1.前兩位必定為0和1。2.計算第三位的時候,看第二位b的next值,為1,則把b和1對應的a進行比較,不同,則第三位a的next的值為1,因為一直比到最前一位,都...

串 KMP模式匹配演算法(next陣列)

include include include void get next char t 100 int next int index kmp char s 100 char t 100 int pos int main void get next char t 100 int next else ...

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

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