Aller au contenu principal

TD 5 : non-déterminisme et déterminisation

Merci à Aurélien et Fabien pour la prise de notes durant les séances de questions-réponses (initialement publiée sur l'instance de démonstration CodiMD, aujourd'hui supprimée).

1. Automates finis non déterministes​

Exercice 1 : Mots acceptés​

Indiquez si les mots suivants sont acceptés par les automates A1A_1 et A2A_2 en figure 11 (cf. feuille de TD).

MotsA1A_1A2A_2
1. aaNonOui
2. abaabaOuiOui
3. babababaOuiOui
4. baababbaababOuiNon
5. bbbaabbabbbaabbaNonOui

Exercice 2 : Simulation​

Donner un algorithme permettant de décider si w∈Σ∗w \in \Sigma^* est accepté par un AFN AA.

On pourrait faire un algorithme qui examine toutes les exécutions possibles, mais l'arbre des exécutions peut être de taille exponentielle : c'est donc une idée peu efficace. Au lieu d'explorer cet arbre, on stocke seulement à chaque "étage" les états différents. Ainsi, il suffit de se souvenir à chaque étape des états accessibles. Si la dernière étape contient un état acceptant, c'est que le mot ww est accepté par l'automate.

fonction appartient(A = (Q, Σ, δ, I, F), w = w1...wk) : booléen

X[0] = I

pour i de 1 à k
X[i] = {}

pour tout p dans X[i-1]
pour toute transition p -- wi --> q
insérer q dans X[i]

pour tout p dans X[k]
si p est un état acceptant
retourner Vrai

retourner Faux

On peut étudier la complexité de cet algorithme : on suppose que l'insertion de q dans X[i] se fait en temps constant et que les transitions sont rangées par état de départ. À chaque lettre, chaque transition est examinée au plus une fois, d'où une complexité dans le pire des cas en O(∣w∣×m)\mathcal{O}(|w| \times m), avec mm le nombre de transitions de l'automate.

NB : cet algorithme n'est pas valide s'il y a des transitions ε\varepsilon ; il faut dans ce cas calculer des clôtures instantanées pour déterminer les successeurs correctement. Chaque clôture se calcule par un parcours en O(n+m)\mathcal{O}(n + m) (nn états, mm transitions), d'où une complexité totale en O(∣w∣×(n+m))\mathcal{O}(|w| \times (n + m)).

2. Algorithme de déterminisation​

Nous avons vu que pour simuler un automate non déterministe, il suffit de calculer l'ensemble des états atteints après avoir lu un préfixe du mot d'entrée, et de maintenir cet ensemble à jour à chaque lecture d'une lettre. Le tableau de la figure 22 généralise ce calcul en prenant en compte non pas la lettre lue, mais toutes les lettres possibles de Σ\Sigma. On commence naturellement par l'ensemble {q0}\{q_0\} (colonne EE), et l'on calcule les ensembles d'états atteints par une transition aa et bb (colonnes ll et FF). Lorsqu'un ensemble d'états apparaît dans FF mais pas dans EE, il y est recopié, et le même calcul est effectué sur cet ensemble (cas de {q0,q1}\{q_0, q_1\} ici).

Exercice 3 : Construction par sous-ensembles (power-set construction)​

Complétez le tableau pour l'AFN A1A_1 de la figure 11 (cf. feuille de TD). Nota bene : il y a exactement le bon nombre de lignes.

EEllFF
{q0}\{q_0\}aa{q0,q1}\{q_0, q_1\}
bb{q0}\{q_0\}
{q0,q1}\{q_0, q_1\}aa{q0,q1}\{q_0, q_1\}
bb{q0,q2}\{q_0, q_2\}
{q0,q2}\{q_0, q_2\}aa{q0,q1,q3}\{q_0, q_1, q_3\}
bb{q0}\{q_0\}
{q0,q1,q3}\{q_0, q_1, q_3\}aa{q0,q1,q3}\{q_0, q_1, q_3\}
bb{q0,q2,q3}\{q_0, q_2, q_3\}
{q0,q2,q3}\{q_0, q_2, q_3\}aa{q0,q1,q3}\{q_0, q_1, q_3\}
bb{q0,q3}\{q_0, q_3\}
{q0,q3}\{q_0, q_3\}aa{q0,q1,q3}\{q_0, q_1, q_3\}
bb{q0,q3}\{q_0, q_3\}

Exercice 4 : Propriétés de la construction​

