AccueilđŸ‡«đŸ‡·Chercher

Raffinement de partition

En algorithmique, le raffinement de partition est une technique pour reprĂ©senter une partition d'un ensemble comme une structure de donnĂ©es qui permet d'affiner cette partition en sĂ©parant chaque ensemble en plusieurs sous-ensembles. En ce sens, ce concept peut-ĂȘtre vu comme dual de la structure de donnĂ©es d'union-find, qui cherche Ă  tenir Ă  jour une partition en effectuant des opĂ©rations de fusion sur des couples d'ensembles.

Le raffinement de partition est un Ă©lĂ©ment essentiel de plusieurs algorithmes efficaces en thĂ©orie des graphes ou en thĂ©orie des automates finis, tels que la minimisation des automates finis dĂ©terministes, l'algorithme de Coffman–Graham pour le sĂ©quençage de tĂąches, ou le parcours en largeur lexicographique des graphes[1] - [2] - [3].

Structure de données

Un algorithme de raffinement de partition permet de tenir Ă  jour une famille d'ensembles disjoints Si. À l'initialisation, cette famille contient un unique ensemble contenant tous les Ă©lĂ©ments prĂ©sents dans la structure de donnĂ©es. À chaque Ă©tape de l'algorithme, on prĂ©sente un ensemble X Ă  l'algorithme, et chaque ensemble Si de la famille qui contient un Ă©lĂ©ment de X est sĂ©parĂ© en deux ensembles : l'intersection Si ∩ X et la diffĂ©rence Si \ X.

Un tel algorihme peut ĂȘtre rĂ©alisĂ© en maintenant Ă  jour des structures de donnĂ©es reprĂ©sentant les informations suivantes [4] - [5]:

  1. La suite ordonnĂ©e des ensembles Si de la famille sous une forme qui permet d'insĂ©rer de nouveaux ensembles Ă  un endroit quelconque de la suite. Cela peut-ĂȘtre fait par exemple Ă  l'aide d'une liste doublement chaĂźnĂ©e.
  2. Chaque ensemble Si comme une collection qui permet une suppression efficace des Ă©lĂ©ments de la collection. Cela peut-ĂȘtre fait avec une liste doublement chaĂźnĂ©e.
  3. L'ensemble auquel appartient chaque élément dans la structure de données.

Une maniÚre alternative de représenter la seconde partie de la structure de données est de stocker tous les éléments de tous les ensembles dans un tableau simple ordonné selon l'ensemble auquel ils appartiennent, et en représentant la collection des éléments d'un sous-ensemble Si par la position des éléments de début et de fin de ce sous-ensemble dans le tableau.

Pour rĂ©aliser l'opĂ©ration de raffinement, on parcourt les Ă©lĂ©ments d'un ensemble X fixĂ©. Pour chaque Ă©lĂ©ment x de l'ensemble, on dĂ©termine l'ensemble Si qui contient x, et on vĂ©rifie qu'aucun autre ensemble n'a Ă©tĂ© crĂ©Ă© pour reprĂ©senter Si ∩ X. Si ce n'est pas le cas, on crĂ©e un second ensemble et on ajoute Si Ă  une liste L d'ensembles qui ont Ă©tĂ© sĂ©parĂ©s par l'opĂ©ration. Ensuite, indĂ©pendamment de la crĂ©ation d'un nouvel ensemble, on retire x de Si et on l'ajoute Ă  Si ∩ X. Dans la reprĂ©sentation oĂč tous les Ă©lĂ©ments sont stockĂ©s dans un tableau simple, dĂ©placer x d'un ensemble Ă  l'autre peut ĂȘtre rĂ©alisĂ© en Ă©changeant le contenu de la cellule contenant x avec le dernier Ă©lĂ©ment de Si, puis en dĂ©crĂ©mentant l'indice de fin de Si et l'indice de dĂ©but du nouvel ensemble Si ∩ X. Enfin, aprĂšs que tous les Ă©lĂ©ments de X aient Ă©tĂ© traitĂ©s de cette maniĂšre, on parcourt L et on sĂ©pare chaque ensemble courant Si (qui devient Si \ X) de l'ensemble Si ∩ X crĂ©Ă© Ă  partir de celui-ci, et on les note comme deux nouveaux ensembles crĂ©Ă©s par l'opĂ©ration de raffinement.

Le temps pour réaliser une opération de raffinement de cette maniÚre est en O(|X|). Il est indépendant du nombre d'éléments présents dans la famille d'ensembles, ainsi que du nombre total d'ensembles présents dans la structure de données. Par conséquent, le temps pour réaliser une suite de raffinements est proportionnel à la taille totale des ensembles passés en argument à l'algorithme à chaque étape du raffinement.

Applications

Minimisation des automates finis déterministes

