O objetivo da minimização de um autômato finito é, dado um Autômato finito determinístico, gerar um autômato finito equivalente com o menor número de estados possível, denominado Autômato Finito Mínimo. O autômato finito mínimo é único. Portanto, ao minimizar dois autômatos distintos que reconhecem uma mesma linguagem, obtém-se um mesmo autômato finito mínimo (diferenciando-se apenas eventualmente na identificação dos estados). O algoritmo para se obter um autômato finito mínimo consiste na unificação de estados equivalentes.
Dado um autômato finito determinístico , dois estados e de são ditos estados equivalentes se e somente se, para qualquer palavra , e resultam simultaneamente em estados finais ou não-finais.
Um autômato finito a ser minimizado deve satisfazer os seguintes pré-requisitos:
- Deve ser determinístico. Caso não seja, é possível gerar um autômato equivalente.
- Todos os estados do autômato devem ser estados alcançáveis a partir do estado inicial. Caso haja estados inalcançáveis, basta eliminá-los, bem como suas respectivas transições.
- A função de transição deve ser total, ou seja, a partir de qualquer estado, as transições para todos os símbolos de entrada são definidas. Caso o autômato possua transições indefinidas, basta introduzir um estado não-final e incluir as transições faltantes levando à esse estado. Por fim, é necessário incluir um ciclo no novo estado para todos os símbolos do alfabeto.
Dado um autômato finito determinístico que satisfaça as condições anteriores, os passos para obter-se o autômato finito mínimo de são:
- Construir uma tabela relacionando os estados distintos, sendo que cada par não-ordenado de estados ocorre somente uma vez.
- Marcar todos os pares nos quais ambos estados não são finais ou não-finais, pois é imediato verificar que um estado final não é equivalente a um não-final e vice-versa.
- Para cada par ainda não marcado na tabela, supondo que para cada símbolo tem-se e , então:
- Se , então é equivalente a para o símbolo e o par não deve ser marcado;
- Se , e o par não está marcado, então o par é incluído em uma lista encabeçada por para posterior análise;
- Se , e o par está marcado, então os estados e não são equivalentes e o par deve ser marcado. Se encabeça uma lista, então marcar todos os pares da lista (e recursivamente caso algum par da lista encabece outra lista);
- Os estados dos pares não marcados são equivalentes e podem ser unificados. Pares de estados não-finais se tornam um único estado final, e pares de estados finais se tornam um único estado final. Pares de estados nos quais um dos estados é o estado inicial se tornam um único estado inicial. Vale destacar que a equivalência de estados é transitiva.
- Os estados inúteis devem ser excluídos. Um estado é dito inútil se é não-final e a partir de não é possível atingir um estado final.