字串的子串定位稱為模式匹配,模式匹配可以有多種方法。簡單的演算法可以使用兩重巢狀迴圈,時間複雜度為母串與子串長度的乘積。而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 ...