Minimização de autômatos
Por minimização de um autômato entendemos encontrar um autômato equivalente que contenha o menor número possível de estados. Mesmo um autômato que não contém nenhum estado inútil pode ser simplificado ainda mais.
Exemplo
Tome este autômato:
o autômato aceita apenas as palavras 01 e 11. É evidente que existe um autômato mais simples, com três estados, que aceita a mesma linguagem. Os estados q1 e q2 podem ser fundidos em um novo estado {q1, q2}, e as transições que levavam aos estados q1 ou q2 passarão a levar ao novo estado, e o mesmo vale para as transições que saíam de q1 e q2. Obtemos este autômato:
Esse autômato claramente aceita a mesma linguagem que o anterior e, ao mesmo tempo, tem menos estados.
Equivalência de estados
Considere um autômato A = ⟨Q, Σ, δ, q0, F⟩. Definimos a linguagem do estado q ∈ Q, que denotamos por L(q), como
Isto é, mudamos o estado inicial do autômato A de q0 para q e calculamos a linguagem aceita por esse autômato. Em outras palavras, na linguagem L(q) estão todas as palavras w tais que, no autômato A, a partir do estado q, com a palavra w, chegamos a um estado final do autômato. Voltando ao autômato anterior, temos L(q1) = {1}.
Dizemos que dois estados distintos q1 e q2 são equivalentes se vale
O que isso significa? Se os estados q1, q2 são equivalentes, então, se fizermos deles estados iniciais do autômato, eles gerarão a mesma linguagem. Em outras palavras: se o autômato chega às configurações ⟨q1, w⟩ e ⟨q2, w⟩, então nos dois casos ele deve aceitar ou, nos dois casos, rejeitar.
Voltando ao autômato anterior: os estados q1 e q2 são equivalentes, porque, se estamos no estado q1, só podemos aceitar a palavra de entrada se a parte não lida da palavra for igual a 1. O mesmo vale se estamos no estado q2.
Na minimização de um autômato, trata-se, portanto, de encontrar estados equivalentes e eliminá-los, fundindo-os em um único novo estado, como fizemos no exemplo acima.
Como encontrar estados equivalentes
Que estados certamente não serão equivalentes? Se tomarmos um estado final e um estado não final, eles certamente não serão equivalentes, porque a linguagem do estado final é diferente da linguagem do estado não final — o estado final com certeza aceita a palavra ε, e o não final, não. Vamos mostrar o procedimento logo em um exemplo. Considere este autômato:
Começamos criando dois conjuntos de estados
Agora criamos a tabela de transições e mantemos a informação sobre os grupos S1 e S2:
Agora modificamos a tabela de modo que, em vez de ter escrito diretamente para quais estados se vai com o símbolo dado, anotamos ali apenas o grupo para o qual passamos. Por exemplo, do estado q3, com 0, chegamos ao estado q5, que está no grupo S2. Em vez de q5, escrevemos, então, na tabela S2:
Agora dividimos os dois grupos mais uma vez. Colocamos nos mesmos grupos sempre os estados que passam para os mesmos grupos para todos os símbolos. Por exemplo, os estados q3 e q6 não ficarão no mesmo grupo, porque nem com 0 nem com 1 vão para o mesmo grupo. Já os estados q1 e q2 ficarão no mesmo grupo, porque nenhum dos dois tem transição para 0 e ambos vão, com 1, para o grupo S1. Criamos, assim, novos grupos:
Em cada grupo temos as mesmas transições. Rotulamos os grupos recém-criados e de novo descobrimos para qual desses novos grupos os estados apontam:
Neste momento faríamos outra divisão dos grupos. Mas vemos que não podemos fazer mais nenhuma divisão, porque obteríamos os mesmos grupos — pois os estados q1 e q2 têm, de fato, as mesmas transições dentro dos grupos, mas já estão no mesmo grupo, e nenhum outro estado está no grupo S4. O algoritmo de busca de estados equivalentes chegou ao fim. De cada grupo basta escolher um estado; apagamos os outros, e todas as transições que levavam aos estados apagados passarão a levar ao único estado que escolhemos.
Podemos escolher, assim, que o nosso novo autômato terá os estados q3, q6, q0, q1, q4 e removemos os estados q2 e q5. Todas as transições que levavam a q2 agora levarão a q1, e todas as transições que levavam a q5 levarão a q4:
Procedimento de minimização de um autômato
- Removemos os estados inacessíveis,
- removemos os estados inúteis,
- removemos os estados equivalentes.
Fontes
Capítulos: Estados inacessíveis, Estados inúteis, Minimização de autômatos