Dessinez l'automate dont les états sont les ensembles représentés en colonne EE du tableau de la figure 22 (cf. tableau ci-dessus), et dont les transitions sont données par les lignes de ce tableau.

  1. D'après la construction de eqdet(A)eqdet(A) vue en cours, quel est l'état initial de l'automate et quels sont ses états accepteurs ?

    L'état initial est la clôture ε\varepsilon de l'ensemble des états initiaux. Les états accepteurs sont les ensembles de la colonne EE qui contiennent un état accepteur de l'automate de départ.

  2. Quelle(s) propriété(s) remarquable(s) cet automate possède-t-il ?

    Il est déterministe et complet.

Exercice 5 : Application de l'algorithme​

À l'aide de l'algorithme vu en cours, calculez les automates déterministes correspondant à l'automate A2A_2 de la figure 11 (cf. feuille de TD), ainsi qu'aux automates suivants.

Astuce : JFLAP le fait très bien pour vérifier vos résultats, Convert > Convert to DFA.

3. Algorithmes sur les automates non déterministes​

Exercice 6 : Langage vide​

Donner un algorithme permettant de décider si le langage accepté par un automate fini déterministe AA est vide ou non. Cet algorithme est-il correct pour les automates non déterministes ? Quelle est sa complexité ?

Le langage est non vide ssi il existe une exécution acceptante, ssi il existe un état acceptant accessible depuis un état initial.

On fait donc un parcours (en profondeur ou en largeur) depuis les états initiaux, dont la complexité est linéaire en le nombre d'états et de transitions : O(∣Q∣+∣δ∣)\mathcal{O}(|Q| + |\delta|). Le raisonnement ne dépend pas du déterminisme : l'algorithme est aussi correct pour les AFN (en suivant aussi les transitions ε\varepsilon).

Exercice 7 : Langage universel​

