+++ to secure your transactions use the Bitcoin Mixer Service +++

 

Previous Up Next

Chapitre�7��Les automates

7.1��Pourquoi �tudier les automates

Ce chapitre est une tr�s succincte introduction � la th�orie des automates que vous aurez l’occasion de voir de fa�on d�taill�e si vous choisissez un cursus d’informatique. Ce chapitre est, par nature, un peu plus “th�orique” et un peu moins algorithmique que les pr�c�dents.

Les automates sont des objets math�matiques, tr�s utilis�s en informatique, qui permettent de mod�liser un grand nombre de syst�mes (informatiques). L’�tude des automates a commenc� vers la fin des ann�es cinquante. Elle se base sur de nombreuses techniques (topologie, th�orie des graphes, logique, alg�bre, etc.). De fa�on tr�s informelle, un automate est un ensemble “d’�tats du syst�me”, reli�s entre eux par des “transitions” qui sont marqu�es par des symboles. �tant donn� un “mot” fourni en entr�e, l’automate lit les symboles du mot un par un et va d’�tat en �tat selon les transitions. Le mot lu est soit accept� par l’automate soit rejet�.

Avant de donner une d�finition plus formelle des concepts d�crits ci-dessus, citons quelques exemples classiques d’utilisation d’automates :

En dehors de ces utilisations “pratiques” des automates, notons qu’ils sont aussi utilis�s pour mod�liser les ordinateurs et pour comprendre ce qu’un ordinateur peut faire (d�cidabilit�) et ce qu’il sait faire efficacement (complexit�). C’est donc une notion fondamentale de l’informatique.

7.2��Rappel : alphabets, mots, langages et probl�mes

Nous reprenons ici les notations du chapitre�6. L’alphabet Σ est un ensemble de caract�res (ou symboles). un mot est une suite finie de caract�res. L’ensemble des mots sur Σ est not� Σ*. Un langage est un sous-ensemble de Σ*, c’est-�-dire un ensemble particulier de mots. Parmi les mots de Σ* on distingue le mot vide not� є. Le mot vide est l’unique mot de longueur z�ro.

7.3��Automates finis d�terministes

Un automate fini d�terministe est un quintupl� (Q, Σ, δ, q0, F) constitu� des �l�ments suivants

7.3.1��Fonctionnement d’un automate fini d�terministe

L’automate prend en entr�e un mot et l’accepte ou la rejette. On dit aussi qu’il le reconna�t ou ne le reconna�t pas. Le langage associ� � un automate est constitu� de l’ensemble des mots qu’il reconna�t. Voici comment l’automate proc�de pour d�cider si un mot appartient � son langage.

De fa�on plus formelle, pour d�finir exactement le langage reconnu par un automate, nous introduisons la fonction de transition �tendue aux mots, δ. Elle se d�finit r�cursivement comme suit.

Nous pouvons maintenant d�finir le langage L(A) accept� par un automate fini d�terministe A = (Q, Σ, δ, q0, F).

L(A)�=�{c�|�δ(q0,�c)�∈�F}

7.3.2��Des repr�sentation “compactes” des automates

On peut associer � un automate une table de transition qui d�crit de mani�re extensive la fonction de transition δ :

La valeur δ(q, a) pour qQ, a ∈ Σ correspond � l’�tat indiqu� � l’intersection de la ligne q et de la colonne a. Notons qu’� partir de cette table il est ais� de retrouver l’ensemble des �tats ainsi que l’alphabet et donc d’identifier exactement l’automate.

Exemple�7.1�� Consid�rons la table de transition ci-dessous.
 ab
→ 112
* 212
Il correspond � l’automate (Q, Σ, δ, q0, F) avec Il est facile de voir que le langage de cet automate est constitu� exactement des mots compos�s de a et de b qui se terminent par un b.

Pour repr�senter de fa�on tr�s intuitive un automate fini d�terministe (Q, Σ, δ, q0, F), on peut utiliser un graphe de transition constitu� des �l�ments suivants :

L’automate de l’exemple 7.1 est ainsi repr�sent� sur la figure 7.1.


Figure 7.1: Un automate fini d�terministe

Pour simplifier encore cette repr�sentation, un arc entre deux sommets q, q′ peut �tre valu� par plusieurs symboles s1, ..., sn s�par�s par des virgules. Cette derni�re convention signifie simplement que ∀ in, δ(q, si) = q′ et elle permet d’�viter une multiplication d’arcs sur le graphe. La figure 7.2 illustre une telle simplification.


Figure 7.2: Deux repr�sentations �quivalentes du m�me automate fini

