• Aucun résultat trouvé

Notre arbre des suffixes tronqu´e

6.1

Arbre d’Aho-Corasick

On va donner dans cette section une rapide description de l’arbre d’Aho-Corasick et de son utilit´e en g´en´eral. Il est important de noter que l’arbre d’Aho-Corasick est connu depuis 1975 o`u il a ´et´e d´efini par Aho et al. [1]. Cette section n’a pas pour but de donner une nouvelle d´efinition de l’arbre d’Aho-Corasick mais de bien le d´efinir car cet arbre aura une utilit´e pour nous dans la section 7.2o`u on va g´en´eraliser cette structure. On verra de plus dans la section suivante (section 6.2), le lien qu’il y a entre l’arbre d’Aho-Corasick et l’arbre des suffixes.

L’arbre d’Aho-Corasick est `a la base d’un algorithme de recherche d’occurrences d’un ensemble de mots dans un texte. L’id´ee est de pr´e-traiter l’ensemble des mots et de les mettre sous forme d’arbre pour ensuite parcourir simultan´ement le texte et l’arbre.

6.1 Arbre d’Aho-Corasick 6 Arbres d’indexation On peut alors d´efinir l’arbre d’Aho-Corasick de mani`ere formelle :

D´efinition 6.1 Arbre d’Aho-Corasick (voir Figure 6.1) Soit P un ensemble de

mots, l’arbre d’Aho-Corasick de P , not´e AC(P ), est le graphe orient´e (V, A) tel que : V := {w | w est un pr´efixe d’un ´el´ement si de P }

A := {(u, v) ∈ V × V | u est le plus grand pr´efixe de v dans V }

Remarque 6.2 En r´ealit´e l’arbre d’Aho-Corasick que l’on vient de d´efinir est appel´e un trie. Ce qu’on appelle habituellement arbre d’Aho-Corasick est l’automate correspondant `

a la fusion des deux arbres que sont le trie que l’on vient de d´efinir et l’arbre des liens d’´echec que l’on va d´efinir apr`es. On a fait ici la s´eparation de l’automate en deux arbres pour permettre une meilleure compr´ehension. Par la suite, on continuera d’assimiler l’arbre d’Aho-Corasick au trie r´esultant de son automate.

Comme pour tout v ∈ V \ {ε}, il existe un unique u tel que (u, v) ∈ A, on a bien que AC(P ) forme un arbre o`u u est le parent de v et v est un enfant de u.

Dans la suite du m´emoire de th`ese, comme un nœud de l’arbre d’Aho-Corasick de P correspond `a un pr´efixe d’un mot de P , on confondra le nœud de l’arbre et le mot qu’il repr´esente.

Remarque 6.3 Pour un mot de P sur un alphabet Σ, tous les pr´efixes des mots de P sont des nœuds de AC(P ), on a donc que pour tout arc (u, v) de AC(P ), il existe a ∈ Σ tel que u.a = v. Pour repr´esenter AC(P ), la plupart du temps on utilise des nœuds non labellis´es mais pour chaque arc (u, v), on met une ´etiquette sur l’arc qui correspond `a la lettre a o`u u.a = v (voir Figure6.1a).

Dans la construction de l’arbre d’Aho-Corasick, on ajoute aussi des liens d’´echec qui sont l’application le de V dans V telle que pour un nœud v, le(v) est le plus grand suffixe de v qui est dans V (voir Figure6.1b).

D´efinition 6.4 Posons le graphe (V, B) o`u V sont les nœuds de AC(P ) et

B := {(u, v) ∈ V × V | le(u) = v}

On a alors que le graphe (V, B) est un arbre que l’on appelle arbre des liens d’´echecde P et que l’on note LE(P ).

