« Minimisation d'un automate fini déterministe » : différence entre les versions

Un article de Wikipédia, l'encyclopédie libre.
Contenu supprimé Contenu ajouté
ManiacParisien (discuter | contributions)
Nouvelle page : File:DFA to be minimized.jpg|thumb|upright=1.5|Dans cet automate, ltous les états sont accessible, les états ''c, d'' et ''e'' sont indistinguables, ainsi que les états ''a'...
Balise : Nowiki dans un article
(Aucune différence)

Version du 1 décembre 2014 à 09:25

Dans cet automate, ltous les états sont accessible, les états c, d et e sont indistinguables, ainsi que les états a et b.
Automate minimal équivalent. Les états indistinguables sont regroupés en états.

In automata theory (a branch of computer science), DFA minimization is the task of transforming a given deterministic finite automaton (DFA) into an equivalent DFA that has a minimum number of states. Here, two DFAs are called equivalent if they recognize the same regular language. Several different algorithms accomplishing this task are known and described in standard textbooks on automata theory.[1]

En Informatique, et plus particulièrement en théorie des automates, la minimisation d'un automate fini déterministe est l'opération qui consiste à transformer un automate fini déterministe donné en un automate fini déterministe ayant le nombre minimal d'états et qui reconnaît le même langage rationnel. La minimisation a une importance pratique évidente par le gain d'espace qu'elle peut procurer. Il est souvent notable dans le cas de dictionnaires, ou d'autres ensembles finis de données. Il existe plusieurs algorithmes pour effectuer cette opération de minimisation; les plus usuels sont décrits pour la plupart dans les manuels traitant de théorie des automates[2].

Les algorithmes généraux les plus connus - nommés d'après leur inventeurs - sont l'algorithme de Brzozowski, l'algorithme de Moore, et l'algorithme de Hopcroft. D'autres algorithmes spécifiques existent, par exemple pour la minimisation d'automates reconnaissant des ensembles finis de mots, comme l'algorithme de Revuz[3] et ses variantes. Les algorithmes ont aussi été étendus à des cas plus généraux, comme les automates avec sortie (automate de Moore, automate de Mealy) ou les transducteurs finis. Il n'existe pas de procédé analogue pour la minimisation d'automates plus généraux, comme les automates à pile ou les automates linéairement bornés. où l'équivalence, c'est-à-dire la question de savoir si deux automates reconnaissent le même langage, est indécidable.

Une application importante de la minimisation des automates finis déterministes est qu'elle permet de tester si deux automates finis donnés sont équivalents, c'est-à-dire reconnaissent le même langage. Ceci résulte du fait que l'automate fini minimal reconnaissant un langage est unique, à un renommage des états près. Pour répondre à la question, il suffit de minimiser les deux automates et de tester si leurs versions minimales sont égales.

Étant donné l'importance de la minimisation, cette opération fait partie de la plupart des logiciels de manipulation d'automates.

Automate minimal déterministe

Tout langage rationnel est reconnu par un automate fini déterministe et complet, et parmi ces automates, il en existe un ayant un nombre minimal d'états[4]. Cet automate est unique au renommage des états près; c'est l’automate minimal du langage. L'intérêt d'un automate minimal est que le coût en espace de la représentation est minimisé.

Parmi les automates finis reconnaissant un langage donné, il peut existe des automates non déterministes qui reconnaissent ce langage, et qui ont exponentiellement moins d'états que l'automate fini déterministe minimal. L'adjectif minimal s'applique ici aux automates déterministes[3].

De même, il peut exister des automates non déterministes non isomorphes ayant un nombre minimal d'états et reconnaissant le même langage[3]. L'unicité de l'automate déterministe minimal est donc une propriété remarquable, valable uniquement dans ce cas.

Les automates considérés dans ce cadre sont non seulement déterministes, mais aussi complets. Un automate est complet si sa fonction de transition est partout définie, en d'autres termes si, pour tout état et toute lettre, il existe une transition sortant de cet état et étiquetée par cette lettre. Un automate fini déterministe émondé peut avoir un état de moins, si l'automate fini complet correspondant a un état puits.

États accessibles

On considère un automate fini déterministe complet