Exercice�7.1�� Quel est le langage reconnu par l’automate de la figure 7.2 ?
Solution. Tous les mots qui contiennent un “b”. □
Exercice�7.2�� �crire la table de transition de l’automate suivant. Quel est le langage reconnu ?
Solution. La table de transition de l’automate est
 01
ABA
BBC
* CCC
Cet automate reconna�t les mots qui contiennent “01”. □
Exercice�7.3�� Soit l’automate fini d�terministe ({q0, q1 , q2 , q3}, {0, 1}, δ, q0 , {q0}) donn� par la table
δ01
→ * q0q2q1
q1q3q0
q2q0q3
q3q1q2
Dessiner l’automate et montrer qu’il accepte “110101”.
Solution.







� □
Exercice�7.4�� Construire un automate fini d�terministe qui reconna�t le langage
L�=�{x�∈�{0,�1}*�|�n1(x)�≡�0��mod��4}
o� n1(x) est le nombre d’occurrence du symbole 1 dans le mot x.
Solution.
Exercice�7.5�� Construire les automates finis d�terministes qui reconnaissent les langages suivants
L1�=�{m�∈�(a�+�b)*�|�chaque �a� de �m� est imm�diatement pr�c�d� et imm�diatement suivi d’un �b�}�
L2�=�{m�∈�(a�+�b)*�|�m� contienne � la fois �ab� et �ba�}�
L3�=�{m�∈�(a�+�b)*�|�m� contienne exactement une occurrence de �aaa}

7.4��Automates finis non-d�terministes

Un automate fini non-d�terministe est un automate tel que dans un �tat donn�, il peut y avoir plusieurs transitions avec le m�me symbole. le fonctionnement d’un tel automate n’est donc pas totalement ��d�termin頻, car on ne sait pas quel �tat l’automate va choisir.

Les automates non-d�terministes permettent de mod�liser facilement des probl�mes complexes. Ils peuvent �tre convertis en des automates finis d�terministe. Ces derniers peuvent �tre exponentiellement plus grand que les automates non d�terministe dont ils sont issus.

Un automate fini non-d�terministe est un quintupl� : (Q, Σ, δ, q0, F)

C’est la fonction de transition δ qui diff�re ici de celle utilis�e par les automates finis d�terministes. Remarquons que tout automate fini d�terministe est aussi un automate fini non-d�terministe.

Les repr�sentations compactes des automates finis d�terministes s’�tendent naturellement aux automates finis non-d�terministes. Une cellule de la table de transition contient un sous-ensemble d’�tats (�ventuellement vide).

7.4.1��Fonctionnement d’un automate fini non-d�terministe

Comme pour un automate fini d�terministe, l’automate prend en entr�e un mot et l’accepte ou le rejette. Le langage associ� est constitu� de l’ensemble des mots qu’il reconna�t.

Exemple�7.2�� Voici automate qui reconna�t les mots d�finis sur l’alphabet {a, b, c} qui commencent par a et qui finissent par c.
La table associ�e � cet automate est alors :
 abc
q0{q1}
q1{q1}{q1}{q1, q2}
* q2

Comme pour les automates d�terministes, nous nous introduisons la fonction de transition �tendue aux mots, δ. Elle se d�finit r�cursivement comme suit.

Nous pouvons maintenant d�finir le langage L(A) accept� par un automate fini d�terministe A = (Q, Σ, δ, q0, F).

L(A)�=�{c�|�δ(q0,�c)�⋂�F�≠�∅}
Exercice�7.6�� Construire l’automate fini non-d�terministe associ� � la table ci-dessous.
 ab
→ 0{0,1, 3} {2}
1{3}
2{3}
* 3{1}




Solution.
Exercice�7.7�� Construire un automate fini non-d�terministe qui reconna�t les mots qui contiennent “church” ou “chomsky”.
Solution.
Exercice�7.8�� Construire un automate finis non-d�terministe qui reconna�t les mots de l’alphabet {a,b} qui terminent par bab.
Solution.
Exercice�7.9�� Construire un automate fini non-d�terministe et un automate fini d�terministe qui reconna�t les mots sur l’alphabet {a,b,c} d�crits par l’expression r�guli�re (a+b+c)*b(a+b+c).
Exercice�7.10�� Construire un automate fini non-d�terministe qui reconna�t les nombres dont le dernier chiffre n’appara�t qu’une fois.
Exercice�7.11�� Mod�lisation d’un jeu (d’apr�s la page de Jean-Eric Pin). Le joueur a les yeux band�s. Face � lui, un plateau sur lequel sont dispos�s en carr� quatre jetons, blancs d’un c�t� et noirs de l’autre. Le but du jeu est d’avoir les quatre jetons du c�t� blanc. Pour cela, le joueur peut retourner autant de jetons qu’il le souhaite, mais sans les d�placer. A chaque tour, le ma�tre de jeu annonce si la configuration obtenue est gagnante ou pas, puis effectue une rotation du plateau de z�ro, un, deux ou trois quarts de tours. La configuration de d�part est inconnue du joueur, mais le ma�tre de jeu annonce avant le d�but du jeu qu’elle n’est pas gagnante. Chaque annonce prend une seconde, et il faut 3 secondes au joueur pour retourner les jetons. Pouvez-vous aider le joueur � gagner en moins d’une minute ?

