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.