sur un alphabet . Ici est l'ensemble des états, est l'état initial, est l'ensemble des états terminaux. La fonction de transition est notée par un simple point. Un état est est accessible s'il existe un mot tel que , il est inaccessible sinon. Les états inaccessibles peuvent être supprimés sans modifier le langage reconnu par l'automate, et l'automate minimal ne possède que des états accessibles. Un automate est accessible si tous ses états sont accessibles.

Les états accessibles d'un automate peuvent être calculés au moyen d'un parcours du graphe qui représente l'automate. Ce sont les états qui sont atteints par un chemin depuis l'état initial. Il suffit donc d'adapter l'algorithme usuel de parcours d'un graphe à ce cas. La complexité de l'algorithme est linéaire en fonction du produit du nombre d'états par la taille de l'alphabet. Le code suivant en est une réalisation :

Les états inaccessibles peuvent être supprimés sans modifier le langage reconnu par l'automate.

États indistinguables

Soit

un automate déterministe complet. Deux états et sont indistinguables ou inséparables si tout mot reconnu par à partir de est aussi reconnu à partir de et réciproquement, formellement si pour tout mot  :

.

Deux états sont séparables s'ils ne sont pas inséparables. Un critère de minimalité utile est le suivant :

Critère de minimalité —  Un automate fini déterministe complet et accessible est minimal si et seulement ses états sont deux-à-deux séparables.

Une façon plus condensée de présenter ce critère est d'introduire les langages à droite (« right languages » en anglais[3]) : le langage à droite d'un état est par définition le langage

.

C'est donc l'ensemble des mots reconnus par l’automate en prenant comme état initial. Alors deux états sont inséparables si et seulement s'il ont même langage à droite.

Algorithme de Brzozowski

Brzozowski présente, dans son article de 1963[5], un algorithme de minimisation qui est basé sur la déterminisation d'un automate fini non nécessairement déterministe. Cet algorithme, conceptuellement simple, produit - de façon étonnante - un automate minimal.

L'automate transposé[6] d'un automate fini (non déterministe)

et sont les états initiaux et terminaux et où est l'ensemble des transitions, est l'automate obtenu en inverser le sens des transitions, et à échanger les états initiaux avec les états terminaux. Formellement, c'est l'automate[7].</ref>

,

. Le langage reconnu par l'automate transposé est formé des images miroir des mots reconnus par l’automate de départ. Sauf dans des cas très exceptionnels, l'automate transposé n'est pas déterministe, mais la déterminisation de l'automate donne un automate déterministe minimal. L'énoncé précis est le suivant :

Proposition (Brzozowski) —  Soit un automate fini déterministe, et soit l'automate fini déterministe complet accessible obtenu à partir de l'automate transposé par déterminisation et élimination des états inaccessibles. Alors l'automate est minimal et reconnaît le langage miroir du langage reconnu par .

L'algorithme de minimisation d'un automate fini est donc le suivant :

  1. Calculer , en transposant l'automate puis en le déterminisant par la procédure usuelle par exemple qui ne conserve que les états accessibles;
  2. Répéter l'opération sur l'automate obtenu : calculer en transposant puis en le déterminisant de la même manière.

Par la proposition de Brzozowski, l'automate obtenu est l'automate minimal équivalent à l’automate de départ. La complexité en temps et en place de l'algorithme est exponentielle dans le pire des cas en fonction de la taille de l'automate de départ, car l'automate intermédiaire peut être exponentiel. Un exemple est fourni par le langage formé de mots de longueur au moins sur un alphabet à deux lettres et , et dont la -ième lettre toujours un , en d'autres termes :

.

Ce langage est reconnu par un automate à états plus un état puits, mais son transposé, une fois déterminisé, requiert états[3],[8].

Il a été observé[3] que dans la pratique l'algorithme donne des résultats meilleurs que l'on pourrait penser. Ceci pose la question de la complexité en moyenne de l’algorithme. Un article de De Felice et Nicaud[9] apporte une réponse à cette question : l'algorithme de Brzozowski est génériquement super-polynomial. Ce terme technique signifie la complexité en moyenne, et même que la complexité générique de l'algorithme est plus grande que tout polynôme. Le terme « complexité générique » signifie que l'on est autorisé à « ignorer », dans le calcul de la moyenne, un ensemble de cas particulièrement désavantageux, sous réserve que cet ensemble de cas soit de taille négligeable en un sens que l'on peut préciser.

