自我理解的KMP 演算法 模式匹配

2021-07-04 18:54:42 字數 596 閱讀 7994

首先,kmp最重要的是next 函式的設計,下面是next函式的原理

純手寫,可跳過不看,網上有比較抽象的理論,但是比較難以理解

下面是**部分,重點在於 get_next 函式體

//kmp模式匹配演算法

#include#include#define substring_len 50 //子串長度為50

int next[substring_len] ;//

void get_next (char *t , int next);

int index_kmp (char *s , char *t , int pos) ;//返回子串 t 在主串s中第pos 位置之後的陣列下標,不存在返回-1;

int main ()

int index_kmp (char *s , char *t , int pos)

void get_next (char *t , int next)else}}

關於next陣列的修正問題,以後補充

模式匹配kmp演算法理解分析

首先說一下為什麼當出現不匹配後,i不變,而j變成next j 主串abcabdc 模式串abcabda。很明顯,當i j 7時,出現不匹配,如果用暴力演算法,i回到2。j回到1。其實為了匹配子串,從子串的第乙個到最後乙個都要匹配,我們從子串第乙個字元a可以從主串中看出,當i 1時,主串為a,而下一次...

模式匹配之KMP演算法的理解(二)

昨天說到了有公式 p1p2.p k 1 p j k 1 p j k 2 p j 1 觀察下該公式,這個等式是在模式串中存在的。很顯然接下來的工作主要就是在模式串中找到這樣的等式。模式串p中的pj 即模式串中的第j個字元 與主串中的si不匹配的時候,將比較si與模式串p中第k個pk字元比較。定義乙個陣...

模式匹配 KMP演算法

字串匹配演算法 include includeusing namespace std define ok 1 define error 0 define overflow 2 typedef int status define maxstrlen 255 使用者可在255以內定義最長串長 typed...