Une des premiĂšres applications du raffinement de partition figure dans l'algorithme de minimisation des automates finis dĂ©terministes d'Hopcroft (1971)[6]. Dans ce problĂšme, l'entrĂ©e de l'algorithme est un automate fini dĂ©terministe dont on cherche Ă  trouver un automate Ă©quivalent ayant un nombre minimum d'Ă©tats. L'algorithme d'Hopcroft tient Ă  jour une partition des Ă©tats de l'automate en sous-ensembles, en conservant la propriĂ©tĂ© que deux Ă©tats quelconques appartenant Ă  diffĂ©rents ensembles doivent correspondre Ă  des Ă©tats diffĂ©rents de l'automate en sortie. À l'initialisation, on a deux sous-ensembles, un contenant tous les Ă©tats d'acceptation de l'automate, et l'autre contenant les Ă©tats restants. À chaque Ă©tape, on choisit un des sous-ensembles Si et l'un des symboles d'entrĂ©e x de l'automate; les sous-ensembles d'Ă©tats sont raffinĂ©s en Ă©tats pour lesquels la transition Ă©tiquetĂ©e x mĂšnent Ă  Si et les Ă©tats pour lesquels la transition Ă©tiquetĂ©e x mĂšnent ailleurs. Lorsqu'un ensemble Si qui a dĂ©jĂ  Ă©tĂ© choisi est sĂ©parĂ© par un raffinement, seul le plus petit ensemble des deux sous-ensembles crĂ©Ă©s doit ĂȘtre choisi Ă  nouveau. Ainsi, chaque Ă©tat participe aux ensembles X pour O(s log n) Ă©tapes de raffinement, et la totalitĂ© de l'algorithme prend un temps en O(ns log n), oĂč n est le nombre d'Ă©tats initiaux et s la taille de l'alphabet[6].

Séquençage de tùches

Sethi (1976)[7] applique le raffinement de partition Ă  une implĂ©mentation de l'algorithme de Coffman-Graham pour le sĂ©quençage de tĂąches parallĂšle. Sethi montre qu'on peut l'utiliser pour rĂ©aliser un tri topologique en ordre lexicographique d'un graphe dirigĂ© acyclique donnĂ© en temps linĂ©aire. Cet ordonnancement est une des Ă©tapes-clefs de l'algorithme de Coffman-Graham. Dans cette application, les Ă©lĂ©ments des ensembles de nƓuds du graphe en entrĂ©e et les ensembles X utilisĂ©s dans le raffinement de partition sont les ensembles de voisins des nƓuds. Comme le nombre total de voisins de l'ensemble des nƓuds du graphe est le nombre de liens du graphe, l'algorithme est en temps linĂ©aire du nombre de liens[7].

Parcours en largeur lexicographique

Le raffinement de partition est aussi une Ă©tape-clef du parcours en largeur lexicographique, un algorithme de parcours de graphe applicable Ă  la dĂ©tection des graphes cordaux et plusieurs autres classes de graphes importantes. Ici aussi, les Ă©lĂ©ments des ensembles sont les nƓuds du graphe et l'ensemble X reprĂ©sente l'ensemble des voisins, donc l'algorithme est en temps linĂ©aire en le nombre de liens du graphe[8] - [9].

Références

  1. (en) Robert Paige et Robert E. Tarjan, « Three partition refinement algorithms », SIAM Journal on Computing, vol. 16, no 6,‎ , p. 973–989 (DOI 10.1137/0216062, MR 917035).
  2. (en) Michel Habib, Christophe Paul et Laurent Viennot, « Partition refinement techniques: an interesting algorithmic tool kit », International Journal of Foundations of Computer Science, vol. 10, no 2,‎ , p. 147–170 (DOI 10.1142/S0129054199000125, MR 1759929).
  3. (en) Michel Habib, Christophe Paul et Laurent Viennot, « A synthesis on partition refinement: a useful routine for strings, graphs, Boolean matrices and automata », Proceedings of STACS 98: 15th Annual Symposium on Theoretical Aspects of Computer Science, Paris, France, Springer-Verlag, Lecture Notes in Computer Science, vol. 1373,‎ , p. 25–38 (ISBN 978-3-540-64230-5, DOI 10.1007/BFb0028546, MR 1650757).
  4. (en) Antti Valmari et Petri Lehtinen, « Efficient minimization of DFAs with partial transition functions », Proceedings of STACS 2008: 25th International Symposium on Theoretical Aspects of Computer Science, Dagstuhl, Allemagne, Schloss Dagstuhl: Leibniz-Zentrum fuer Informatik, leibniz International Proceedings in Informatics (LIPIcs), vol. 1,‎ , p. 645–656 (ISBN 978-3-939897-06-4, DOI 10.4230/LIPIcs.STACS.2008.1328, MR 2873773, lire en ligne).
  5. (en) Timo Knuutila, « Re-describing an algorithm by Hopcroft », Theoretical Computer Science, vol. 250, nos 1–2,‎ , p. 333–363 (ISSN 0304-3975, DOI 10.1016/S0304-3975(99)00150-4).
  6. (en) John Hopcroft, « An n log n algorithm for minimizing states in a finite automaton », dans Theory of machines and computations (Proc. Internat. Sympos., Technion, Haifa, 1971), New York, Academic Press, (MR 0403320), p. 189–196.
  7. (en) Ravi Sethi, « Scheduling graphs on two processors », SIAM Journal on Computing, vol. 5, no 1,‎ , p. 73–82 (DOI 10.1137/0205005, MR 0398156).
  8. (en) D.J.Rose, R.E.Tarjan et G.S.Lueker, « Algorithmic aspects of vertex elimination on graphs », SIAM Journal on Computing, vol. 5, no 2,‎ , p. 266–283 (DOI 10.1137/0205021).
  9. (en) Derek G.Corneil, « Lexicographic breadth first search – a survey », Proceedings of the 30th International Workshop on Graph-Theoretic Methods in Computer Science (WG 2004), Bad Honnef, Allemagne, Springer-Verlag, Lecture Notes in Computer Science, vol. 3353,‎ , p. 1–19 (DOI 10.1007/978-3-540-30559-0_1).
Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.