Algorithme de Moore

Les algorithmes de Moore et de Hopcroft sont des algorithmes de raffinements de partitions. On commence, dans les deux algorithmes, avec une hypothèse naïve, en supposant que l'automate minimal n'a que deux états et, en examinant la fonction de transition, on raffine la partition initiale jusqu'à ne plus devoir continuer. Le raffinement consiste à trouver des états séparables au sens défini ci-dessus : deux états et sont séparables s'il existe un mot tel que l'état est final et n'est pas final, ou vice-versa.

Lorsque l'algorithme de raffinement s'arrête, chaque classe de la partition représente un ensemble d'états deux-à-deux inséparables, et deux classes distinctes sont séparables. L'automate minimal est obtenu en prenant comme états les classe de la partition, et comme transitions les transitions induites sur les classes par les transitions de l'automate de départ.

L'algorithme de Moore pour la minimisation d'automates est dû à Moore 1956. L'algorithme maintient une partition des états, constituée initialement de deux classes, formées des états terminaux et des autres. La partition est ensuite raffinée jusqu'à obtenir une partition stable. A chaque étape, on remplace la partition courante par la partition qui est l'intersection de la partition courante et des partitions induites par les préimages des classes par les lettres de l'alphabet. L'algorithme s'arrête lorsque ce remplacement ne modifie pas la partition courante. On montre que les classes de la partition finale sont constituées d'états inséparables, et forment donc les états de l'automate minimal.


On considère plus précisément des équivalences sur l’ensemble des états définies par

,

.

Chaque ensemble est donc composé des mot de longueur au plus qui mènent de l'état à un état terminal de l’automate. Deux états sont équivalents pour la relation si le mêmes mots de longueur au plus mènent à des états terminaux. Cela signifie que l'on peut pas les séparer par des mots de longueur au plus . Les équivalences sont parfois appelées équivalences de Moore d'ordre [3]. Ces équivalences se calculent facilement grâce à la propriété suivante :

Lemme — Pour deux états et et , on a

.

Ainsi, pour calculer l'équivalence , on détermine les états qui, par une lettre, arrivent dans des classes distinctes de  : ceux-ci sont dans des classes distinctes de . Plus précisément, on détermine, pour toute lettre , la partition dont les classes sont constituées d'états qui, par la lettre , donnent des états équivalents pour . On forme ensuite l'intersection de ces partitions avec la partition elle-même.

Il est facile de vérifier que si et sont égales pour un entier , alors et sont égales pour tout , et que les classes d'équivalences sont formées d'états inséparables.

La complexité en temps de l'algorithme est, dans le pire des cas, , où est la taille de l'alphabet et où est le nombre d'états de l'automate. Chacune des étapes du raffinement peut être effectuée en temps en utilisant une variante appropriée du tri par base ou « radix sort ». À chaque étape, le nombre de classes augmente strictement, et comme au départ il y a deux classes, au plus étapes suffisent. En fait, la complexité est même en , où est le nombre d'étapes de l'algorithme. On peut observer[3] que le nombre d'étapes est indépendant du nombre d'états de l'automate de départ.

La complexité en moyenne est bien meilleure. Elle est en , et même en , selon le choix du modèle retenu pour la distribution aléatoire[3].

Algorithme de Hopcroft

L'algorithme, appelé ainsi d'après son inventeur, est dû à John Hopcroft[10] et il a été présenté en 1971; 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 le plus petit de (F,a) et (Q \ F) à 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;

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)[11]. Un ensemble d'états est coupé par la paire formée d'un ensemble et d'une lettre si les ensembles

et

sont tous les deux non vides. Dans le cas contraire, on dit que est stable pour .

L'algorithme maintient un ensemble de couples , candidats à couper des éléments de la partition en cours; cet ensemble de candidats en attente est appelé le « waiting set » en anglais.

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

Lemme — Soient et deux ensembles d'états, avec et disjoints non vides, et soit une lettre.

  • Si est stable pour et pour , alors est stable pour .
  • Si est stable pour et pour , alors est stable pour .

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

