四.求串t的模式值next[n]的函式
說了這麼多,是不是覺得求串
t的模式值
next[n]
很複雜呢?要叫我寫個函式出來,目前來說,我寧願去登天。好在有現成的函式,當初發明
kmp演算法,寫出這個函式的先輩,令我佩服得六體投地。我等後生小子,理解起來,都要反覆琢磨。下面是這個函式:
void get_nextval(const char *t, int next)
// if
else
k = next[k]; }
// while
這裡是我加的顯示部分
// for(int i=0;i //
//cout< }
// get_nextval
另一種寫法,也差不多。
void getnext(const char* pattern,int next)
這裡是我加的顯示部分
// for(int i=0;i //
//cout< }
下面是kmp模式匹配程式,各位可以用他驗證。記得加入上面的函式
#include
#include
int kmp(const char *text,const char* pattern) //const
表示函式內部不會改變這個引數的值。
int *next=new int[len+1];
get_nextval(pattern,next);//
求pattern
的next
函式值
int index=0,i=0,j=0;
while(text[i]!='\0' && pattern[j]!='\0' )
else
} }//while
delete next;
if(pattern[j]=='\0')
return index;//
匹配成功
else
return -1; }
int main()//abcabcad
KMP字串模式匹配詳解
kmp字串模式匹配詳解 kmp字串模式匹配通俗點說就是一種在乙個字串中定位另乙個串的高效演算法。簡單匹配演算法的時間複雜度為o m n kmp匹配演算法。可以證明它的時間複雜度為o m n 一.簡單匹配演算法 先來看乙個簡單匹配演算法的函式 int index bf char s char t in...
KMP字串模式匹配詳解
簡單匹配演算法的時間複雜度為o m n kmp匹配演算法時間複雜度為o m n 一 簡單匹配演算法 先來看乙個簡單匹配演算法的函式 int index bf char s char t int pos if else k next k while get nextval 另一種寫法,也差不多。voi...
KMP字串模式匹配詳解
kmp字串模式匹配詳解 kmp字串模式匹配通俗點說就是一種在乙個字串中定位另乙個串的高效演算法。簡單匹配演算法的時間複雜度為 o m n kmp 匹配演算法。可以證明它的時間複雜度為 o m n 一.簡單匹配演算法 先來看乙個簡單匹配演算法的函式 int index bf char s char t...