KMP模式匹配演算法改進 nextval陣列

2021-10-21 22:45:02 字數 1419 閱讀 5827

建議先複習乙個kmp演算法

這裡可以發現,2345步驟,其實都是多餘的判斷,由於t串中的2345位置的字元都與首位的a相等,那麼可以利用首位next[1]的值去取代與它相等1的字元後續的next[j]的值,因此我們要對next函式進行改良-------我們把改良後的next陣列叫做nextval

#include

using

namespace std;

//nextval陣列

//nextval陣列

void

get_nextval

(string t,

int* nextval)

else

}else}}

//改進kmp改進

inttest

(string s,string t,

int* nextval)

else

} cout <<

"i="

<< i << endl;

cout <<

"j="

<< j << endl;

if(j == t.

length()

)return-1

;}void

test()

;get_nextval

(t, nextval)

;int ret=

test

(s, t, nextval)

; cout <<

"子串t在主串s中的起始位置為:"

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陣列

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 首先我們要獲取到...

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