// arbre-suffixes-bis.c
// << Algorithmique du texte >>
// Maxime Crochemore, Christophe Hancart et Thierry Lecroq
// Vuibert, 2001.
#include <stdio.h>
#include "chl.h"
#include "automate.h"
void descLenteBis(Etat p, int k, Etat *resp, int *resk, Mot y, Longueur n, Automate M) {
Etat e, f, q;
while (k < n && cible(p, y[k]) != NULL) {
q = cible(p, y[k]);
e = p;
f = q;
while (e != initial(M) && ls(f) == NULL) {
ls(f) = cible(ls(e), y[k]);
e = ls(e);
f = ls(f);
}
if (e == initial(M))
ls(f) = initial(M);
p = q;
++k;
}
*resp = p;
*resk = k;
}
Automate arbreSuffixesBis(Mot y, Longueur n) {
Automate M;
Etat fourche, p, q;
int i, j, k;
M = nouvelAutomate();
fourche = initial(M);
k = 0;
for (i = 0; i <= n - 1; ++i) {
if (k < i)
k = i;
descLenteBis(ls(fourche), k, &fourche, &k, y, n, M);
p = fourche;
for (j = k; j <= n - 1; ++j) {
q = nouvelEtat();
fixerCible(p, y[j], q);
p = q;
}
sortie(p) = i;
}
sortie(initial(M)) = n;
return(M);
}