Não é possível converter de NFA para DFA


11

Eu tenho um problema simples de criar um DFA que aceite todas as entradas começando com letras duplas (aa, bb) ou terminando com letras duplas (aa, bb), dado que é o conjunto de determinado idioma.Σ={a,b}

Tentei resolvê-lo de uma maneira indireta:

  1. Gerando uma expressão regular
  2. Fazendo sua NFA correspondente
  3. Usando a construção do conjunto de poderes para deduzir um DFA
  4. Minimizar o número de estados no DFA

Etapa 1: a expressão regular para um determinado problema é (entre inúmeros outros):

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

Etapa 2: o NFA para determinada expressão é:

NFA
(fonte: livefilestore.com )

Em forma de tabela, o 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)       -           -

Etapa 3: converter em um DFA usando a construção do conjunto de poderes:

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}

Etapa 4: minimizar o DFA:

Eu mudei K-> G, J-> F, I-> E primeiro. Na próxima iteração, H-> D e E-> F. Assim, a mesa final é:

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

E diagramaticamente se parece com:

DFA final
(fonte: livefilestore.com )

... que não é o DFA necessário! Eu verifiquei três vezes o meu resultado. Então, onde eu errei?

Nota:

  • -> = estado inicial
  • () = estado final

3
Este é um ótimo exemplo para uma pergunta básica que foi bem colocada, porque você inclui toda a sua linha de pensamento.
Raphael

É ótimo ser apreciado, obrigado! ^^
Anurag Kalia

Respostas:


5

Você está bem até a etapa 3 (o DFA), mas sua minimização está incorreta.

Está claro que o DFA minimizado não está correto, porque as entradas bae ab(que não estão no idioma original, nem são aceitas pelo DFA na etapa 3) levam ao estado final E.

Observando suas etapas de minimização, parece que você possui estados finais e não finais unificados; por exemplo J (final) -> F (não final) e I (final) -> E (não final). A mesclagem de um estado final com um estado não final altera o idioma aceito pelo autômato, levando à aceitação de cadeias incorretas, conforme observado acima.


1
Oh Então, é isso que está criando problemas aqui. Agora que me lembro, da última vez que usei esse método, não havia nenhum estado de aceitação em particular na tabela!
Anurag Kalia
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.