J'ai essayé d'implémenter l'algorithme de Brzozowski mais je viens de découvrir qu'il crée des automates sous-optimaux pour une certaine classe d'entrées, ayant un état de plus que ce qui est vraiment nécessaire dans le résultat. Je peux le montrer sur un automate trivial:
a b a b a b a b a b
>0 0 1 rev *0 0,2 - det >0 - 1 rev *0 - - det >0 1 2
1 1 2 --> 1 1 0 --> 1 2 5 --> 1 - 0,4 --> 1 1 2
*2 0 2 >2 - 1,2 2 2 3 2 1,2 - 2 2 3
*3 4 - 3 - 2 *3 1 3
*4 4 1 4 3,4 -
*5 5 5 5 5 1,5
>6 3,4,5 1,2,5
Ici, rev est la partie d'inversion de bord, où j'avais déjà supprimé les transitions sur epsilon, et det est la détermination par la construction du jeu de puissance, créant de nouveaux états dès qu'il les découvre, récursivement.
Le problème ici est le suivant: une fois que j'ai ajouté l'état supplémentaire pour compenser les trois états de départ différents après l'inversion du premier bord et la construction du jeu de puissance, rien ne revient jamais à cet état et donc je ne peux pas m'en débarrasser plus tard pour être équivalent à l'état de départ d'origine.
Y a-t-il quelque chose qui ne va pas dans ma façon de procéder? Suis-je en train de manquer quelque chose?
la source