Impossibile convertire da NFA a DFA


11

Ho un semplice problema di creare un DFA che accetta tutti gli input che iniziano con lettere doppie (aa, bb) o terminano con lettere doppie (aa, bb), dato è il set alfabetico del lingua data.Σ={a,b}

Ho provato a risolverlo in modo circolare:

  1. Generare un'espressione regolare
  2. Realizzare il corrispondente NFA
  3. Utilizzo della costruzione del powerset per dedurre un DFA
  4. Riduzione al minimo del numero di stati in DFA

Passaggio 1: l' espressione regolare per un determinato problema è (tra le innumerevoli altre):

((aa|bb)(a|b)*)|((a|b)(a|b)*(aa|bb))

Passaggio 2: NFA per l'espressione data è:

NFA
(fonte: livefilestore.com )

In forma tabulare, NFA è:

State    Input:a     Input:b
->1        2,5         3,5
  2        4           -
  3        -           4
 (4)       4           4
  5        5,7         5,6
  6        -           8
  7        8           -
 (8)       -           -

Passaggio 3: convertire in DFA utilizzando la costruzione di powerset:

Symbol, State       +   Symbol, State (Input:a) +   Symbol, State (Input:b)
   ->A, {1}         |        B, {2,5}           |        C, {3,5}
     B, {2,5}       |        D, {4,5,7}         |        E, {5,6}
     C, {3,5}       |        F, {5,7}           |        G, {4,5,6}
   (D), {4,5,7}     |        H, {4,5,7,8}       |        G, {4,5,6}
     E, {5,6}       |        F, {5,7}           |        I, {5,6,8}
     F, {5,7}       |        J, {5,7,8}         |        E, {5,6}
   (G), {4,5,6}     |        D, {4,5,7}         |        K, {4,5,6,8}
   (H), {4,5,7,8}   |        H, {4,5,7,8}       |        G, {4,5,6}
   (I), {5,6,8}     |        F, {5,7}           |        I, {5,6,8}
   (J), {5,7,8}     |        J, {5,7,8}         |        E, {5,6}
   (K), {4,5,6,8}   +        D, {4,5,7}         +        K, {4,5,6,8}

Passaggio 4: ridurre a icona DFA:

Ho prima cambiato K-> G, J-> F, I-> E. Nella prossima iterazione, H-> D ed E-> F. Pertanto, il tavolo finale è:

  State    +   Input:a     +   Input:b
   ->A     |      B        |      C
     B     |      D        |      E
     C     |      E        |      D
    (D)    |      D        |      D
    (E)    |      E        |      E

E schematicamente sembra:

DFA finale
(fonte: livefilestore.com )

... che non è il DFA richiesto! Ho controllato tre volte il mio risultato. Quindi, dove ho sbagliato?

Nota:

  • -> = stato iniziale
  • () = stato finale

3
Questo è un ottimo esempio per una domanda di base che è stata posta bene, perché includi l'intero treno di pensieri.
Raffaello

È fantastico essere apprezzato, grazie! ^^
Anurag Kalia,

Risposte:


5

Stai bene fino al passaggio 3 (DFA) ma la tua minimizzazione non è corretta.

È chiaro che il DFA minimizzato non è corretto, perché entrambi gli input bae ab(che non sono nella lingua originale, né sono accettati dal DFA nel passaggio 3) portano allo stato finale E.

Guardando i tuoi passi di minimizzazione, sembra che tu abbia unificato stati finali e non finali; ad esempio J (finale) -> F (non finale) e I (finale) -> E (non finale). La fusione di uno stato finale con uno stato non finale modifica la lingua accettata dall'automa, portando all'accettazione di stringhe errate come indicato sopra.


1
Oh. Quindi, questo è ciò che sta creando problemi qui. Ora che ricordo, l'ultima volta che ho usato questo metodo, non c'erano stati particolari stati di accettazione nella tabella!
Anurag Kalia,
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.