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 */
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
++ ) {
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
++ ) {
28 for( i
= 0; i
< m
; i
++ )
29 pattern2
[j
] = ( pattern2
[j
] * B
) + pattern
[i
][j
] % Q
;
33 matches
= search_kmp( text2
, pattern2
, m
, n
);
36 matches
= search_bm( text2
, pattern2
, m
, n
);