Knuth-Morris-Pratt algoritmus (KMP) Farkas Attila FAANABI.ELTE
Knuth-Morris-Pratt algoritmus (KMP) BLABLABLABLALAKBAN BLABLALAK
Next[]
Knuth-Morris-Pratt algoritmus (KMP) BLABLABLABLALAKBAN BLABLALAK
BLABLABLABLALAKBAN BLABLALAK
BLABLABLABLALAKBAN BLABLALAK
BLABLABLABLALAKBAN BLABLALAK
BLABLABLABLALAKBAN BLABLALAK
BLABLABLABLALAKBAN BLABLALAK
BLABLABLABLALAKBAN BLABLALAK
BLABLABLABLALAKBAN BLABLALAK
BLABLABLABLALAKBAN BLABLALAK
BLABLABLABLALAKBAN BLABLALAK
BLABLABLABLALAKBAN BLABLALAK
BLABLABLABLALAKBAN BLABLALAK
BLABLABLABLALAKBAN BLABLALAK
BLABLABLABLALAKBAN BLABLALAK
BLABLABLABLALAKBAN BLABLALAK
BLABLABLABLALAKBAN BLABLALAK
BLABLABLABLALAKBAN BLABLALAK
BLABLABLABLALAKBAN BLABLALAK
BLABLABLABLALAKBAN BLABLALAK
C++ Implementáció
C++ implementáció teszt környezettel #include using namespace std; string S="blablablablalakban"; string M="blablalak"; int next[100]; int n=S.length(); int m=M.length(); bool u=false; int k=0; void initnext(){ int i,j; i=1; j=0; next[0]=0; while(i<m-1){ if(M[i]==M[j]){ i++; j++; next[i]=j; }else{ if(j==0){ i++; next[i]=0; }else{ j=next[j]; } // tomb indexeles javitasa -1 iranyba int tmp[100]; for(int i=0;i<99;i++){ tmp[i]=next[i+1]; } for(int i=0;i<99;i++){ next[i]=tmp[i]; } void KMP(){ initnext(); int i,j; i=0; j=0; while(i<n && j<m){ if(S[i]==M[j]){ i++; j++; }else{ if(j==0){ // a minta elejer ugrunk i++; }else{ j=next[j]; } if(j==m){ k=i-m; u=true; }else{ u=false; } int main(){ cout << S << endl; cout << M << endl; initnext(); cout << " " << endl; for(int i=0;i<m-1;i++){ cout << next[i] ; } cout << endl; KMP(); cout << "Megtalalhato?(0=nem;1=igaz)" << u << endl; return 0; }
Vége