L’algorithme d’Aho-Corasick construit l’arbre d’Aho-Corasick en temps lin´eaire en la norme de l’instance ainsi qu’un algorithme pour rechercher les occurrences d’un ensemble de mots P dans un texte w. On commence par construire l’arbre d’Aho-Corasick de l’ensemble de mots P . Une fois cet arbre cr´e´e, on parcourt simultan´ement le texte w et l’arbre. On commence en mettant un pointeur sur le d´ebut du texte et un autre pointeur sur la racine de l’arbre. Apr`es, on commence `a regarder la premi`ere lettre du texte. Si elle correspond `a une ´etiquette sur un des arcs entre la racine, on va sur l’enfant, sinon on prend le lien d’´echec. Et apr`es on recommence avec la position suivante. Si `a un moment on passe par un mot de P , on marque cette position comme ´etant une occurrence de ce mot.

6 Arbres d’indexation 6.1 Arbre d’Aho-Corasick b a a a b a b b a a b b a

(a) Arbre d’Aho-Corasick sans liens d’´echec

b a a a b a b b a a b b a (b) Arbre d’Aho-Corasick avec liens d’´echec

Figure 6.1 – Exemple d’arbres d’Aho-Corasick pour P := {baaab, bbab, abbaa}.

L’int´erˆet de cet algorithme est sa complexit´e : il est en temps lin´eaire en la taille des mots et du texte. En outre, c’est un des premiers algorithmes qui permet de trouver les it´erations d’un ensemble de mots sur un texte sans d´ependre, `a chaque ´etape de la recherche, du nombre de mots.

On va s’int´eresser `a cet arbre, car l’information utile pour trouver le chevauchement entre deux mots est comprise dans l’arbre d’Aho-Corasick. En effet, un chevauchement w d’un mot u sur un mot v est un pr´efixe de v, donc un nœud de l’arbre d’Aho-Corasick. De plus, w est un suffixe de u, on peut alors trouver une chaˆıne de liens d’´echec de u jusqu’`a w. On a alors que u est dans le sous-arbre de w de l’arbre des liens d’´echec et v est dans le sous-arbre de w de l’arbre d’Aho-Corasick.

Pour finir, on va regarder quelques propri´et´es de l’arbre d’Aho-Corasick qui sont connues et ´evidentes mais que l’on va formaliser.

Proposition 6.5 Soient P un ensemble de mots, AC(P ) = (V, AC) l’arbre d’Aho- Corasick de P et LE(P ) = (V, AL) l’arbre des liens d’´echec de P . On a alors que :

— |AC| = |AL| = |V | − 1,

— max({|w| | w ∈ P }) + 1 ≤ |V | ≤ ||P || + 1.

Les bornes de la proposition6.5sont strictes (voir Exemple6.7). La borne inf´erieure de |V | vient du fait que chaque pr´efixe de chaque mot u de P est dans V , c’est-`a-dire |u| + 1 pr´efixes en comptant le mot vide qui correspond `a la racine de l’arbre d’Aho-Corasick de P . La borne sup´erieure de |V | provient du fait qu’au maximum chaque pr´efixe de chaque mot de P correspond `a un nœud diff´erent de l’arbre d’Aho-Corasick de P et donc on a au maximum ||P || + 1 nœuds diff´erents en comptant la racine qui correspond au mot vide.