7.4.2��D�terminisation d’un automate fini non-d�terministe

Un automate fini d�terministe est aussi non-d�terministe. Donc tout langage reconnu par un automate fini d�terministe est reconnu par un automate fini non-d�terministe. Plus surprenant, la r�ciproque est aussi vraie (Th�or�me de Rabin-Scott).

Consid�rons un automate fini non-d�terministe An = (Qn, Σ, δn, q0, Fn) et construisons un automate fini d�terministe Ad = (Qd, Σ, δd, {q0}, Fd) qui reconna�t exactement le m�me langage.

Nous illustrons le th�or�me de Rabin-Scott sur quelques exemples.

Exemple�7.3�� reprenons l’exemple de l’exercice 7.8. Il s’agissait de construire un automate fini non-d�terministe reconnaissant les mots de l’alphabet {a,b} qui terminent par bab. L’automate suivant r�pond � la question.
Essayons maintenant de le d�terminiser en construisant un nouvel �tat � partir de chaque sous ensemble d’�tat possible.
Remarquons que les �tats {1}, {2}, {3}, {0,2}, {0,3}, {1,2}, {2,3}, {0,1,2}, {1,2,3}, {0,2,3} sont inatteignables et peuvent �tre “retir�s” de l’automate.

En pratique, lors de la conversion, on ne cr�e pas imm�diatement tous les �tats de l’automate fini d�terministe. Les �tats “utiles” sont cr�es quand on en a besoin en suivant la m�thode de construction ci-dessous :

Exercice�7.12�� D�terminiser l’automate de l’exercice 7.7 (long).

7.4.3��Les є transitions

Rappelons qu’є repr�sente le mot vide. Une є transition (not�e є sur l’arc d’un automate) permet de passer d’un �tat � l’autre d’un automate sans lire de symbole. Cette facilit� permet de programmer facilement des automates complexes.

Une table de transition peut �tre associ�e � un automate contenant des є transition. La table est identique � celle utilis�e pour un automate fini non-d�terministe � ceci pr�s qu’on la compl�te d’une colonne associ�e au caract�re vide є.

Exemple�7.4�� Pour illustrer les є transitions, construisons un automate fini non d�terministe qui reconna�t les nombres d�cimaux. Rappelons qu’un nombre d�cimal est un nombre r�el qui est le quotient d’un entier relatif par une puissance de dix. Plus pr�cis�ment, on souhaite pouvoir �crire le nombre d�cimal en commen�ant par un “+” ou un “-’, suivi d’une suite de chiffres, d’une virgule et d’une suite de chiffres. Bien entendu, le “+” ou le “-” sont optionnels, la premi�re cha�ne de chiffres ne peut pas �tre vide et ne commence pas par “0” (sauf si le nombre d�cimal est 0). La seconde cha�ne ne se termine pas par “0”. Si seconde cha�ne est vide, on omet la “,”.

La transition de l’�tat A � l’�tat B est r�gie par є,+,−. Ainsi, on peut passer de AB soit en lisant +, soit en lisant − soit enfin en ne lisant rien.

La table de transition associ�e � cet automate est alors :

 є+,0129
A{B}{B}{B}
B{F}{C}{C}{C}
C{D}{C}
D{D}{D,E}{D,E}{D,E}
* E
* F
Exercice�7.13�� On cherche � construire un automate qui reconna�t les mots qui se terminent par bab ou qui commencent par aba.

L’introduction des є transition ne change pas la nature des langages reconnus par les automates. Comme pour les automates non-d�terministes que l’on peut toujours d�terminiser, il est toujours possible d’�liminer les є transition et d’obtenir un automate fini d�terministe �quivalent. Nous n’aborderons pas ici cette �limination.

7.5��Automates finis et expressions r�guli�res

Les automates finis et les expressions r�guli�res ont la m�me expressivit�. En effet, le th�or�me d’�quivalence des expressions r�guli�res et des automates finis (Kleene) �tablit que Le langage accept� par un automate fini correspond � la valeur d’une expression r�guli�re et r�ciproquement.

