All algorithms should return the number of matches
[2dmatching.git] / kmp.c
blobb260a0ffe491d8dc623dfd8e565dfad1166c5a78
1 #include "code.h"
3 int kmpNext[128];
5 void prep_kmp()
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()
28 prep_kmp();
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;