AccueilđŸ‡«đŸ‡·Chercher

Plus petit ancĂȘtre commun

En thĂ©orie des graphes, le plus petit ancĂȘtre commun de deux nƓuds d'un arbre est le nƓud le plus bas dans l'arbre (le plus profond) ayant ces deux nƓuds pour descendants. Le terme en anglais est Lowest Common Ancestor (LCA). Les expressions premier ancĂȘtre commun et plus proche ancĂȘtre commun sont aussi utilisĂ©es.

Dans cet arbre, le plus petit ancĂȘtre commun de x et y est le sommet vert foncĂ©. Les autres ancĂȘtres sont les sommets vert clair.

Divers algorithmes ont Ă©tĂ© inventĂ©s pour trouver rapidement le plus petit ancĂȘtre commun.

DĂ©finition

Étant donnĂ© un arbre, les ancĂȘtres communs de deux nƓuds, sont les sommets qui sont ancĂȘtres de ces deux nƓuds ; autrement dit ce sont les nƓuds qui ont ces deux nƓuds dans leurs descendances. Le plus petit ancĂȘtre commun (PPAC) Ă  ces deux nƓuds est l'ancĂȘtre commun le plus profond, c'est-Ă -dire le plus Ă©loignĂ© de la racine[1].

On peut aussi dĂ©finir une notion de plus petits ancĂȘtres communs dans un graphe orientĂ© acyclique (DAG).

Algorithmes

DĂ©finition et algorithme simple

La plupart des algorithmes qui ont Ă©tĂ© Ă©tudiĂ©s pour trouver le PPAC dans un arbre, ont Ă©tĂ© crĂ©Ă©s pour rĂ©pondre Ă  des requĂȘtes pour des couples de nƓuds. Ces algorithmes sont donc en deux phases : un preprocessing et un algorithme pour rĂ©pondre aux requĂȘtes (queries).

Un algorithme simple est de crĂ©er une table contenant tous les PPACs, puis de piocher dans ce tableau Ă  chaque requĂȘte. Cet algorithme a une complexitĂ© en temps de O(nÂČ) (oĂč n est la taille de l'arbre) pour le preproccesing (si l'on utilise la programmation dynamique), et les requĂȘtes sont traitĂ©es en temps constant[2].

Algorithmes rapides

De nombreux algorithmes optimaux ont Ă©tĂ© proposĂ©s pour rĂ©soudre le problĂšme PPAC. Ces algorithmes sont optimaux en ordre de grandeur, car ils ont une complexitĂ© linaire pour le preproccesing et un temps de requĂȘte constant.

Certains algorithmes utilisent des structures de données adaptées pour décomposer l'arbre en chemin, alors que d'autres se basent sur un parcours eulérien de l'arbre, et le calcul de range minimum query (en) (parfois appelé minimum d'intervalle[3]).

Variantes

Des algorithmes ont Ă©tĂ© inventĂ©s pour des cas plus gĂ©nĂ©raux, par exemple pour les DAG[4] et pour des modĂšles plus dynamiques avec ajouts et retraits de nƓuds[5].

Applications

Le plus petit ancĂȘtre commun est un objet utilisĂ© notamment en algorithmique du texte et en bio-informatique oĂč de nombreux objets peuvent ĂȘtre reprĂ©sentĂ©s par des arbres[6]. Un exemple important est la manipulation des arbres des suffixes, qui permettent de rĂ©soudre rapidement certains problĂšmes comme la recherche de la plus longue sous-chaĂźne commune[7].

Historique

Le problÚme qui consiste à trouver le PPAC a été défini la premiÚre fois[6] par Aho, Hopcroft et Ullman en 1973[8]. Le premier algorithme optimal est dû à Harel et Tarjan[9], il a ensuite été simplifié par Tarjan et Gabow grùce à la structure Union-Find[10] - [11], puis encore simplifié en 1988[12]. En 1993, Berkman et Vishkin ont publié un algorithme sur un principe complÚtement différent[13], simplifié en 2000[2].

Notes et références

  1. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest et Clifford Stein, Introduction Ă  l'algorithmique, Dunod, [dĂ©tail de l’édition], « 21.3. Algorithme diffĂ©rĂ© de Tarjan pour le premier ancĂȘtre commun », p. 508.
  2. Michael A. Bender et Martin Farach-Colton, « The LCA problem revisited », dans Proceedings of the 4th Latin American Symposium on Theoretical Informatics (LATIN), vol. 1776, Springer-Verlag, coll. « Lecture Notes in Computer Science », (DOI 10.1007/10719839_9, lire en ligne), p. 88-94.
  3. Charles Bouillaguet,Claire Mathieu, « Projet : plus proche ancĂȘtre commun », sur DĂ©partement informatique ENS, .
  4. Michael A. Bender, Farach-Colton, Giridhar Pemmasani, Steven Skiena et Pavel Sumazin, « Lowest common ancestors in trees and directed acyclic graphs », Journal of Algorithms, vol. 57, no 2,‎ , p. 75-94 (lire en ligne).
  5. Richard Cole et Ramesh Hariharan, « Dynamic LCA queries on trees », dans {Proceedings of the tenth annual ACM-SIAM symposium on Discrete algorithms},, , p. 235-244
  6. Johannes Fischer et Volker Heun, « Theoretical and Practical Improvements on the RMQ-Problem, with Applications to LCA and LCE », dans Proceedings of the 17th Annual Symposium on Combinatorial Pattern Matching, vol. 4009, Springer-Verlag, coll. « Lecture Notes in Computer Science », (DOI 10.1007/11780441_5), p. 36-48
  7. (en) Dan Gusfield, Algorithms on Strings, Trees and Sequences : Computer Science and Computational Biology, Cambridge/New York/Melbourne, Cambridge University Press, , 534 p. (ISBN 0-521-58519-8, lire en ligne)
  8. Alfred Aho, John Hopcroft et Jeffrey Ullman, « On finding lowest common ancestors in trees », dans Proc. 5th ACM Symp. Theory of Computing (STOC), (DOI 10.1145/800125.804056), p. 253-265.
  9. Dov Harel et Robert E. Tarjan, « Fast algorithms for finding nearest common ancestors », SIAM Journal on Computing, vol. 13, no 2,‎ , p. 338-355 (DOI 10.1137/0213024).
  10. Harold N. Gabow et Robert Endre, Tarjan, « A linear-time algorithm for a special case of disjoint set union », dans Proceedings of the fifteenth annual ACM symposium on Theory of computing, , p. 246-251.
  11. Voir Tarjan's off-line lowest common ancestors algorithm (en).
  12. Baruch Schieber et Uzi Vishkin, « On finding lowest common ancestors: simplification and parallelization », SIAM Journal on Computing, vol. 17, no 6,‎ , p. 1253-1262 (DOI 10.1137/0217079)
  13. Omer Berkman et Uzi Vishkin, « Recursive Star-Tree Parallel Data Structure », SIAM Journal on Computing, vol. 22, no 2,‎ , p. 221-242 (DOI 10.1137/0222017)
Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.