KMP演算法中的模式串移動陣列

2021-08-01 10:48:40 字數 973 閱讀 5110

字串的子串定位稱為模式匹配,模式匹配可以有多種方法。簡單的演算法可以使用兩重巢狀迴圈,時間複雜度為母串與子串長度的乘積。而kmp演算法相對來說在時間複雜度上要好得多,為母串與子串長度的和。但其算符比較難以理解。

在kmp演算法中,使用到了乙個next陣列。這個陣列就是在比較失配時母串指標不必回溯,而子串指標移動相應位置即可。我們給出書中next陣列的算式表示以及演算法,請你實現之。

圖1:next陣列的算式表示

圖2:next陣列的演算法表示

乙個模式串,僅由英文小寫字母組成。長度不大於100。

輸出模式串對應的移動陣列next。每個整數後跟乙個空格。

abaabcac
0 1 1 2 2 3 1 2
收起提示[-]

#include#include#include#define maxstrlen 100

typedef struct

hstring;

void initstring(hstring *t);

void strassign(hstring *t,char charb);

void get_next(hstring *t,int next);

void print(hstring *t,int next);

void initstring(hstring *t)

void strassign(hstring *t,char charb)

else

else

t->ch[0]=len;}}

return ;

}void get_next(hstring *t,int next)

else

j=next[j];

}return ;

}void print(hstring *t,int next)

return ;

}int main()

KMP演算法中模式串移動next陣列的計算

題目描述 字串的子串定位稱為模式匹配,模式匹配可以有多種方法。簡單的演算法可以使用兩重巢狀迴圈,時間複雜度為母串與子串長度的乘積。而kmp演算法相對來說在時間複雜度上要好得多,為母串與子串長度的和。但其算符比較難以理解。在kmp演算法中,使用到了乙個next陣列。這個陣列就是在比較失配時母串指標不必...

演算法4 7 KMP演算法中的模式串移動陣列(c語言)

題目描述 字串的子串定位稱為模式匹配,模式匹配可以有多種方法。簡單的演算法可以使用兩重巢狀迴圈,時間複雜度為母串與子串長度的乘積。而kmp演算法相對來說在時間複雜度上要好得多,為母串與子串長度的和。但其算符比較難以理解。在kmp演算法中,使用到了乙個next陣列。這個陣列就是在比較失配時母串指標不必...

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