Muitas vezes é possível ter mais de um autômato reconhecendo o mesmo conjunto de sentenças, em geral através da presença de estados redundantes. O procedimento apresentado nesta seção permite detectar tais situações de redundância, reduzindo o número de estados do autômato ao mínimo possível.
O procedimento de minimização de estados de um autômato
inicia-se pela criação de uma partição
inicial
do conjunto de estados
contendo dois
subconjuntos, um com todos os estados finais,
, e outro contendo
os estados não-finais,
.
O procedimento prossegue com o refinamento da partição corrente
para a criação de uma nova partição
. Para tanto,
analisa-se cada um dos conjuntos que compõem
buscando a
criação de novas partições que sejam equivalentes sob
transições. Partindo de cada grupo
de estados em
, um
novo subgrupo
conterá dois estados
e
se e somente
se, para todos os símbolos do alfabeto de entrada,
e
tenham transições para um mesmo grupo de
.
A partir desse processo de refinamento dos grupos de , o
conjunto dos subgrupos resultantes forma uma nova partição
. O procedimento deve ser repetido até que a nova
partição gerada seja igual à partição corrente, situação que indica
que novos refinamentos não são mais possíveis.
Para construir o autômato com o número mínimo de estados, associa-se a
cada subgrupo da partição final atingida por esse procedimento um
estado da nova máquina . Eventualmente, o procedimento pode
gerar ``estados mortos'', que não são estados finais e contêm
transição apenas para si próprios, ou estados não-alcançáveis a partir
do estado inicial. Tais estados podem ser eliminados do autômato
resultante.
Aplicando esse procedimento ao autômato da Figura 3.5, tem-se que a partição inicial é
A segunda partição,
, é irredutível e não será mais
analisada -- este será o estado final do autômato minimizado. Para
aplicar o procedimento de refinamento à primeira partição,
, deve-se analisar para cada estado qual o
grupo resultante pela transição para cada um dos dois símbolos do
alfabeto,
e
:
![]() |
![]() |
![]() |
![]() |
|
a | ![]() |
![]() |
![]() |
![]() |
b | ![]() |
![]() |
![]() |
![]() |
Observa-se que o grupo pode ser particionado em dois novos
grupos,
e
. Assim, a
nova partição a ser analisada é
Novamente há um grupo que não pode ser mais reduzido, mas o grupo
precisa ainda ser analisado. Aplicando novamente o
procedimento de refinamento considerando a nova partição
, o resultado para o refinamento do grupo
é
![]() |
![]() |
![]() |
|
a | ![]() |
![]() |
![]() |
b | ![]() |
![]() |
![]() |
Nesse grupo, e
permanecem com comportamento
equivalente, portanto fazem parte do mesmo grupo,
; porém,
faz parte de um novo grupo
. Assim, a partição
resultante é
Como
, o grupo
(o único que ainda pode ser
refinado) precisa ser analisado. A análise dos estados desse grupo
resulta em
![]() |
![]() |
|
a | ![]() |
![]() |
b | ![]() |
![]() |
Como não há novo particionamento, o procedimento de refinamento está
concluído. O resultado obtido é que o estado pode ser
incorporado ao estado
, resultando no autômato equivalente com
número mínimo de estados. Esse autômato é apresentado na
Figura 3.6.