Remarque 6.6 Mˆeme si les bornes de V sont strictes, elles peuvent ˆetre am´elior´ees dans le cas o`u P est ou n’est pas factor-free.

— Dans le cas d’un ensemble de mots P non factor-free,

6.2 Arbre des suffixes 6 Arbres d’indexation — Dans le cas d’un ensemble de mots P factor-free,

max({|w| | w ∈ P }) + |P| ≤ |V | ≤ ||P || + 1.

Exemple 6.7 Soit P = {a, ab, abc, abcd}. On a alors que max({|w| | w ∈ P }) + 1 = |abcd| + 1 = 5, que |V | = 5 (voir Figure 6.2a) et que ||F actor − f ree(P )|| + 1 = ||{abcd}|| + 1 = 5.

Soit P = {anb, anc, and, ane}. On a alors que max({|w| | w ∈ P }) + |P | = |anb| + |{anb, anc, and, ane}| = n + 1 + 4 = n + 5, que |V | = n + 5 (voir Figure 6.2b) et que ||P || + 1 = 4n + 5. a b c d a ab abc abcd (a)

P = {a, ab, abc, abcd}

a a b c d e 5 n (b) P= {anb, anc, and, ane}

Figure6.2 – Exemple d’arbres d’Aho-Corasick.

Soit w = a1a2. . . an un mot. On pose w−1 le mot reverse de w, c’est-`a-dire que w−1 = anan−1. . . a1. On g´en´eralise la notation `a un ensemble de mots P , on a que P−1= {w−1| w ∈ P }.

Remarque 6.8 Soit P un ensemble de mots. Il est difficile en g´en´eral de comparer les tailles de AC(P ) et de AC(P−1) (voir Exemple 6.9).

Exemple 6.9 Soit P = {anb, anc, and, ane}. On a alors que P−1= {ban, canc, dan, ean} et donc pour AC(P ) = (V, A) et AC(P−1) = (V

R, AR), on a que |V | = n + 5 (voir Figure6.3a) et |VR| = 4n + 5 (voir Figure6.3b).

6.2

Arbre des suffixes

Dans le chapitre pr´ec´edent, on a pr´esent´e rapidement l’arbre d’Aho-Corasick. Dans cette section, on va aborder l’arbre des suffixes, qui peut ˆetre vu comme une version modifi´ee d’un arbre d’Aho-Corasick. Les arbres des suffixes sont des structures d’indexation qui sont connues et souvent utilis´ees [17, 35]. L’int´erˆet ici de pr´esenter une nouvelle repr´esentation de l’arbre des suffixes va nous permettre dans le chapitre9de simplifier les explications.

Pour commencer, l’arbre des suffixes est une structure d’indexation au mˆeme titre que la table des suffixes ou le FM-index. Il est admis que ces structures d’indexation sont

6 Arbres d’indexation 6.2 Arbre des suffixes a a b c d e 5 n (a) P = {anb, anc, and, ane} a a a a a a a a b c d e 5 4n (b) P−1= {ban, canc, dan, ean}

Figure 6.3 – Exemples de la diff´erence entre l’arbre d’Aho-Corasick d’un ensemble de mots P et de P−1.

´equivalentes, du point de vu fonctionnel : ce que l’on peut faire avec une, on peut le faire avec `a peu pr`es la mˆeme complexit´e avec une autre. On choisit ici l’arbre des suffixes, car c’est sans doute la structure d’indexation la plus connue. En outre, les explications seront plus simples que sur une table LCP d’une table des suffixes.

L’arbre des suffixes d’un mot w, not´e ST (w), est une structure d’indexation sous forme d’arbre orient´e de la racine vers les feuilles o`u on indexe l’ensemble des suffixes de w. Chaque nœud est repr´esent´e par une sous-chaˆıne de w et entre deux nœuds u et v, l’ancˆetre commun de u et v repr´esente le pr´efixe commun du mot reli´e `a u et du mot reli´e `a v. On peut donner une d´efinition un peu plus formelle en utilisant l’arbre d’Aho-Corasick.

D´efinition 6.10 Arbre des suffixes (voir figure 6.4b) L’arbre des suffixes d’un

mot w, not´e ST (w), est l’arbre AC(Suf f (w)) o`u on contracte tous les arcs (u, v) o`u u n’est pas dans Suf f (w) et n’a qu’un seul enfant.

a c b a a c b a c

(a) arbre d’Aho-Corasick de Suf f(w) 4 1 b c a a 2 b c a 3 ca

(b) arbre des suffixes de w

