AccueilđŸ‡«đŸ‡·Chercher

Algorithme d'Ukkonen


En informatique, l'algorithme d'Ukkonen construit incrĂ©mentalement en temps linĂ©aire l'arbre des suffixes d'un mot. Cet algorithme a Ă©tĂ© proposĂ© par Esko Ukkonen (en) en 1995[1]. L'algorithme est essentiellement la linĂ©arisation d'une version naĂŻve quadratique d'un algorithme de construction de l’arbre des suffixes.

Algorithme d'Ukkonen
Construction de l'arbre des suffixes du mot
DĂ©couvreur ou inventeur
Esko Ukkonen (en)
Date de découverte
1995
ProblÚme lié
Recherche des suffixes dans une chaĂźne de caractĂšres
Structure des données
Complexité en temps
Pire cas
Moyenne

Principe

L'algorithme d'Ukkonen lit les caractĂšres les l'un aprĂšs l'autre, en faisant grossir la structure qu'il produit, de telle sorte que, Ă  tout instant, l'arbre obtenu est l'arbre des suffixes du prĂ©fixe lu. Cette lecture des caractĂšres du mot, qui progresse de gauche Ă  droite, confĂšre Ă  l'algorithme d'Ukkonen son incrĂ©mentalitĂ©. Dans le premier algorithme de construction de l’arbre des suffixes, proposĂ© par Peter Weiner, celui-ci lit le mot du dernier caractĂšre au premier, produisant les arbres des suffixes, du plus petit suffixe du mot donnĂ© au plus grand suffixe du mot (c'est-Ă -dire le mot lui-mĂȘme)[2]. Edward M. McCreight propose plus tard un algorithme plus simple, allant toujours de droite Ă  gauche dans la lecture du mot[3]. Dans sa prĂ©sentation, Esko Ukkonen propose d'abord sa version quadratique incrĂ©mentale de gauche Ă  droite qu'il linĂ©arise ensuite.

L'implĂ©mentation naĂŻve de la construction d'un arbre de suffixes en lisant le mot du dĂ©but Ă  la fin requiert une complexitĂ© temporelle O (n2) voire O(n3) en notation de Landau, oĂč n est la longueur de la chaĂźne. En exploitant un certain nombre de techniques algorithmiques, l'algorithme d'Ukkonen rĂ©duit ce temps Ă  O(n) (linĂ©aire), pour les alphabets de taille constante, et O(n log n) en gĂ©nĂ©ral, correspondant aux performances d'exĂ©cution des deux prĂ©cĂ©dents algorithmes.

Exemple

Explicitons l'exécution sur le mot . L'algorithme part de l'arbre ne contenant qu'une racine. Lisons les lettres de de gauche à droite.

Étape 1 : insertion de dans l'arbre.

Comme aucune arĂȘte partant de la racine n'est Ă©tiquetĂ©e par , on construit un nƓud correspondant au suffixe . À ce stade, on a construit un arbre suffixe correspondant au mot dont le seul suffixe est .

Étape 2 : insertion de dans l'arbre.

À ce stade, le mot entier considĂ©rĂ© est . Le suffixe devient et on ajoute le suffixe dans l'arbre.

À ce stade, le mot entier considĂ©rĂ© est 
        b
        a
    {\displaystyle ba}
.
Le suffixe 
        b
    {\displaystyle b}
 devient 
        b
        a
    {\displaystyle ba}
 et on ajoute le suffixe 
        a
    {\displaystyle a}
 dans l'arbre.
À ce stade, le mot entier considĂ©rĂ© est . Le suffixe devient et on ajoute le suffixe dans l'arbre.

Étape 3 : insertion de dans l'arbre.

À ce stade, le mot entier considĂ©rĂ© est . Comme prĂ©cĂ©demment, on met Ă  jour les suffixes et qui deviennent respectivement et puis on ajoute comme suffixe.

Étape 4 : insertion de dans l'arbre.

À ce stade, le mot entier considĂ©rĂ© est . On met Ă  jour les suffixes , et qui deviennent respectivement , et . En revanche, il n'est pas nĂ©cessaire d'insĂ©rer le suffixe qui est dĂ©jĂ  prĂ©sent dans l'arbre via l'arĂȘte . (on retient maintenant que les prochaines modifications vont avoir lieu sur l'arĂȘte , et que le plus long prĂ©fixe commun est . On garde ces informations).

Étape 5 : insertion de (mot considĂ©rĂ© est ) :

L'arĂȘte courante est , dont est toujours le prĂ©fixe. Il suffit donc de mettre Ă  jour les suffixes , et qui deviennent , et . Le plus long prĂ©fixe commun devient .

Étape 6 insertion de (mot considĂ©rĂ© est ) :

Les suffixes , et deviennent , et . En revanche, le suffixe n'est plus prĂ©fixe de . Il faut scinder l'arĂȘte aprĂšs qui est le plus long prĂ©fixe commun.

  • Étape 6.1 : on insĂšre un nƓud entre et , puis on rajoute une arĂȘte partant de ce nƓud (on a introduit un branchement). On a ainsi ajoutĂ© les suffixes et dans l'arbre. Il reste Ă  traiter les suffixes et .
  • Étape 6.2 : le suffixe a comme plus long prĂ©fixe commun avec l'arĂȘte . On sĂ©pare donc l'arĂȘte en insĂ©rant un nƓud entre et . On ajoute Ă©galement une arĂȘte partant de ce nƓud
  • Étape 6.3 : le suffixe a comme plus long prĂ©fixe avec l'arĂȘte . On insĂšre donc encore un nƓud entre et sur l'arĂȘte

Articles connexes

Bibliographie

  1. (en) E. Ukkonen, « On-line construction of suffix trees », Algorithmica, vol. 14, no 3,‎ , p. 249–260 (DOI 10.1007/BF01206331, lire en ligne)
  2. (en) Peter Weiner, 14th Annual Symposium on Switching and Automata Theory (SWAT 1973), , 1–11 p. (DOI 10.1109/SWAT.1973.13), « Linear pattern matching algorithms »
  3. (en) Edward Meyers McCreight, « A Space-Economical Suffix Tree Construction Algorithm », Journal of the ACM, vol. 23, no 2,‎ , p. 262–272 (DOI 10.1145/321941.321946)

Liens externes

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.