Conversão NDFA para DFA

Declaração do Problema

Deixei X = (Qx, ∑, δx, q0, Fx)ser um NDFA que aceita a linguagem L (X). Temos que projetar um DFA equivalenteY = (Qy, ∑, δy, q0, Fy) de tal modo que L(Y) = L(X). O procedimento a seguir converte o NDFA em seu DFA equivalente -

Algoritmo

Input - Um NDFA

Output - Um DFA equivalente

Step 1 - Crie uma tabela de estados a partir do NDFA fornecido.

Step 2 - Crie uma tabela de estado em branco em possíveis alfabetos de entrada para o DFA equivalente.

Step 3 - Marque o estado inicial do DFA por q0 (igual ao NDFA).

Step 4- Descubra a combinação dos estados {Q 0 , Q 1 , ..., Q n } para cada alfabeto de entrada possível.

Step 5 - Cada vez que geramos um novo estado DFA nas colunas do alfabeto de entrada, temos que aplicar a etapa 4 novamente, caso contrário, vá para a etapa 6.

Step 6 - Os estados que contêm qualquer um dos estados finais do NDFA são os estados finais do DFA equivalente.

Exemplo

Vamos considerar o NDFA mostrado na figura abaixo.

q δ (q, 0) δ (q, 1)
uma {a, b, c, d, e} {d, e}
b {c} {e}
c {b}
d {e}
e

Usando o algoritmo acima, encontramos seu DFA equivalente. A tabela de estado do DFA é mostrada a seguir.

q δ (q, 0) δ (q, 1)
[uma] [a, b, c, d, e] [d, e]
[a, b, c, d, e] [a, b, c, d, e] [b, d, e]
[d, e] [e]
[b, d, e] [c, e] [e]
[e]
[c, e] [b]
[b] [c] [e]
[c] [b]

O diagrama de estado do DFA é o seguinte -