Figure 6.4 – Exemple d’arbres des suffixes pour w = abca et d’arbre d’Aho-Corasick pour Suf f (w). Pour la repr´esentation de l’arbre des suffixes on marque sur les nœuds qui correspondent `a un suffixe, la position du d´ebut du suffixe dans le nœud. Ces nœuds sont repr´esent´es par des rectangles alors que les autres nœuds internes sont repr´esent´es par des cercles.

Comme pour l’arbre d’Aho-Corasick, on confond la notion de nœud et de mot repr´esent´e par un nœud.

6.2 Arbre des suffixes 6 Arbres d’indexation

On peut alors encadrer la taille de l’arbre des suffixes d’un mot `a l’aide de la taille de l’arbre des suffixes du mot o`u on ajoute une lettre `a la fin qui n’apparaˆıt pas `a l’alphabet.

Proposition 6.11 Soient w un mot sur l’alphabet Σ et $ une lettre qui n’appartient pas `a Σ. Pour ST (w) = (V, A) et ST (w$) = (V$, A$), on a

|V$| − |w| ≤ |V | ≤ |V$|.

Remarque 6.12 La proposition 6.11, nous dit que le nombre de nœuds de ST (w) est plus petit ou ´egal au nombre de nœuds de ST (w$). On ne peut pas g´en´eraliser cette proposition au lien entre la taille de l’arbre des suffixes d’un mot et la taille de l’arbre des suffixes d’une sous-chaˆıne de ce mot (voir Exemple6.13).

Exemple 6.13 Soient w1 = ababca et w2 = ababcab, on a que w1 est une sous-chaˆıne de w2 et que le nombre de nœuds de ST (w1) est de 9 (voir Figure 6.5a) alors que le nombre de nœuds de ST (w2) est de 8 (voir Figure6.5b).

6 3 ac 1 ab ca b a 5 c a 4 ac 2 ab c a b

(a) Arbre des suffixes de w1 =

ababca 6 3 bac 1 ab cab ba 5 c ab 7 4 bac 2 ab cab b

(b) Arbre des suffixes de w2 =

ababcab

Figure 6.5 – Exemple d’un mot et d’une de ses sous-chaˆınes o`u la taille de l’arbre des suffixes du mot est plus petite que la taille de l’arbre des suffixes de sa sous-chaˆıne.

L’arbre des suffixes que l’on vient de d´efinir n’est pas l’arbre des suffixes classique comme celui d´efini par Weiner [96]. Comme l’arbre des suffixes classique a la propri´et´e de n’avoir aucun nœud avec un seul fils, le nombre de nœuds de l’arbre est lin´eaire en le nombre des feuilles. Grˆace `a la proposition 6.11, on a que l’arbre des suffixes ST (w) est lin´eaire en |w|. Il existe de nombreux algorithmes lin´eaires pour construire l’arbre des suffixes classique d’un mot w ([96, 58, 92]). On peut en un parcours de l’arbre des suffixes classiques de w, modifier la structure pour obtenir ST (w), on a donc que l’on peut construire ST (w) en temps lin´eaire en |w|.

