Conversão de AFN em AFD
Vamos mostrar como converter um autômato não determinístico em um autômato determinístico, o que demonstrará que o poder computacional dos autômatos não determinísticos e o dos determinísticos são equivalentes.
Ideia básica
Considere um autômato não determinístico ⟨QN, ΣN, δN, q0, FN⟩ sem transições ε. Montamos o autômato determinístico ⟨QD, ΣD, δD, p0, FD⟩ de modo que
- QD ⊆ 2QN
- ΣD = ΣN
- p0 = {q0}
- FD = {Q ∈ QD | Q ∩ FN ≠ ∅}
Definimos a função de transição δD da seguinte maneira:
O que isso significa? O autômato não determinístico pode estar ao mesmo tempo em vários estados, de modo que, por exemplo, podemos chegar a uma situação em que o nosso autômato não determinístico está nos estados {q0, q1}. Ao ler o símbolo seguinte, por exemplo 1, podemos chegar ao conjunto de estados {q0, q2, q3}. Na versão determinística do mesmo autômato, isso se manifesta assim: criamos dois estados, damos a eles os nomes {q0, q1} e {q0, q2, q3} e introduzimos entre eles uma transição para o símbolo 1. Formalmente, passamos de um estado para outro, mas, graças aos nomes, saberemos que no autômato não determinístico estaríamos em dois ou, respectivamente, em três estados.
Exemplo
Considere este autômato não determinístico:
Para construir o autômato determinístico, precisamos antes de tudo construir uma nova função de transição. Para isso, usamos uma tabela, na qual anotamos todas as transições. No começo, a tabela é assim:
Na coluna da esquerda teremos, no fim do algoritmo, todos os estados do autômato determinístico. A tabela preenchida determinará, então, a função de transição. Agora anotamos na tabela para quais estados vamos se estamos no estado {q0} e na entrada estão os símbolos 0 e 1.
Do estado q0 sai, para o símbolo 0, uma transição apenas para o estado q1, enquanto para o símbolo 1 saem transições para os estados q1 e q2. Agora acrescentamos à tabela dois novos estados: {q1} e {q1, q2}. Por quê? Sempre que escrevemos na tabela algum conjunto de estados que ainda não temos na coluna da esquerda, nós o acrescentamos a essa coluna.
e de novo preenchemos. No caso do estado {q1, q2} não podemos esquecer de verificar os dois estados, isto é, fazer a união dos estados aonde vamos a partir do estado q1 com os estados aonde vamos a partir do estado q2.
Obtivemos vários estados novos, que precisamos acrescentar à tabela:
…e de novo completamos as transições:
Os estados {q0, q1, q3}, {q1} e {q1,q2} já estão ali, então acrescentamos apenas o estado {q0,q1,q2,q3}.
Não acrescentamos mais nenhum estado novo, então a tabela está preenchida. Agora só falta montar o diagrama. Os estados do autômato determinístico estão na primeira coluna, e as transições para os símbolos 0 e 1 estão nas colunas seguintes. Todo estado que contém algum estado final do autômato original será um estado final também neste autômato. Ou seja, todo estado que contém q3 será um estado final. O autômato ficará assim:
Podemos mostrar que o autômato funciona mesmo corretamente. Vamos tentar aceitar a palavra 11001. No autômato determinístico seguiremos o caminho
e o autômato aceitaria a palavra, porque o último estado {q0, q1, q2, q3} é final. No autômato não determinístico, durante a simulação chegaríamos aos mesmos estados, isto é, começaríamos no estado q0 e, para o símbolo 1, chegaríamos aos estados {q1, q2}. O símbolo 1 seguinte nos levaria aos estados {q0,q3} etc. para os demais estados. No fim nos encontraríamos em todos os estados {q0, q1, q2, q3}, e o autômato aceitaria a palavra.
Fontes
Capítulos: Autômato finito, Autômato completo, Autômato finito não determinístico, Simulação de um autômato não determinístico, Conversão de AFN em AFD