Bugfix: fix typo in baeza2
[2dmatching.git] / kmp.c
blob4ac034c3db60ae8dcc899784c964dec75224c91c
1 #include "code.h"
3 int kmpNext[128];
5 void prep_kmp( double *text2, double *pattern2, int m, int n )
7 int i, j;
9 i = 0;
10 j = kmpNext[0] = -1;
12 while (i < m) {
13 while (j > -1 && pattern2[i] != pattern2[j])
14 j = kmpNext[j];
15 i++;
16 j++;
18 if (pattern2[i] == pattern2[j])
19 kmpNext[i] = kmpNext[j];
20 else
21 kmpNext[i] = j;
26 unsigned int search_kmp( double *text2, double *pattern2, int m, int n )
28 prep_kmp( text2, pattern2, m, n );
30 unsigned int i, j, matches = 0;
32 i = j = 0;
33 while (i < n * n) {
34 while (j > -1 && pattern2[j] != text2[i])
35 j = kmpNext[j];
37 i++;
38 j++;
40 if (j == m) {
41 matches++;
42 j = kmpNext[j];
45 return matches;