On peut d´efinir de mˆeme l’arbre des suffixes g´en´eralis´e d’un ensemble de mots P , not´e GST (P ) qui correspond `a la fusion des arbres des suffixes des diff´erents mots de P . On a alors que GST (P ) est de taille lin´eaire en ||P || et on peut le construire en O(||P ||).

Pour un ensemble de mots, par la d´efinition de l’arbre des suffixes g´en´eralis´e, on a que le nombre de nœuds de GST (P ) est plus petit ou ´egal au nombre de nœuds de AC(Sw∈PSuf f (w)). La proposition suivante va faire de mˆeme le lien entre les nœuds de GST (P ) et les nœuds de AC(P−1). On a vu dans la section 1.7 que pour un mot w, le

6 Arbres d’indexation 6.2 Arbre des suffixes

mot w−1 est le renvers´e de w et que pour un ensemble de mots P , l’ensemble P−1 est l’ensemble de tous les mots renvers´e des mots de P .

Proposition 6.14 voir Figure 6.6 Soient P un ensemble de mots, GST (P ) = (VS, AS) l’arbre des suffixes g´en´eralis´e de P et AC(P−1) = (VC, AC) l’arbre d’Aho- Corasick de P−1. On a alors que :

VC−1⊆ VS. 54 4 3 2 1 b a a a 3 2 1 b a b b 5 4 3 2 1 a a b b a

(a) Arbre d’Aho-Corasick de P−1 avec ses liens d’´echec (14 nœuds). 5 4 2 2 a b b 3 1 b a b 2 ab a a 5 4 4 1 bb 1 aab a 3 3 a b b

(b) Arbre des suffixes de P (15 nœuds).

Figure6.6 – Exemple du lien donn´e par la proposition6.14pour P = {baaab, aabba,babb}. Dans chaque nœud v de l’arbre des suffixes g´en´eralis´e, on ajoute l’information de P osition − Suf fP(v) : on associe `a chaque mot de P une couleur unique et le num´ero correspond `a la position de d´ebut du suffixe dans le mot de la mˆeme couleur. Dans la mesure du possible, on ajoutera cette information sur chaque arbre des suffixes g´en´eralis´e.

Remarque 6.15 La proposition 6.14 nous dit que le nombre de nœuds de AC(P−1) est inf´erieur au nombre de nœuds de GST (P ) et ce pour tout ensemble de mots P . On ne peut pas faire le mˆeme lien entre GST (P ) et AC(P ) (voir Exemple6.16).

Exemple 6.16 Soit P = {ban, can, dan, ean}. On a alors que GST (P ) a n + 4 nœuds (voir Figure 6.7b) et que AC(P ) a 4n + 1 nœuds (voir Figure6.7a).

Le choix d’utiliser cette d´efinition de l’arbre des suffixes g´en´eralis´e est motiv´e par le fait que dans la d´efinition classique, en ajoutant une lettre unique `a la fin de chaque mot, la taille de l’alphabet est alors au moins lin´eaire en le nombre de mots de P .

Pour ne pas perdre d’information, pour un ensemble de mots P et pour chaque nœud v du GST (P ), on pose P osition − Suf fP(v) l’ensemble des paires (i, j) telles que le nœud v est le suffixe de si commen¸cant `a la position j (voir Figure6.6b).

De la mˆeme mani`ere qu’on a d´efini le lien d’´echec sur l’arbre d’Aho-Corasick, on d´efinit les liens suffixes. Pour un ensemble de mots P , le lien suffixe d’un nœud v du GST (P ), not´e ls(v), est le nœud u du GST (P ) tel que u est le suffixe de v de longueur |v| − 1.

6.2 Arbre des suffixes 6 Arbres d’indexation a a a a a a a a b c d e 5 4 × (n − 1)

(a) Arbre d’Aho-Corasick de P

1 an− 1b 1 an− 1c nnnn a 1 da n −1 1 ean −1 n1 n1n1 n1 3 33 3 2 22 2 a a 6 n − 2

(b) Arbre des suffixes de P

Figure 6.7 – Exemple d’un ensemble de mots P = {ban,can,dan, ean} o`u la taille de l’arbre des suffixes de P est plus petite que la taille de son arbre d’Aho-Corasick.

Remarque 6.17 Dans la d´efinition classique de l’arbre des suffixes, les liens suffixes sont d´efinis essentiellement sur les nœuds internes de l’arbre. Dans notre d´efinition, on d´efinit les liens suffixes sur l’ensemble des nœuds, les feuilles de l’arbre comprises.

On peut alors d´efinir l’arbre des liens suffixes.

D´efinition 6.18 voir Figure 6.8b Soit P un ensemble de mots. L’arbre des liens

suffixes de P , not´e LS(P ) est l’arbre (V, B) o`u V l’ensemble des nœuds de GST (P ) et B := {(u, v) ∈ V × V | ls(u) = v}.

La proposition 6.14, lie les nœuds de GST (P ) et les nœuds de AC(P−1) ; on va aller un peu plus loin en exprimant le lien entre AC(P−1) et LS(P ).

