Utilisateur:ManiacParisien/Brouillons/Bio

En informatique théorique, et tout particulièrement en théorie des langages formels, le problème de l'équivalence d'automates est de déterminer si deux automates acceptent (ou reconnaissent) le même langage. Ce problème s'inscrit dans le cadre plus général qui consiste à déterminer si deux mécanismes de reconnaissance (comme les machines de Turing ou des automates à pile) acceptent le même langage ou si deux procédés de production (comme les grammaires formelles ou des règles de réécriture) engendrent le même langage.

Équivalence d'automates finis modifier

Deux automates finis sont équivalents s'ils acceptent le même langage. Plusieurs algorithmes existent pour décider si deux automates finis sont équivalents.

Un algorithme naïf modifier

Étant donnés deux automates finis déterministes   et   sur un alphabet commun   reconnaissant respectivement les langages   et  , les constructions, sur les automates, des opérations booléennes sur les langages permettent de construire un automate   qui reconnaît la différence symétrique  . Ce ensemble est vide si et seulement si  . Le test revient donc à tester si le langage reconnu par l'automate   est vide.

Algorithme par minimisation et bijection modifier

Étant donnés deux automates finis déterministes   et   sur un alphabet commun  , pour savoir s'ils reconnaissant le même langage, on minimise dans une première étape   et   et, dans une deuxième étape, on teste l'égalité des automates minimaux. En effet, il n'existe qu'un seul automates minimal, à isomorphisme près, pour une langage donné. Le test d'isomorphie se code comme suit[1]. On teste l'égalité par la tentative de construire deux bijections, l'une étant la réciproque de l'autre, entre les deux automates minimaux ; dans le code suivant essaie de construire les fonctions   et   :

Bij  , 
  si un seul de   et   est défini
  ou si   et   sont définis et f(q_1)\ne q_2
    retourner faux 
  si f(q1) et h(q2) ne sont pas définis
    f(q1) := q2; h(q2) := q1; 
    pour toute lettre   faire
      Bij  
    retourner vrai 

La procédure est appelée sur les états initiaux des deux automates

Algorithme de Hopcroft et Karp modifier

John Hopcroft et Richard Karp ont décrit[2], dans un rapport technique paru en 1971 un algorithme pour tester l'équivalence de deux automates finis déterministes basé sur la construction d'une partition des états de l'union des deux automates. Le rapport technique n'a pas donné lieu à publication, le titre « A linear time algorithm ... » est trompeur parce que l'algorithme, qui utilise la structure de données union-find, n'est en fait pas linéaire[3].

Soient donnés deux automates finis déterministes   et   sur un alphabet commun  . On suppose que les ensembles d'états sont disjoints ( ) et on pose  .

Code modifier

Le code de l'algorithme est le suivant[4] :

equiv  , 
  si  un seul de   et   est terminal
    retourner faux 
    = FIND  ;   = FIND   
    = UNION  
  pour toute lettre   faire
    equiv  
  retourner vrai 

La fonction est appelée par

equiv  , 

Exemple modifier

La partition en classes évolue comme suit :

1|2|3|4|5|6|7 
15|2|3|4|6|7 
15|26|3|4|7 
15|236|4|7 
15|236|47

Les deux automates sont donc équivalents puisque chaque classe contient seulement des états terminaux ou seulement des états non-terminaux.

Notes et références modifier

  1. Kucherov 2011.
  2. Hopcroft et Karp 1971.
  3. Une discussion détaillée de ce point est donnée dans la thèse de maîtrise de Daphne A. NortonNorton 2009, p. 45-46.
  4. Kucherov 2011.

Bibliographie modifier