7.6��Un peu de Java

Il est ais� de repr�senter les automates finis sous la forme d’un programme java. Notre objectif est de

Sans perte de g�n�ralit�, nous allons supposer que l’alphabet est l’ensemble des caract�res ASCII et que les �tats sont num�rot�s � partir de 0.

7.6.1��Mod�le

Le mod�le de donn�es est alors tr�s simple :

Soit donc en Java les deux classes List et Automate.

classListe�{
����int�val;
����Liste�suivant;
����Liste(int�v,�Liste�x)�{
��������val�=�v;
��������suivant�=�x;
����}
}

classAutomate�{
����int�q0;�����������//��tat�initial�
����Liste[][]�delta;��//�fonction�de�transition�
����Liste�finaux;�����//��tats�finaux
����Automate(int�q,�Liste�f,�Liste[][]d)�{
��������q0�=�q;
��������delta�=�d;
��������finaux�=�f;
����}
}

7.6.2��Algorithme de recherche

Nous aurons besoin de quelques fonctions classiques sur les listes

staticint�longueur(Liste�x)�{������������//�La�longueur�d'une�liste
����if�(x�==�null)
��������return�0;
����else
��������return�1�+�longueur(x.suivant);
}
staticint�kieme(Liste�x,�int�k)�{�������//�Le�k��me��l�ment
����if�(k�==�1)
��������return�x.val;
����else
��������return�kieme(x.suivant,�k-1);
}
staticboolean�estDans(Liste�x,�int�v)�{�//�Le�test�d'appartenance
����if�(x�==�null)
��������returnfalse;
����else
��������return�x.val�==�v�||�estDans(x.suivant,�v);
}

La fonction accepter(String mot, Automate a) qui permet de v�rifier qu’un mot mot est accept� apr l’automate a appelle la fonction static boolean accepter(String mot, Automate a, int i, int q).

staticboolean�accepter(String�mot,�Automate�a)�{
����return�accepter(mot,�a,�0,�a.q0);
}
staticboolean�accepter(String�mot,�Automate�a,�int�i,�int�q)�{
����if�(i�==�mot.length())
��������returnListe.estDans(a.finaux,�q);
����else�{
��������boolean�resultat�=�false;
��������int�c�=�mot.charAt(i);���//�le�code�ASCII�du�caract�re�courant
��������for�(Liste�nv_q�=�a.delta[q][c];�nv_q�!=�null;�nv_q�=�nv_q.suivant)
������������resultat�=�resultat�||�accepter(mot,�a,�i+1,�nv_q.val);
��������return�resultat;
����}
}

La fonction staticboolean�accepter(String�mot,�int�i,�Automate�a,�int�q) prend, en plus de l’automate et du mot que l’on �tudie, deux autres param�tres :

Elle renvoie true si et seulement si le sous-mot de mot dont on a retir� les i premiers caract�res �tait reconnu par un automate semblable � a dont l’�tat initial serait q.

Remarquons que si i est le dernier caract�re du mot (ce qui correspond au test if�(i�==�mot.length())) alors il suffit de tester l’appartenance de qa.finaux. Si ce n’est pas le cas, on va essayer d’emprunter toutes les transitions possibles. on explore ainsi tous les �tats nv_q.val atteignable � partir de q en lisant c. Une fois dans l’�tat nv_q.val, on appelle r�cursivement accepter.

7.6.3��Mise en œuvre sur un automate

Consid�rons l’automate suivant qui accepte toutes les cha�nes qui se terminent par “01”.

La table associ�e � cet automate est alors :

 01
→ 0{0,1} {0}
1{2}
* 2

Pour le construire, il nous suffit de construire la table de transition.

����publicstaticvoid�main(String�[]�arg)�{
��������Liste[][]�delta�=�newListe[3][128];
��������delta[0][(int)'0']�=�newListe(0,�newListe(1,�null));
��������delta[0][(int)'1']�=�newListe(0,�null);
��������delta[1][(int)'0']�=�null;
��������delta[1][(int)'1']�=�newListe(2,�null);
��������delta[2][(int)'0']�=�null;
��������delta[2][(int)'1']�=�null;
��������Automate�a�=�newAutomate(0,
����������������������������������newListe(2,�null),
����������������������������������delta);
��������System.out.println("accepter�=�"�+�accepter(arg[0],�a));
����}

Remarquons que le code ASCII du caract�re ’0’ est obtenu par (int)’0’.

Exercice�7.14�� Comment proc�der pour coder un automate avec des є transitions ?

Previous Up Next