✖

Déterminisation d’un AFN

Nous allons voir comment transformer un automate non déterministe en automate déterministe, ce qui prouvera que la puissance de calcul des automates non déterministes et celle des automates déterministes sont équivalentes.

Idée de base

Prenons un automate non déterministe (QN ; ΣN ; δN ; q0 ; FN) sans ε-transitions. Nous construisons un automate déterministe (QD ; ΣD ; δD ; p0 ; FD) de la façon suivante :

  • QD ⊆ 2QN
  • ΣD = ΣN
  • p0 = {q0}
  • FD = {Q ∈ QD | Q ∩ FN ≠ ∅}

Nous définissons la fonction de transition δD ainsi :

∀Q∈QD,a∈ΣD:δD(Q,a)=⋃q∈QδN(q,a)

Que signifie cela ? Un automate non déterministe peut se trouver dans plusieurs états à la fois ; nous pouvons donc par exemple arriver à une situation où notre automate non déterministe est dans les états {q0 ; q1}. En lisant le symbole suivant, par exemple 1, nous pouvons arriver à l’ensemble d’états {q0 ; q2 ; q3}. Dans la version déterministe du même automate, cela se traduit ainsi : nous créons deux états, nous les nommons {q0 ; q1} et {q0 ; q2 ; q3}, et nous introduisons entre eux une transition pour le symbole 1. Formellement, nous passons donc d’un état à l’autre, mais grâce aux noms, nous saurons que dans l’automate non déterministe, nous nous serions retrouvés respectivement dans deux et dans trois états.

Exemple

Prenons cet automate non déterministe :

Pour construire l’automate déterministe, nous devons avant tout construire une nouvelle fonction de transition. Un tableau va nous y aider : nous y notons toutes les transitions. Au début, le tableau ressemble à ceci :

état/symbole01{q0}

Dans la colonne de gauche, nous aurons à la fin de l’algorithme tous les états de l’automate déterministe. Le tableau rempli définira ensuite la fonction de transition. Nous notons maintenant dans le tableau les états que nous atteignons si nous sommes dans l’état {q0} et que les symboles en entrée sont 0 et 1.

état/symbole01{q0}{q1}{q1;q2}

De l’état q0, pour le symbole 0, une transition ne mène qu’à l’état q1, alors que pour le symbole 1, des transitions mènent aux états q1 et q2. Nous ajoutons maintenant au tableau deux nouveaux états : {q1} et {q1 ; q2}. Pourquoi ? Dès que nous inscrivons dans le tableau un ensemble d’états qui ne figure pas encore dans la colonne de gauche, nous ajoutons cet ensemble d’états à cette colonne.

état/symbole01{q0}{q1}{q1;q2}{q1}{q1;q2}

et nous remplissons de nouveau. Pour l’état {q1 ; q2}, n’oublions pas de vérifier les deux états, c’est-à-dire de prendre la réunion de ce que nous atteignons depuis q1 et de ce que nous atteignons depuis q2.

état/symbole01{q0}{q1}{q1;q2}{q1}{q0;q1;q3}{q0;q3}{q1;q2}{q0;q1;q3}{q0;q3}

Nous avons obtenu plusieurs nouveaux états, que nous devons ajouter au tableau :

état/symbole01{q0}{q1}{q1;q2}{q1}{q0;q1;q3}{q0;q3}{q1;q2}{q0;q1;q3}{q0;q3}{q0;q1;q3}{q0;q3}

…et nous complétons de nouveau les transitions :

état/symbole01{q0}{q1}{q1;q2}{q1}{q0;q1;q3}{q0;q3}{q1;q2}{q0;q1;q3}{q0;q3}{q0;q1;q3}{q0;q1;q3}{q0;q1;q2;q3}{q0;q3}{q1}{q1;q2}

Les états {q0 ; q1 ; q3}, {q1} et {q1 ; q2} figurent déjà dans le tableau, donc nous n’ajoutons que l’état {q0 ; q1 ; q2 ; q3}.

état/symbole01{q0}{q1}{q1;q2}{q1}{q0;q1;q3}{q0;q3}{q1;q2}{q0;q1;q3}{q0;q3}{q0;q1;q3}{q0;q1;q3}{q0;q1;q2;q3}{q0;q3}{q1}{q1;q2}{q0;q1;q2;q3}{q0;q1;q3}{q0;q1;q2;q3}

Nous n’avons ajouté aucun nouvel état, donc le tableau est complet. Il ne reste plus qu’à dessiner le diagramme. Les états de l’automate déterministe sont dans la première colonne, les transitions pour les symboles 0 et 1 dans les suivantes. Tout état qui contient un état final de l’automate d’origine sera aussi un état final dans cet automate. C’est-à-dire que tout état contenant q3 sera un état final. L’automate ressemblera à ceci :

Nous pouvons vérifier que l’automate fonctionne bien. Essayons d’accepter le mot 11001. Dans l’automate déterministe, nous suivons le chemin

q0→1q1;q2→1q0;q3→0q1→0q0;q1;q3→1q0;q1;q2;q3

et l’automate accepterait le mot, car le dernier état {q0 ; q1 ; q2 ; q3} est final. Dans l’automate non déterministe, lors de la simulation, nous arriverions aux mêmes états : nous commencerions dans l’état q0 et, pour le symbole 1, nous arriverions aux états {q1 ; q2}. Le symbole 1 suivant nous mènerait aux états {q0 ; q3}, etc. pour les états suivants. Finalement, nous nous retrouverions dans tous les états {q0 ; q1 ; q2 ; q3} et l’automate accepterait le mot.

Sources

Chapitres: Automate fini, Automate complet, Automate fini non déterministe, Simulation d’un AFN, Déterminisation d’un AFN