Ho cercato di implementare l'algoritmo di Brzozowski ma ho appena scoperto che crea automi non ottimali per una certa classe di input, con uno stato in più di quello che è veramente necessario nel risultato. Posso mostrarlo su un automa banale:
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
Qui rev è la parte di inversione del bordo, dove avevo già rimosso le transizioni su epsilon, e det è la determinazione attraverso la costruzione di powerset, creando nuovi stati non appena li scopre, in modo ricorsivo.
Il problema qui è questo: una volta aggiunto lo stato extra per compensare i tre diversi stati iniziali dopo l'inversione del primo spigolo e la costruzione del powerset, nulla torna mai a quello stato e quindi non posso liberarmene in seguito per essere equivalente allo stato iniziale originale.
C'è qualcosa che non va nel modo in cui lo sto facendo? Mi sto perdendo qualcosa?