Problema con l'implementazione dell'algoritmo di Brzozowski


8

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?

Risposte:


5

Questa è un'ottima domanda!

Il passaggio di ripristino dell'Algoritmo di Brzozowski non introduce un nuovo stato di partenza virtuale che porta ai vecchi stati di accettazione tramite transizioni . Permette invece più stati di partenza, il che non è un grosso problema, se costruisci l'automa del prodotto comunque subito dopo l'inversione.ε

Concettualmente, è il più semplice considerare il ripristino e la determinazione come un unico passaggio. Se il tuo DEA è , allora definiscilo come DEA ripristinato come segue:M=(Q,Σ,δ,q0,F)MR=(QR,Σ,δR,q0R,FR)

  • QR=P(Q) ,
  • q0R=F ,
  • FR={PQq0P} ,
  • δR(P,a):={pQδ(p,a)P} .

(Potresti voler ignorare gli stati che non sono raggiungibili.)

Il teorema di Brzozowski afferma che è un DEA minimo che accetta .(MR)RL(M)

Per ulteriori approfondimenti suggerisco Elements of Automata Theory di Sakarovitch pagine 116-117.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.