Alphabet Σ : par exemple constitué de 2 lettres {a, b}
Mots créés à partir de l’alphabet Σ : par exemples aaa, ababab, bbaaa, etc.
Un automate va être un ensemble d’états (cercles) et de transitions (flèches)
Un état initial (pour nous il n’y en aura qu’un seul et ce sera toujours le cercle de numéro “0”) et un ou plusieurs états finaux (cercles doubles)
Un mot est accepté lorsque l’on arrive dans un état final sinon il est rejeté.
Automate n°1
Cet automate accepte-t-il le mot “ba” ? Réponse : NON, car en partant de l’état 0, la lettre “b” nous amène au cercle 1 puis le “a” nous ramène à l’état 0. Or cet état n’est pas un état final (pas de cercle double comme pour le 1). Donc le mot est refusé.
Cet automate accepte-t-il le mot “abbb” ? Réponse : OUI, le “a” nous amène au cercle 1 puis on y reste avec les 3 “b”.
Intuitivement, quels mots reconnait cet automate ? Réponse : Que l’on soit en 0 ou en 1, la lettre “a” nous ramène en 0. Pour arriver en 1 il faudra donc que la dernière lettre soit obligatoirement un “b”. Inversement, il suffit que le mot se termine par un “b” pour arriver à l’état final 1. Cet automate reconnait tous les mots (écrits avec l’alphabet Σ = {a, b} qui se terminent par “b”)
Automate n°2
Il ressemble beaucoup au précédent mais il ne reconnait pas du tout le même langage !
Cet automate accepte-t-il le mot “ba” ? Réponse : OUI
Cet automate accepte-t-il le mot “aa” ? Réponse : NON
Cet automate accepte-t-il le mot “abbaabb” ? Réponse : OUI
Intuitivement, quels mots reconnait cet automate ? Réponse : Les mots qui contiennent un nombre impair de “a”
On re
a1=[{"a":0,"b":1},{"a":0,"b":1}]f1=[1]a2=[{"a":1,"b":0},{"a":0,"b":1}]f2=[1]defaccepte(mot,a,f):e=0forcinmot:e=a[e][c]returneinf# accepte("abbb",a1,f1) donne True
# accepte("abbaabb",a2,f2) donne True
defdetails(mot,a,f):e=0forcinmot:print("Etat "+str(e))e=a[e][c]print("Lettre "+c+" >")ifeinf:returnstr(e)+" = etat final"returnstr(e)+" = pas final"