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.
Tentei resolvê-lo de uma maneira indireta:
- Gerando uma expressão regular
- Fazendo sua NFA correspondente
- Usando a construção do conjunto de poderes para deduzir um DFA
- 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 é:
(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:
(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
fonte
Respostas:
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
ba
eab
(que não estão no idioma original, nem são aceitas pelo DFA na etapa 3) levam ao estado finalE
.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.
fonte