資料結構 KMP演算法

2021-08-30 04:41:45 字數 794 閱讀 6863

課本知識和競賽用的還是略微有些差別:

比如: abcabaa

按照最長公共前字尾的求法:

先得到:0001211

之後去掉最後一位,得到000121,再把第一位賦值為-1;即-1000121,這個就是我們一般做oj題用的所謂next陣列;

但是按照課本的求法:你會發現結果卻是0111232,

#include#include#include#includeusing namespace std;

const int max=500;

int next[max];

int nextval[max];

typedef structsstring;

int index_kmp(sstring s,sstring t,int pos)

else

j=next[j];

} if(j>t.length) return i-t.length;

else return 0;

}void get_next(sstring t,int next){

int i=1;

next[1]=0;

int j=0;

while(i>s.ch+1;

s.length=strlen(s.ch+1);

cout<<"請輸入子串t"<>t.ch+1;

t.length=strlen(t.ch+1);

int m=s.length;

int n=t.length;

cout<<"主串為"<╮(╯_╰)╭,原始的才是最經典的。

資料結構 KMP演算法

求串的模式值next n 定義 1 next 0 1 意義 任何串的第乙個字元的模式值規定為 1。2 next j 1 意義 模式串t中下標為j的字元,如果與首字元相同,且 j的前面的 1 k個字元與開頭的 1 k個字元不等 或者相等但t k t j 1 k 如 t abcabcad 則next 6...

資料結構 KMP演算法

在我的理解,kmp演算法最核心的同時最難理解的是這個next 函式。但是,next 的值是挺好求的,難在哪呢?這個函式難在邏輯。理解起來很費勁,但真的很好用,並且這個函式的結果很好求。例如求模式串t ababaaa 的next j 的函式值 是這樣的,當j 0,next 0 1,對於任何子串,第乙個...

資料結構 KMP演算法

要完善乙個string字串類,那麼實現查詢子串的功能是必不可少的,實現子串查詢可以使用樸素演算法,每次匹配乙個字元後向右移動乙個位置,這樣執行下來效率是比較低的,所以就有了kmp演算法,它能夠準確的知道當前字元不匹配後字串應該向右移動多少位,由於剛接觸kmp演算法,所以很多還明白的不是很透徹,在此記...