280 likes | 486 Views
Knuth-Morris-Pratt algoritmus (KMP). Farkas Attila FAANABI.ELTE. Knuth-Morris-Pratt algoritmus (KMP). Knuth-Morris-Pratt algoritmus (KMP). Next []. Knuth-Morris-Pratt algoritmus (KMP). Knuth-Morris-Pratt algoritmus (KMP). Knuth-Morris-Pratt algoritmus (KMP).
E N D
Knuth-Morris-Pratt algoritmus (KMP) Farkas Attila FAANABI.ELTE
C++ implementáció teszt környezettel • #include <iostream> • #include <string> • usingnamespacestd; • string S="blablablablalakban"; • string M="blablalak"; • int next[100]; • int n=S.length(); • int m=M.length(); • bool u=false; • int k=0; • voidinitnext(){ • 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]; • } • } • } • // tombindexelesjavitasa -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; • }