Proposition 6.19 voir Figure 6.8 Soit P un ensemble de mots. Pour LS(P ) = (VL, AL) et AC(P−1) = (VC, AC), on a que

6 Arbres d’indexation 6.3 G´en´eralisation de l’arbre des . . . D’apr`es la proposition 6.19, on a alors que AC(P−1) est alors en bijection avec un sous-arbre de LS(P ). 5 4 4 3 2 1 b a a a 3 2 1 b a b b 5 4 3 2 1 a a b b a

(a) Arbre d’Aho-Corasick de P−1 5 4 4 3 2 1 b a a a 3 2 1 b a b b 5 a 4 3 2 1 a a b b a

(b) Arbre des liens suffixes de P

Figure6.8 – Exemple du lien donn´e par la proposition6.19pour P = {baaab,aabba,babb}.

Remarque 6.20 L’arbre des suffixes g´en´eralis´e et l’arbre des liens suffixes sont deux arbres orient´es mais o`u l’orientation n’est pas la mˆeme. En effet, pour un ensemble de mots P , dans GST (P ), on a des arcs d’un nœud vers un nœud plus profond alors que dans LS(P ) on a des arcs d’un nœud vers un nœud moins profond.

6.3

G´en´eralisation de l’arbre des suffixes g´en´eralis´e

On introduit la notion de d´ependance par suffixe entre mots, et la notion de chaˆıne de mots d´ependants par suffixe pour pouvoir d´efinir un index qui g´en´eralise l’arbre des suffixes [58] et les arbres des suffixes tronqu´es que l’on peut trouver dans Na et al. [64] et dans Schulz et al. [80]. Cette g´en´eralisation va ˆetre utilis´ee dans la section suivante (section 6.4) pour d´efinir un nouvel arbre des suffixes tronqu´e qui va ensuite nous servir dans la section9.3 pour construire le graphe de De Bruijn.

D´efinition 6.21

1. Un mot x est ditd´ependant par suffixe d’un autre mot y si |ov(x, y)| = |x| − 1. 2. Soit w un mot et m un entier positif plus petit que |w| − 1. Un m-uplet de m

mots (x0, . . . , xm−1) est une chaˆıne de mots d´ependants par suffixe de w si x0 est un pr´efixe de w et pour tout i ∈ {2, . . . , m}, xi est un pr´efixe du suffixe de w commen¸cant `a la position i et tel que |xi| ≥ |xi−1| − 1.

6.3 G´en´eralisation de l’arbre des . . . 6 Arbres d’indexation suffixe de abbabbaa. En effet, on a

a b b a b b a a. a b b

b b

b a b b a a b b a a

Soient P := {s1, . . . , sn} un ensemble de mots et R = {C1, . . . , Cn} un ensemble de uplets tels que pour tout i ∈ {1, . . . , n}, Ci est une chaˆıne de mots d´ependants par suffixe de si. Soit bR := {cC1, . . . , cCn} l’ensemble des uplets tels que pour i ∈ {1, . . . , n} et j ∈ {1, . . . , |Ci|}, cC1(j) := |C1(j)|, i.e. bR contient des uplets de longueurs.

Avec bR et P , on peut facilement reconstruire R. Par la suite, on utilise R pour d´emontrer les r´esultats, et bR pour ´etablir les complexit´es des algorithmes. En effet, dans le cas o`u Ci est le uplet de tous les suffixes de si, la taille de Ci est lin´eaire en |si|2 alors que cCi est lin´eaire en |si|.

