// l-diff-elag.c
// << Algorithmique du texte >>
// Maxime Crochemore, Christophe Hancart et Thierry Lecroq
// Vuibert, 2001.
#include <stdio.h>
#include "chl.h"
#define C1(i) c1[(i) + 1]
#define C2(i) c2[(i) + 1]
void lDiffElag(Mot x, Longueur m, Mot y, Longueur n, int k) {
int i, j, p, *c, *c1, *c2;
c1 = (int *)malloc((m + 2)*(n + 2)*sizeof(int));
if (c1 == NULL) error("lDiffElag");
c2 = (int *)malloc((m + 2)*(n + 2)*sizeof(int));
if (c2 == NULL) error("lDiffElag");
for (i = -1; i <= m - 1; ++i)
C1(i) = i + 1;
p = k;
for (j = 0; j <= n - 1; ++j) {
C2(-1) = 0;
for (i = 0; i <= p; ++i)
if (x[i] == y[j])
C2(i) = C1(i - 1);
else
C2(i) = MIN(MIN(C1(i - 1), C2(i - 1)), C1(i)) + 1;
c = c1;
c1 = c2;
c2 = c;
while (C1(p) > k)
--p;
signalerSi(p == m - 1);
++p;
p = MIN(p, m - 1);
}
}