Advertisement
LinKin

KMP

Jun 12th, 2014
357
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.83 KB | None | 0 0
  1. /*
  2.  * Algorithm : Knuth Morris Pratt
  3.  *             String Matching
  4.  * Complexity : O( N )
  5.  * Note : 0 base indexing
  6.  */
  7. #define MAX 100007
  8. long F[MAX+7];// keep longest prefix length of i length suffix
  9. void failure_function( char *pattern, long len ){
  10.     F[0] = F[1] = 0;
  11.     long i,j;
  12.     for( i=2;i<=len;i++ ){
  13.         j = F[i-1];
  14.         while( 1 ){
  15.             if( pattern[j] == pattern[i-1] ){ F[i] = j + 1; break; }
  16.             if( j==0) { F[i] = 0; break; }
  17.             j = F[j];
  18.         }
  19.     }
  20. }
  21. void KMP( char *text, long len_t, char *pattern, long len_p  ){
  22.     failure_function( pattern, len_p );
  23.     long i = 0,j = 0;
  24.     while( j<len_t ){
  25.         if( text[j] == pattern[i] ) {
  26.             i++;j++;
  27.             if( i == len_p ) ;// match found
  28.         } else if( i > 0 ) i = F[i];
  29.         else j++;
  30.     }
  31. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement