knuth-morris-pratt algoritmus (kmp) farkas attila faanabi.elte
TRANSCRIPT
Knuth-Morris-Pratt algoritmus (KMP)Farkas Attila
FAANABI.ELTE
Knuth-Morris-Pratt algoritmus (KMP)
B L A B L A B L A B L A L A K B A NB L A B L A L A K
Knuth-Morris-Pratt algoritmus (KMP)
0 0 0 1 2 3 0 0Next[]
Knuth-Morris-Pratt algoritmus (KMP)
B L A B L A B L A B L A L A K B A NB L A B L A L A K
Knuth-Morris-Pratt algoritmus (KMP)
B L A B L A B L A B L A L A K B A NB L A B L A L A K
Knuth-Morris-Pratt algoritmus (KMP)
B L A B L A B L A B L A L A K B A NB L A B L A L A K
Knuth-Morris-Pratt algoritmus (KMP)
B L A B L A B L A B L A L A K B A NB L A B L A L A K
Knuth-Morris-Pratt algoritmus (KMP)
B L A B L A B L A B L A L A K B A NB L A B L A L A K
Knuth-Morris-Pratt algoritmus (KMP)
B L A B L A B L A B L A L A K B A NB L A B L A L A K
Knuth-Morris-Pratt algoritmus (KMP)
B L A B L A B L A B L A L A K B A NB L A B L A L A K
Knuth-Morris-Pratt algoritmus (KMP)
B L A B L A B L A B L A L A K B A NB L A B L A L A K
Knuth-Morris-Pratt algoritmus (KMP)
B L A B L A B L A B L A L A K B A NB L A B L A L A K
Knuth-Morris-Pratt algoritmus (KMP)
B L A B L A B L A B L A L A K B A NB L A B L A L A K
Knuth-Morris-Pratt algoritmus (KMP)
B L A B L A B L A B L A L A K B A NB L A B L A L A K
Knuth-Morris-Pratt algoritmus (KMP)
B L A B L A B L A B L A L A K B A NB L A B L A L A K
Knuth-Morris-Pratt algoritmus (KMP)
B L A B L A B L A B L A L A K B A NB L A B L A L A K
Knuth-Morris-Pratt algoritmus (KMP)
B L A B L A B L A B L A L A K B A NB L A B L A L A K
Knuth-Morris-Pratt algoritmus (KMP)
B L A B L A B L A B L A L A K B A NB L A B L A L A K
Knuth-Morris-Pratt algoritmus (KMP)
B L A B L A B L A B L A L A K B A NB L A B L A L A K
Knuth-Morris-Pratt algoritmus (KMP)
B L A B L A B L A B L A L A K B A NB L A B L A L A K
Knuth-Morris-Pratt algoritmus (KMP)
B L A B L A B L A B L A L A K B A NB L A B L A L A K
Knuth-Morris-Pratt algoritmus (KMP)
B L A B L A B L A B L A L A K B A NB L A B L A L A K
C++ Implementáció
C++ Implementáció
C++ implementáció teszt környezettel• #include <iostream>• #include <string>
• 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