find_invariant
avance
Trouvez l'invariant de l'algorithme de Horspool (recherche de motif).
void horspool(char *t, int n, char *p, int m) {
int d[256];
for (int i = 0; i < 256; i++) d[i] = m;
for (int i = 0; i < m-1; i++) d[(unsigned char)p[i]] = m-1-i;
int k = 0;
while (k <= n - m) {
int j = m - 1;
while (j >= 0 && t[k+j] == p[j]) j--;
if (j < 0) { /* occurrence trouvée en k */ }
k += d[(unsigned char)t[k+m-1]];
}
}