La complexité en temps de l’algorithme de Hopcroft, dans le pire des cas, est est le nombre d'états de l'automate et est la taille de l'alphabet. La borne est conséquence du fait que, pour chacune des transitions de l'automate, les ensembles retirés du waiting set qui contiennent l'état d'arrivé d'une transition sont de taille divisé par deux au moins moitié à chaque fois, donc chaque transition participe à au plus é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[10],[13].

L'algorithme de Hopcroft est le plus efficace des algorithmes de minimisation connus en 2010[3]. L'algorithme initial demande que l'automate de départ sont déterministe et complet. Une extension au cas des automates incomplets a aussi été décrite[14]. L'implémentation est en temps , où est le nombre de transitions de l'automate. On a toujours

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

Minimisation d'automates non déterministes

Les algorithmes décrits ci-dessus ne s'appliquent pas à des automates non déterministes. Alors que la notion d'automate minimal, compris comme automate ayant un nombre minimal d'états, a parfaitement un sens dans le cas des automates non déterministes, l'unicité n'est plus assurée, et le problème général est PSPACE-complet au sent de la théorie de la complexité[15],[16].

Notes et références

(en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « DFA minimization » (voir la liste des auteurs).
  1. Hopcroft, Ullman (1979)
  2. Carton 2008, Sakarovitch 2003 sont des livres standard en français, Séébold 1999 contient des exercices détaillés ; Hopcroft, Motwani et Ullman 2007 est une référence anglaise.
  3. a b c d e f g h i j et k Berstel et al. 2010.
  4. Hopcroft, Motwani et Ullman 2001, Section 4.4.3, "Minimization of DFA's", p. 159.
  5. Brzozowski 1963
  6. Sakarovitch 2003, p. 64.
  7. Sakarovitch 2003, p. 64 écrit , Berstel et al. 2010, p. 5 le notent
  8. D'autres exemples sont donnés dans divers manuels, et aussi, parmi les plus anciens, dans Leiss 1981 pour un alphabet ternaire où états sont requis pour un automate de départ de n états.
  9. De Felice et Nicaud 2013.
  10. a et b Hopcroft 1971.
  11. Le terme coupure est employé par Carton 2003, p. 49.
  12. Carton 2003, p. 49.
  13. Aho, Hopcroft et Ullman 1974
  14. Anti Valmari, « Fast brief practical DFA minimization », Information Processing Letters, vol. 112, no 6,‎ , p. 213-217 (DOI 10.1016/j.ipl.2011.12.004).
  15. Hopcroft, Motwani et Ullman 2001, Section 4.4, p. 163, Encadré intitulé Minimizing the States of an NFA.
  16. Henrik Björklund et Wim Martens, « The Tractability Frontier for NFA Minimization », Colloquium Theoretische Informatik Universität Bayreuth, (consulté le ).

Bibliographie

Articles historiques
  • Janusz Brzozowski, « Canonical regular expressions and minimal state graphs for definite events », dans Proc. Sympos. Math. Theory of Automata (New York, 1962), Polytechnic Press of Polytechnic Inst. of Brooklyn, Brooklyn, N.Y., (MR 0175719), p. 529–561.
  • Edward F. Moore, « Gedanken-experiments on sequential machines », dans Automata studies, Princeton, N. J., Princeton University Press, coll. « Annals of mathematics studies » (no 34), (MR 0078059), p. 129–153.
  • 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
Manuels
Autres références
  • Ernst Leiss, « Succinct representation of regular languages by Boolean automata », Theoretical Computer Science, vol. 13, no 3,‎ , p. 323–330 (DOI 10.1016/S0304-3975(81)80005-9, MR 603263).
  • Sven De Felice et Cyril Nicaud, « Brzozowski Algorithm Is Generically Super-Polynomial for Deterministic Automata », dans Marie-Pierre Béal et Olivier Carton (éditeurs), Developments in Language Theory - 17th International Conference, Springer-Verlag, coll. « Lecture Notes in Computer Science » (no 7907), (ISBN 978-3-642-38770-8, DOI 10.1007/978-3-642-38771-5_17), p. 179-190