Le langage d'un automate AA est universel s'il contient tous les mots, c'est-à-dire L(A)=Σ∗\mathcal{L}(A) = \Sigma^*.

  1. Donner un algorithme permettant de décider si le langage de AA est universel pour un AFD AA. Quelle est sa complexité ?

    On teste si le langage de A‾\overline{A} (obtenu en échangeant états accepteurs et non accepteurs) est vide. Il faut s'assurer du déterminisme et de la complétude de AA ; la complexité est alors linéaire en la taille de AA.

  2. Expliquer pourquoi l'algorithme précédent n'est pas correct si AA est non déterministe. Donner un algorithme pour les AFN. Quelle est sa complexité ?

    Si AA n'est pas déterministe, l'algorithme précédent n'est pas valide car la complémentation n'est pas correcte : il peut exister un mot accepté à la fois par l'automate et par son "prétendu" complémentaire. Dans ce cas, il faut déterminiser l'automate AA, puis vérifier que L(eqdet(A)‾)=∅\mathcal{L}(\overline{\text{eqdet}(A)}) = \emptyset (le complémentaire est vide).

    Il faut cependant noter que la déterminisation est de complexité exponentielle dans le pire des cas (le problème de l'universalité pour les AFN est PSPACE-complet). En revanche, le calcul du complémentaire d'un AFD complet est linéaire.

Exercice 8 : Inclusion des langages​

Soient AA et BB deux automates finis. On cherche à décider si L(A)⊆L(B)\mathcal{L}(A) \subseteq \mathcal{L}(B).

  1. Donner un algorithme dans le cas où BB est déterministe et AA quelconque. Quelle est sa complexité ?

    L(A)⊆L(B)⇔L(A)∩L(B‾)=∅\mathcal{L}(A) \subseteq \mathcal{L}(B) \Leftrightarrow \mathcal{L}(A) \cap \mathcal{L}(\overline{B}) = \emptyset, où B‾\overline{B} est le complémentaire de BB rendu complet. On teste le vide de l'automate produit de AA et B‾\overline{B}, en O(∣A∣×∣B∣)\mathcal{O}(|A| \times |B|).

  2. Expliquer pourquoi cet algorithme n'est pas correct dans le cas où BB n'est pas déterministe. Donner un algorithme dans ce cas. Quelle est sa complexité ?

    Pour la même raison qu'à l'exercice 7, le complémentaire d'un AFN ne se calcule pas en échangeant les états accepteurs : il faut d'abord déterminiser BB, ce qui rend l'algorithme exponentiel dans le pire des cas.

4. Complexité de la déterminisation​

On s'intéresse à la taille de l'automate déterministe équivalent à un automate non déterministe donné, obtenu par la construction par sous-ensembles. Le nombre d'itérations de la boucle Tant que de l'algorithme est égal au nombre d'états de l'automate déterministe. Nous cherchons donc à estimer ce nombre.

Exercice 9 : Des automates non déterministes particuliers​

On définit le langage Li\mathcal{L}_i comme celui des mots sur {a,b}\{a, b\} dont la ii-ème lettre en partant de la fin est un aa. Donnez 33 automates finis qui acceptent respectivement L1\mathcal{L}_1, L2\mathcal{L}_2 et L3\mathcal{L}_3 (indication : le non-déterminisme est une aide précieuse).

On s'appuie sur l'exemple du cours : un état initial qui boucle sur aa et bb, une transition aa qui « devine » la position de la ii-ème lettre avant la fin, puis i−1i-1 transitions a,ba, b jusqu'à l'état accepteur. Les schémas de L1\mathcal{L}_1 et L2\mathcal{L}_2 étaient hébergés sur l'instance CodiMD, qui n'existe plus.

Exercice 10 : Taille de l'automate déterministe​

Remplissez le tableau suivant. Pour obtenir les automates déterministes demandés, utilisez JFLAP (menu Convert/Convert to DFA). Vous extrapolerez le cas de Ln\mathcal{L}_n.

LangageNb. états AFNNb. états AFD
L1L_122
L2L_234
L3L_348
LnL_n ?n+1n+12n2^n

Coût de l'opération : exponentiel.

Exercice 11 : Expression régulière et taille de l'AFD​

On considère l'alphabet Σ={a,b}\Sigma = \{a, b\}.

  1. Donner une famille d'AFN pour la famille des langages représentés par les expressions régulières Σ∗aΣn\Sigma^*a\Sigma^n pour n≥0n \ge 0.

    Comme dans l'exercice précédent, avec un décalage d'indice.

  2. À partir de la construction précédente et en utilisant le théorème de Kleene, donner une famille d'AFN AnA_n pour les expressions régulières EnE_n définies par En=Σ∗aΣn+Σ∗bΣnE_n = \Sigma^*a\Sigma^n + \Sigma^*b\Sigma^n. Quelle est la taille de AnA_n et de eqdet(An)eqdet(A_n) pour nn valant 1, 2 et 3 ? Extrapolez pour le cas général.

nnNb. états AnA_nNb. états eqdet(An)eqdet(A_n)
187
21015
31231
cas général2(n+2)+22(n+2) + 22n+2−12^{n+2} - 1
  1. On considère maintenant la famille d'expressions régulières FnF_n définie par Fn=Σ∗Σn+1F_n = \Sigma^*\Sigma^{n+1}. Donner une famille d'AFN BnB_n qui acceptent le langage des FnF_n. Quelle est la taille de BnB_n ? Quelle est la taille de eqdet(Bn)eqdet(B_n) pour nn valant 1, 2 et 3 ? Extrapolez le cas général.

    L(Fn)=L(En)\mathcal{L}(F_n) = \mathcal{L}(E_n), car Σ∗aΣn+Σ∗bΣn=Σ∗Σn+1\Sigma^*a\Sigma^n + \Sigma^*b\Sigma^n = \Sigma^*\Sigma^{n+1}.

nnNb. états BnB_nNb. états eqdet(Bn)eqdet(B_n)
133
244
355
cas généraln+2n+2n+2n+2
  1. Comparer les langages de EnE_n et FnF_n ainsi que les tailles de eqdet(An)eqdet(A_n) et eqdet(Bn)eqdet(B_n).

    Les langages sont égaux, mais la taille de l'automate déterminisé dépend de l'AFN de départ : exponentielle pour AnA_n, linéaire pour BnB_n.

Exercice 12 : Complexité au pire de la déterminisation​

Si AA est un AFN à nn états, quel est au pire cas le nombre d'états de l'automate déterministe équivalent obtenu par la construction par sous-ensembles ? En supposant que l'on dispose d'un programme ne nécessitant qu'une milliseconde pour calculer un état, calculez le temps nécessaire pour rendre déterministes des automates à 5, 10, 50 et 100 états.

Au pire 2n2^n états : le coût est exponentiel.

  • 25=322^{5} = 32, donc 32 ms.

  • 210≈1032^{10} \approx 10^3, donc environ 1 seconde.

  • 250≈1,1×10152^{50} \approx 1{,}1 \times 10^{15} ms. Or :

    • 1 heure =3,6×106= 3{,}6 \times 10^6 ms ;
    • 1 jour ≈8,6×107\approx 8{,}6 \times 10^7 ms ;
    • 1 an ≈3,2×1010\approx 3{,}2 \times 10^{10} ms.

    Donc environ 36 000 ans.

  • 2100≈1,3×10302^{100} \approx 1{,}3 \times 10^{30} ms, soit environ 4×10194 \times 10^{19} ans : bien plus longtemps que le confinement.