// ls-plusieurs-memoires-faible.c // << Algorithmique du texte >> // Maxime Crochemore, Christophe Hancart et Thierry Lecroq // Vuibert, 2001. #include <stdio.h> #include "chl.h" void lsPlusieursMemoiresFaible(Mot x, Longueur m, int suff[], int bonSuff[], Mot y, Longueur n) { int i, j, k, s, *S; S = (int *)malloc(n*sizeof(int)); if (S == NULL) error("lsPlusieursMemoiresFaible"); for (j = 0; j < n; ++j) S[j] = 0; // memset(S, 0, n*sizeof(int)); j = m - 1; while (j < n) { i = m - 1; while (i >= 0) if (S[j - m + 1 + i] > 0) { k = S[j - m + 1 + i]; s = suff[i]; if (s != k) { i -= MIN(s, k); break; } else i -= k; // Saut } else if (x[i] == y[j - m + 1 + i]) --i; else break; signalerSi(i < 0); if (i < 0) { S[j] = m; j += bonSuff[0]; } else { S[j] = m - 1 - i; j += bonSuff[i]; } } }