Bugfix: fix typo in baeza2
[2dmatching.git] / zhu.c
blob98d5f92de59e58ee77628b474af0f54404fadb3f
1 #include "code.h"
3 unsigned int zhu( char **text, char **pattern, int m, int n, int version )
5 double *text2 = ( double* ) malloc( n * n * sizeof( double ));
6 double *pattern2 = ( double* ) malloc( m * sizeof( double ));
8 unsigned int i = 0, j = 0, k = 0, matches;
10 /* Huge optimization instead of unsigned int B */
11 #define B 128
13 #define limit n * n - (n * ( m - 1 ))
15 /* Reduce text to 1d and calculate hash */
16 for( k = 0; k < limit; k = n + k )
17 for( j = 0 + k; j < n + k; j++ ) {
18 text2[j] = 0;
20 for( i = 0; i < m; i++ )
21 text2[j] = text2[j] * B + text[i][j] % Q;
24 /* Reduce pattern to 1d and calculate hash */
25 for( j = 0; j < m; j++ ) {
26 pattern2[j] = 0;
28 for( i = 0; i < m; i++ )
29 pattern2[j] = ( pattern2[j] * B ) + pattern[i][j] % Q;
32 if ( version == 1 )
33 matches = search_kmp( text2, pattern2, m, n );
35 else
36 matches = search_bm( text2, pattern2, m, n );
38 free(text2);
39 free(pattern2);
41 return matches;