Soit w un mot ; w peut ˆetre dans diff´erents uplets de R. On d´efinit alors N (w) l’ensemble des (i, j) tels que w = Ci(j). En d’autres termes, N (w) est l’ensemble des coordonn´ees des ´el´ements de R qui sont ´egaux `a w. On pose de plus

R := [ i∈{1,...,n}

∪wj∈Ci{wj}

Exemple 6.23 Soient P = {abba, ababb} et R = {(ab, bba), (ab, bab, ab)}. On a alors b

R = {(2, 3), (2, 3, 2)} et que R = {ab, bab, bba}.

Comme on l’a fait avec l’arbre des suffixes, on va d´efinir une version contract´ee de l’arbre d’Aho-Corasick mais au lieu de prendre l’ensemble des suffixes d’un mot, on va prendre en entr´ee R.

On pose T (R), l’arbre d’Aho-Corasick de R dans lequel on a contract´e tous les arcs (u, v) o`u u n’est pas dans R et n’a qu’un seul enfant (voir Figure6.9).

2 ba 2 b a b 11 3 ab

Figure 6.9 – Exemple de T (R) pour P = {abba,ababb} et R = {(ab,bba), (ab,bab,ab)}. Dans chaque nœud v de T (R), on ajoute l’information de N (v) : on associe `a chaque mot de P une couleur unique et le num´ero correspond `a la position de d´ebut du suffixe dans le mot de la mˆeme couleur. Pour les ´etiquettes sur les arcs, la lecture se fait toujours dans le sens des arcs.

6 Arbres d’indexation 6.3 G´en´eralisation de l’arbre des . . . Remarque 6.24 Pour un mot w, N (w) est l’´equivalent de P osition − Suf fP(w) dans l’arbre T (R).

On note par N et L respectivement l’ensemble des nœuds et des feuilles de T (R). De plus, on d´efinit pour chaque nœud de v de T (R) deux poids :

— s(v) est le nombre de fois qu’un ´el´ement dans un uplet de R est ´egal `a v, i.e. s(v) := |N (v)|.

— t(v) est le nombre de fois que le premier ´el´ement d’un uplet de R est ´egal `a v, i.e. t(v) := |{(i, 1) ∈ N (v) | i ∈ {1, . . . , n}}|.

Soit w un mot. On pose Succ(w) := {(i, j) | (i, j − 1) ∈ N (w) et j ≤ |Ci|}. On d´efinit H comme le sous-ensemble de L tel que :

H := {u ∈ L | ∃C ∈ R et j < |C| tel que u = C(j)}

Il est ´equivalent de dire que H = {u ∈ L | Succ(u) 6= ∅}. Une fonction m de H vers N est appel´ee lien possible si pour tout nœud v de H, ∃(i, j) ∈ Succ(v) tel que m(v) = Ci(j).

On va pr´esenter un algorithme qui construit T (R) et calcule pour chaque nœud v de N , les poids s(v) et t(v) et un lien possible P0.

Construction de T (R). Maintenant, on va donner un algorithme pour construire T (R). On va utiliser une version de l’algorithme de McCreight [58] donn´ee par Na et al. [64] sur notre entr´ee et on va construire pour chaque feuille v, s(v), t(v) et P0(v). Pour construire T (R), on commence avec un arbre qui ne contient que la racine. Pour chaque mot w de chaque chaˆıne C de R, on cr´ee alors ou on actualise (s’il existe d´ej`a) le nœud w comme suit. Supposons qu’on garde en m´emoire le nœud v qui a ´et´e trait´e juste avant w.

Si w est le premier mot de C, on descend alors de la racine en comparant w avec les ´etiquettes de l’arbre. Si on cr´ee un nœud w, alors on initialise s(w) et t(w) `a 1 et PO(w) `

a nil. Si w existe d´ej`a, on incr´emente s(w) et t(w) de 1.

Si w n’est pas le premier mot de C, on commence `a partir de v et comme dans l’algorithme de McCreight, on cr´ee ou arrive sur un nœud repr´esentant w. Si on doit cr´eer ce nœud, s(w) est initialis´e `a 1, t(w) `a 0 et PO(w) `a nil. Sinon, on incr´emente s(w) de 1. Dans tous les cas on pose P0(v) = w.

La boucle continue avec le mot suivant jusqu’`a la fin et on obtient T (R).

Th´eor`eme 6.25 Pour un ensemble de chaˆınes de mots d´ependants par suffixe R, on