Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. Algorithme de Hopcroft de minimisation d'un automate fini
Algorithme de Hopcroft de minimisation d'un automate fini 👆 Click Here! Read More..
Un article de Wikipédia, l'encyclopédie libre.
Article principal : Minimisation d'un automate fini déterministe.

En informatique théorique, et notamment en théorie des automates finis, l'algorithme de Hopcroft de minimisation d'un automate fini, appelé ainsi d'après son inventeur John Hopcroft, est un algorithme calculant l’automate déterministe fini minimal, à partir d'un automate fini donné. Cet algorithme est — en 2010 — l'algorithme le plus efficace connu. Il opère en temps O ( s ⋅ n log ⁡ n ) {\displaystyle O(s\cdot n\log n)} {\displaystyle O(s\cdot n\log n)} pour un automate à n {\displaystyle n} {\displaystyle n} états sur un alphabet de s {\displaystyle s} {\displaystyle s} lettres.

Description de l'algorithme

[modifier | modifier le code]

L'algorithme est dû à John Hopcroft[1] et il a été présenté en 1971 ; il opère par raffinements successifs d'une partition initialement grossière de l'ensemble des états de l'automate déterministe fini à minimiser.

L'algorithme s'inscrit donc dans la famille des algorithmes de minimisation par raffinements successifs qui contient notamment l'algorithme de Moore de minimisation d'un automate fini ; il s'oppose aux algorithmes d'une autre nature comme l’algorithme de Brzozowski de minimisation d'un automate fini.

L'algorithme débute avec la partition la plus grossière, dont les deux classes sont composées des états terminaux et des autres. La partition est progressivement raffinée en un nombre croissant de classes plus petites. Chaque tour de l'algorithme partage des ensembles d'états en deux parties plus petites.

L'opération de base est la coupure (« splitting » en anglais)[2]. Un ensemble d'états X {\displaystyle X} {\displaystyle X} est coupé par la paire ( Z , a ) {\displaystyle (Z,a)} {\displaystyle (Z,a)} formée d'un ensemble Z {\displaystyle Z} {\displaystyle Z} et d'une lettre a {\displaystyle a} {\displaystyle a} si les ensembles

X ′ = { q ∈ X ∣ q ⋅ a ∈ Z } {\displaystyle X'=\{q\in X\mid q\cdot a\in Z\}} {\displaystyle X'=\{q\in X\mid q\cdot a\in Z\}} et X ″ = { q ∈ X ∣ q ⋅ a ∉ Z } {\displaystyle X''=\{q\in X\mid q\cdot a\notin Z\}} {\displaystyle X''=\{q\in X\mid q\cdot a\notin Z\}}

sont tous les deux non vides. Dans le cas contraire, on dit que X {\displaystyle X} {\displaystyle X} est stable pour ( Z , a ) {\displaystyle (Z,a)} {\displaystyle (Z,a)}.

L'algorithme maintient un ensemble W {\displaystyle {\mathcal {W}}} {\displaystyle {\mathcal {W}}} de couples ( Z , a ) {\displaystyle (Z,a)} {\displaystyle (Z,a)}, candidats à couper des éléments de la partition en cours ; cet ensemble de candidats en attente est appelé le « waiting set » en anglais.

Pseudo-code

[modifier | modifier le code]

L'algorithme est décrit par le pseudo-code suivant :

P := {F, Q \ F};                                             "Partition initiale"
W := l'ensemble vide;                                        "Candidats en attente"
for each a in A do
     ajouter (min(F, Q\F),a) à W;                            "Initialisation de l'ensemble W"
