home *** CD-ROM | disk | FTP | other *** search
- /* Das Robin-Karp-Verfahren ermöglicht lineare Suchzeiten,
- * unabhängig von der Eingabe
- */
-
- #define q 33554393
- #define d 32
-
- long RK_Search(unsigned char *Puffer,
- unsigned char *Pattern,
- long size)
- {
- long i,j,M=strlen(Pattern),N=size,dM=1,h1=0,h2=0;
-
- for( i=1; i<M ; i++ )
- dM=(d*dM)%q;
-
- for( i=0; i<M ;i++ ) {
- h1 = (h1 << 5 + (long)Pattern[i]) % q;
- h2 = (h2 << 5 + (long)Puffer[i]) % q;
- }
-
- for( i=0; h1 != h2 ;i++ ) {
- h2 = (h2 + d*q - (long)Puffer[i] * dM) % q;
- h2 = (h2<<5 + (long)Puffer[i+M]) % q;
- if( i > N-M )
- return N;
- }
- return i;
- }
-