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 et en figure (cf. feuille de TD).
| Mots | ||
|---|---|---|
| 1. | Non | Oui |
| 2. | Oui | Oui |
| 3. | Oui | Oui |
| 4. | Oui | Non |
| 5. | Non | Oui |
Exercice 2 : Simulation
Donner un algorithme permettant de décider si est accepté par un AFN .
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 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 , avec le nombre de transitions de l'automate.
NB : cet algorithme n'est pas valide s'il y a des transitions ; 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 ( états, transitions), d'où une complexité totale en .
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 généralise ce calcul en prenant en compte non pas la lettre lue, mais toutes les lettres possibles de . On commence naturellement par l'ensemble (colonne ), et l'on calcule les ensembles d'états atteints par une transition et (colonnes et ). Lorsqu'un ensemble d'états apparaît dans mais pas dans , il y est recopié, et le même calcul est effectué sur cet ensemble (cas de ici).
Exercice 3 : Construction par sous-ensembles (power-set construction)
Complétez le tableau pour l'AFN de la figure (cf. feuille de TD). Nota bene : il y a exactement le bon nombre de lignes.
Exercice 4 : Propriétés de la construction
Dessinez l'automate dont les états sont les ensembles représentés en colonne du tableau de la figure (cf. tableau ci-dessus), et dont les transitions sont données par les lignes de ce tableau.
-
D'après la construction de vue en cours, quel est l'état initial de l'automate et quels sont ses états accepteurs ?
L'état initial est la clôture de l'ensemble des états initiaux. Les états accepteurs sont les ensembles de la colonne qui contiennent un état accepteur de l'automate de départ.
-
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 de la figure (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 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 : . Le raisonnement ne dépend pas du déterminisme : l'algorithme est aussi correct pour les AFN (en suivant aussi les transitions ).
Exercice 7 : Langage universel
Le langage d'un automate est universel s'il contient tous les mots, c'est-à-dire .
-
Donner un algorithme permettant de décider si le langage de est universel pour un AFD . Quelle est sa complexité ?
On teste si le langage de (obtenu en échangeant états accepteurs et non accepteurs) est vide. Il faut s'assurer du déterminisme et de la complétude de ; la complexité est alors linéaire en la taille de .
-
Expliquer pourquoi l'algorithme précédent n'est pas correct si est non déterministe. Donner un algorithme pour les AFN. Quelle est sa complexité ?
Si 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 , puis vérifier que (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 et deux automates finis. On cherche à décider si .
-
Donner un algorithme dans le cas où est déterministe et quelconque. Quelle est sa complexité ?
, où est le complémentaire de rendu complet. On teste le vide de l'automate produit de et , en .
-
Expliquer pourquoi cet algorithme n'est pas correct dans le cas où 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 , 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 comme celui des mots sur dont la -ème lettre en partant de la fin est un . Donnez automates finis qui acceptent respectivement , et (indication : le non-déterminisme est une aide précieuse).
On s'appuie sur l'exemple du cours : un état initial qui boucle sur et , une transition qui « devine » la position de la -ème lettre avant la fin, puis transitions jusqu'à l'état accepteur. Les schémas de et é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 .
| Langage | Nb. états AFN | Nb. états AFD |
|---|---|---|
| 2 | 2 | |
| 3 | 4 | |
| 4 | 8 | |
| ? |
Coût de l'opération : exponentiel.
Exercice 11 : Expression régulière et taille de l'AFD
On considère l'alphabet .
-
Donner une famille d'AFN pour la famille des langages représentés par les expressions régulières pour .
Comme dans l'exercice précédent, avec un décalage d'indice.
-
À partir de la construction précédente et en utilisant le théorème de Kleene, donner une famille d'AFN pour les expressions régulières définies par . Quelle est la taille de et de pour valant 1, 2 et 3 ? Extrapolez pour le cas général.
| Nb. états | Nb. états | |
|---|---|---|
| 1 | 8 | 7 |
| 2 | 10 | 15 |
| 3 | 12 | 31 |
| cas général |
-
On considère maintenant la famille d'expressions régulières définie par . Donner une famille d'AFN qui acceptent le langage des . Quelle est la taille de ? Quelle est la taille de pour valant 1, 2 et 3 ? Extrapolez le cas général.
, car .
| Nb. états | Nb. états | |
|---|---|---|
| 1 | 3 | 3 |
| 2 | 4 | 4 |
| 3 | 5 | 5 |
| cas général |
-
Comparer les langages de et ainsi que les tailles de et .
Les langages sont égaux, mais la taille de l'automate déterminisé dépend de l'AFN de départ : exponentielle pour , linéaire pour .
Exercice 12 : Complexité au pire de la déterminisation
Si est un AFN à é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 états : le coût est exponentiel.
-
, donc 32 ms.
-
, donc environ 1 seconde.
-
ms. Or :
- 1 heure ms ;
- 1 jour ms ;
- 1 an ms.
Donc environ 36 000 ans.
-
ms, soit environ ans : bien plus longtemps que le confinement.