while (W ≠ l'ensemble vide) do
     choisir ensemble (Z,a) dans W et l'enlever de W
     for each X de P coupé par (Z,a) en X' et X'' do         "Calcul de la coupe"
          remplacer X in P par les deux ensembles X' et X''  "Raffinement de la partition"
          for each b in A do                                 "Mise à jour de l'ensemble" 
               if (X,b) est in W                             "des candidats en attente"
                    remplacer (X,b) in W par (X',b) et (X'',b)
               else
                    ajouter le plus petit de (X',b) et (X'',b) à W;
          end;
     end;
end;

Description formelle

[modifier | modifier le code]

Le lemme suivant[3] est facile à prouver, mais il est à la base du mécanisme de mise à jour du waiting set dans l'algorithme :

Lemme — Soient X {\displaystyle X} {\displaystyle X} et Z = Z ′ ∪ Z ″ {\displaystyle Z=Z'\cup Z''} {\displaystyle Z=Z'\cup Z''} deux ensembles d'états, avec Z ′ {\displaystyle Z'} {\displaystyle Z'} et Z ″ {\displaystyle Z''} {\displaystyle Z''} disjoints non vides, et soit a {\displaystyle a} {\displaystyle a} une lettre.

  • Si X {\displaystyle X} {\displaystyle X} est stable pour ( Z , a ) {\displaystyle (Z,a)} {\displaystyle (Z,a)} et pour ( Z ′ , a ) {\displaystyle (Z',a)} {\displaystyle (Z',a)}, alors X {\displaystyle X} {\displaystyle X} est stable pour ( Z ″ , a ) {\displaystyle (Z'',a)} {\displaystyle (Z'',a)}.
  • Si X {\displaystyle X} {\displaystyle X} est stable pour ( Z ′ , a ) {\displaystyle (Z',a)} {\displaystyle (Z',a)} et pour ( Z ″ , a ) {\displaystyle (Z'',a)} {\displaystyle (Z'',a)}, alors X {\displaystyle X} {\displaystyle X} est stable pour ( Z , a ) {\displaystyle (Z,a)} {\displaystyle (Z,a)}.

Le but de l'algorithme est d'obtenir par coupes successives un automate déterministe minimal. L'algorithme procède en testant la stabilité de chaque groupe d'états de la partition P {\displaystyle P} {\displaystyle P} par toutes les coupes possibles.

L'algorithme débute avec la partition P {\displaystyle P} {\displaystyle P} composée de l'ensemble des états terminaux T {\displaystyle T} {\displaystyle T} et de l'ensemble des états non terminaux Q ∖ T {\displaystyle Q\setminus T} {\displaystyle Q\setminus T}. W {\displaystyle {\mathcal {W}}} {\displaystyle {\mathcal {W}}} est l'ensemble des candidats en attente pour raffiner la partition P {\displaystyle P} {\displaystyle P}. On ajoute à W {\displaystyle {\mathcal {W}}} {\displaystyle {\mathcal {W}}} tout couple de la forme ( S , a ) {\displaystyle (S,a)} {\displaystyle (S,a)}, avec a {\displaystyle a} {\displaystyle a} une lettre et S {\displaystyle S} {\displaystyle S} le plus petit des ensembles T {\displaystyle T} {\displaystyle T} et Q ∖ T {\displaystyle Q\setminus T} {\displaystyle Q\setminus T}.

L'algorithme choisit itérativement un ensemble ( Z , a ) {\displaystyle (Z,a)} {\displaystyle (Z,a)} dans l'ensemble des candidats en attente W {\displaystyle {\mathcal {W}}} {\displaystyle {\mathcal {W}}}, le retire de l'ensemble et, pour chaque partie X {\displaystyle X} {\displaystyle X} de la partition courante, il teste si X {\displaystyle X} {\displaystyle X} est coupé par ( Z , a ) {\displaystyle (Z,a)} {\displaystyle (Z,a)}. Dans l’affirmative, la partition est mise à jour en remplaçant X {\displaystyle X} {\displaystyle X} par les deux parties X ′ {\displaystyle X'} {\displaystyle X'} et X ″ {\displaystyle X''} {\displaystyle X''} résultant de la coupure. De plus, l'ensemble des candidats en attente est augmenté, pour toute lettre b {\displaystyle b} {\displaystyle b}, de ( X ′ , b ) {\displaystyle (X',b)} {\displaystyle (X',b)} et ( X ″ , b ) {\displaystyle (X'',b)} {\displaystyle (X'',b)} ou du plus petit de ( X ′ , b ) {\displaystyle (X',b)} {\displaystyle (X',b)} et ( X ″ , b ) {\displaystyle (X'',b)} {\displaystyle (X'',b)}, selon que ( X , b ) {\displaystyle (X,b)} {\displaystyle (X,b)} est dans ce waiting set ou non.

À chaque itération, soit l'ensemble W {\displaystyle {\mathcal {W}}} {\displaystyle {\mathcal {W}}} perd un élément, soit la partition est raffinée. Comme la partition ne peut être raffinée indéfiniment parce que l'automate est fini, le nombre d'itérations est donc fini. Ceci prouve donc la terminaison de l'algorithme.

Complexité et optimalité

[modifier | modifier le code]

La complexité en temps de l’algorithme de Hopcroft, dans le pire des cas, est O ( s ⋅ n log ⁡ n ) {\displaystyle O(s\cdot n\log n)} {\displaystyle O(s\cdot n\log n)} où n {\displaystyle n} {\displaystyle n} est le nombre d'états de l'automate et s {\displaystyle s} {\displaystyle s} est la taille de l'alphabet. La borne est conséquence du fait que, pour chacune des s n {\displaystyle sn} {\displaystyle sn} transitions de l'automate, les ensembles retirés du waiting set qui contiennent l'état d'arrivée d'une transition ont une taille diminuée de moitié au moins à chaque fois, donc chaque transition participe à au plus O ( log ⁡ n ) {\displaystyle O(\log n)} {\displaystyle O(\log n)} étapes de coupure dans l'algorithme. Une structure de données appropriée permet de réaliser le raffinement d'une partition par une coupure en un temps proportionnel au nombre de transitions qui y sont impliquées[1],[4].

L'algorithme de Hopcroft est le plus efficace des algorithmes de minimisation connus en 2010[5]. L'algorithme initial demande que l'automate de départ soit déterministe et complet. On peut adapter l'algorithme au cas des automates déterministes finis incomplets[6]. L'implémentation est en temps O ( n + m ⋅ log ⁡ m ) {\displaystyle O(n+m\cdot \log m)} {\displaystyle O(n+m\cdot \log m)}, où m {\displaystyle m} {\displaystyle m} est le nombre de transitions de l'automate. On a toujours m ≤ s n {\displaystyle m\leq sn} {\displaystyle m\leq sn}.

Il reste un certain degré de liberté dans le choix du candidat que l'on retire de l'ensemble W {\displaystyle {\mathcal {W}}} {\displaystyle {\mathcal {W}}} des candidats en attente. Cela dépend aussi du choix de la structure de donnée choisie : l'ensemble peut être par exemple organisé en pile (structure LIFO) ou en file (structure FIFO). Des expériences pratiques ont conclu à une meilleure efficacité de la représentation par pile plutôt que par file, et cet avantage a été démontré. Il a été prouvé qu'un choix approprié de la stratégie permet à l'algorithme de Hopcroft d'être toujours meilleur que l'algorithme de Moore[5],[7]. En particulier, l'algorithme a une complexité en moyenne en O ( s n log ⁡ log ⁡ n ) {\displaystyle O(sn\log \log n)} {\displaystyle O(sn\log \log n)}.

Notes et références

[modifier | modifier le code]
  1. ↑ a et b Hopcroft 1971.
  2. ↑ Le terme coupure est employé par Carton 2008, p. 49.
  3. ↑ Carton 2008, p. 49.
  4. ↑ Aho, Hopcroft et Ullman 1974
  5. ↑ a et b Berstel et al. 2010.
  6. ↑ Anti Valmari, « Fast brief practical DFA minimization », Information Processing Letters, vol. 112, no 6,‎ mars 2012, p. 213-217 (DOI 10.1016/j.ipl.2011.12.004).
  7. ↑ David 2012.

Articles connexes

[modifier | modifier le code]
  • Algorithme de Moore de minimisation d'un automate fini
  • Algorithme de Brzozowski de minimisation d'un automate fini

Bibliographie

[modifier | modifier le code]
Article original
  • 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, 1971 (MR 0403320), p. 189–196. — Version préliminaire Technical Report STAN-CS-71-190, Stanford University, Computer Science Department, janvier 1971.
Manuels
  • Alfred V. Aho, John E. Hopcroft et Jeffrey D. Ullman, The Design and Analysis of Computer Algorithms, Addison-Wesley, 1974, p. 157–162 (Chapitre 4.13 Partitioning).
  • Olivier Carton, Langages formels, calculabilité et complexité, 2008 [détail de l’édition] (lire en ligne)
  • (en) John E. Hopcroft, Rajeev Motwani et Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, Addison-Wesley, 2007, 3e éd. (ISBN 978-0-32146225-1)
  • Jean Berstel, Luc Boasson, Olivier Carton et Isabelle Fagnot, « Minimization of Automata », dans Automata: from Mathematics to Applications, European Mathematical Society, 2010 (arXiv 1010.5318)
Articles
  • (en) Julien David, « Average complexity of Moore’s and Hopcroft’s algorithms », Theoretical Computer Science, vol. 417,‎ 2012, p. 50–65 (DOI 10.1016/j.tcs.2011.10.011).
  • (en) Andrei Păun, Mihaela Păun et Alfonso Rodríguez-Patón, « On the Hopcroft’s minimization technique for DFA and DFCA », Theoretical Computer Science, vol. 410, nos 24-25,‎ 2009, p. 2424–2430 (DOI 10.1016/j.tcs.2009.02.034).
  • Manuel Baclet et Claire Pagetti, « Around Hopcroft’s Algorithm », dans International Conference on Implementation and Application of Automata, coll. « Lecture Notes in Computer Science » (no 4094), 2006, 114–125 p. (DOI 10.1007/11812128_12).
  • (en) David Gries, « Describing an algorithm by Hopcroft », Acta Informatica, vol. 2, no 2,‎ 1973, p. 97-109 (DOI 10.1007/BF00264025).
  • *Timo Knuutila, « Re-describing an algorithm by Hopcroft », Theoretical Computer Science, vol. 250, nos 1-2,‎ 2001, p. 333–363 (DOI 10.1016/S0304-3975(99)00150-4, MR 1795249).
v · m
Automates finis et langages réguliers
Articles généraux
  • Théorie des automates
  • Automate fini
  • Machine abstraite
Automates finis
  • Automate fini déterministe
  • Automate fini inambigu
  • Automate fini non déterministe
  • Construction par sous-ensembles
  • Automate sur les mots infinis
Automates finis particuliers
  • Automate alternant
  • Automate bidirectionnel
  • Automate pondéré
  • Automate probabiliste
  • Automate quantique
  • Automate temporisé
  • Automate de Büchi
  • Automate de Muller
  • Modèle de Markov caché
  • Système de transition d'états
  • Structure de Kripke
  • Machine à états abstraits
  • Machine de Mealy
  • Machine de Moore
  • Transducteur fini
  • Automate séquentiel
Langages réguliers
  • Langage rationnel
  • Langage sans étoile
  • Langage local
  • Langage congruentiel
  • Langage stochastique
  • Lemme de l'étoile
  • Lemme d'Arden
  • ω-langage rationnel
Des automates aux langages
  • Expression régulière
  • Algorithme de Conway
  • Algorithme de McNaughton et Yamada
  • Méthode de Brzozowski et McCluskey
Des langages aux automates
  • Dérivée de Brzozowski
  • Algorithme de Thompson
  • Construction de Glushkov
  • Complexité en états
Minimisation
  • Théorème de Myhill-Nerode
  • Équivalence de Nerode
  • Minimisation d'un automate fini déterministe
  • Algorithme de Moore
  • Algorithme de Brzozowski
  • Algorithme de Hopcroft
Équivalences
  • Théorème de Kleene
  • Étoile de Kleene
  • Monoïde syntaxique
  • Théorème des variétés d'Eilenberg
  • icône décorative Portail de l'informatique théorique
Ce document provient de « https://fr.wikipedia.org/w/index.php?title=Algorithme_de_Hopcroft_de_minimisation_d%27un_automate_fini&oldid=229569159 ».
Catégories :
  • Automates finis et langages réguliers
  • Théorie des automates
Catégories cachées :
  • Portail:Informatique théorique/Articles liés
  • Portail:Informatique/Articles liés
  • Portail:Mathématiques/Articles liés
  • Portail:Sciences/Articles liés

  • indonesia
  • Polski
  • الرية
  • Deutsch
  • English
  • Español
  • Français
  • Italiano
  • مصر
  • Nederlands
  • 本語
  • Português
  • Sinugboanong Binisaya
  • Svenska
  • Українска
  • Tiếng Việt
  • Winaray
  • 中文
  • Русски
Sunting pranala
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022
Email: pmb@teknokrat.ac.id