// ls-une-memoire-faible.c
// << Algorithmique du texte >>
// Maxime Crochemore, Christophe Hancart et Thierry Lecroq
// Vuibert, 2001.
#include <stdio.h>
#include "chl.h"
void lsUneMemoireFaible(Mot x, Longueur m, int bonSuff[], Mot y, Longueur n) {
int i, j, dec, mem, turbo;
dec = 0;
mem = 0;
j = m - 1;
while (j < n) {
i = m - 1;
while (i >= 0 && x[i] == y[j - m + 1 + i])
if (i == m - dec)
i -= (mem - 1); // Saut
else
--i;
signalerSi(i < 0);
if (i < 0) {
dec = bonSuff[0];
mem = m - dec;
}
else {
turbo = mem - m + 1 + i;
if (turbo <= bonSuff[i]) {
dec = bonSuff[i];
mem = MIN(m - dec, m - i);
}
else {
dec = MAX(turbo, m - 1 - i);
mem = 0;
}
}
j += dec; // Décalage
}
}