Minimização e Composição de AFD
Operações com autómatos.
Introdução
Nas secções anteriores ficou provado que os AFD, AFND e as ER são equivalentes no sentido em que todos definem exatamente a classe das Linguagens Regulares.
Essa demonstração usa algoritmos para:
- Converter uma ER num AFND (Construção de Thompson).
- Converter um AFND numa ER (Algoritmo de Kleene).
- Simular um AFND por um AFD (Teorema da Simulação).
Comparando os AFD com os AFND:
Autómato | Número de Estados | Comprimento das Computações |
---|---|---|
Determinista | Ineficiente | Eficiente |
Não Determinista | Eficiente | Ineficiente |
Em termos de eficiência "absoluta" nenhum dos modelos (AFD e AFND) é superior. Mas enquanto não há nada a fazer em relação às computações não deterministas, em certos casos é possível reduzir o número de estados de um AFD.
Também interessa definir operações com autómatos que permitam acompanhar as operações das ER (união, concatenação, iteração) e também explorar outras possibilidades como a negação, a interseção e o processamento paralelo.
Minimização de AFD
Seja a linguagem das palavras binárias (sobre ) cujo quinto símbolo a contar do fim é . Esta linguagem é definida pela ER a que corresponde o diagrama e AFND seguinte:
AFND para |
---|
Exercício: A aplicação direta do teorema da simulação determinista a este AFND produz um autómato com estados de controlo.
A simulação de um AFND com estados de controlo pode produzir até estados no autómato determinista equivalente (exercício: porquê?).
Estados Indistintos
Dois AFD são equivalentes se aceitam a mesma linguagem. Por exemplo, para a linguagem :
Autómato | Autómato |
---|---|
No Autómato os estados e são indistintos no seguinte sentido: Qualquer palavra processada a partir do estado é aceite SSE também for aceite se processada a partir do estado .
Por exemplo, se e o autómato estiver no estado então é "aceite". Também é "aceite" se o autómato estiver no estado . Por outro lado é rejeitada quer o autómato esteja no estado quer no .
Portanto, tanto como definem sempre os mesmos resultados em termos de aceitação/rejeição de palavras. Formalmente:
Estados Indistintos. Sejam um AFD e dois estados. Então é indistinto de se, para cada palavra , Em particular, se e não são indistintos.
Agrupando estados indistintos obtém-se um novo AFD com o número mínimo de estados para aquela linguagem regular, isto é, um Autómato Mínimo. Antes da respetiva definição formal é conveniente descrever um algoritmo para particionar os estados indistintos.
O objetivo é particionar o conjunto de estados em grupos de forma que dois estados estão no mesmo grupos se e só se são indistintos.
Partição dos Estados Indistintos. Seja um AFD:
- Iniciar a partição .
- Enquanto existirem grupos com e tais que ( é inconsistente):
- Retirar da partição : .
- Acrescentar os estados de concordantes com em : .
- Acrescentar os estados de discordantes de em : .
Os passos deste ciclo refinam de forma a eliminar discordâncias de sobre . O resultado é que a partição troca o grupo inconsistente por dois grupos mais pequenos mas "menos" inconsistentes, isto é, onde os estados estão "mais próximos" de serem indistintos.
A partição final é formada apenas por grupos consistentes, isto é, em que todos os estados são indistintos (no limite esses grupos têm apenas um estado). Os grupos dessa partição são os estados do AFD mínimo equivalente ao AFD inicial.
Autómato Mínimo. Sejam um AFD e a partição dos estados indistintos.
Para cada grupo e cada em que é o grupo que contém com .
O AFD Mínimo (ou reduzido) equivalente a é em que:
- O estado inicial, , é o grupo de que contém o estado inicial de .
- Os estados finais, , são os grupos de que estão contidos em . Isto é
A construção do autómato mínimo a partir da definição está sujeita a erros, pelo que são ilustrados de seguida dois métodos com vista a sistematizar e facilitar esse processo.
Dado o AFD pela seguinte tabela:
Construção do Autómato Mínimo por Tabelas de Transição
Iniciar grupos, detetar e assinalar inconsistências:
Separar inconsistências, detetar e assinalar novas inconsistências:
Não existem mais inconsistências: Agrupar e escrever a tabela do AFD mínimo:
Construção do Autómato Mínimo por Diagramas
O diagrama do AFD dado é:
AFD dado, com a partição inicial. |
---|
e discordam em . |
Todos os grupos são consistentes. |
Diagrama do ADF Mínimo |
Foram descritos dois métodos para reduzir o número de estados de um AFD (minimizar). Ambos produzem o mesmo resultado: um autómato determinista com o menor número possível de estados e que seja equivalente a um AFD dado.
Embora isto não resolva completamente o potencial aumento exponencial do número de estados na passagem de AFND para AFD, produz um resultado ótimo, no sentido em que não existe melhor (isto é, por vezes o ótimo pode ainda ser "mau").
Composição
A representação é importante. Intuitivamente, a numeração romana é equivalente à árabe no sentido que representam os mesmos números. Considere o Problema A: "Multiplicar
DXXXIX
porXVII
" e o Problema B: "Multiplicar89
por17
". Embora os problemas A e B sejam o mesmo, é muito mais simples resolver B porque a representação árabe dos números "é compatível com" a multiplicação, ao contrário da representação romana.
As ER são construídas a partir da base () usando operações bem definidas (). Desta forma é possível decompor uma ER nas suas componentes, o que proporciona uma importante forma de análise com vista a explorar as suas propriedades.
Por outro lado, em geral, os autómatos "surgem" completamente definidos e é difícil relacionar um autómato com outro. Dado que as ER, os AFD e os AFND são "equivalentes", seria estranho que não fosse possível fazer também um estudo estruturado dos autómatos.
As operações com autómatos usam os Autómatos Bem Preparados pois estes têm uma forma adequada a serem "operados".
Começando pela concatenação, a ideia intuitiva para é "correr" primeiro e continuar em :
Concatenação de AFND. Sejam e dois AFND bem preparados sobre um alfabeto comum, , e com os estados de controlo disjuntos, .
Então, a concatenação de com é o AFND , definido por em que
A linguagem reconhecida por é a concatenação da linguagem reconhecida por com a linguagem reconhecida por :
Exercício: está bem preparado?
Por exemplo, se e (exercício: verifique que ambos são bem preparados e identifique as respetivas linguagens) então
Exercício: Traduza este exemplo para diagramas. Qual é a linguagem aceite por ?
A união de autómatos é semelhante à concatenação. Intuitivamente, o primeiro "passo" é decidir se "corre" ou . A computação da união termina a seguir a terminar a computação do autómato "escolhido" no início.
União de AFND. Sejam e dois AFND bem preparados sobre um alfabeto comum, , e com os estados de controlo disjuntos, .
Então, a união de com é o AFND , definido por em que
A linguagem reconhecida por é a união da linguagem reconhecida por com a linguagem reconhecida por :
Continuando com os autómatos do exemplo acima:
Exercício: Desenhe o diagrama do autómato acima.
Também a iteração segue o mesmo padrão:
Iteração de AFND. Sejam um AFND bem preparado.
Então, a iteração de é o AFND , definido por em que
A linguagem reconhecida por é o fecho da linguagem reconhecida por :
Exercício: Usando os exemplos acima, explicite as transições de e desenhe os respetivos diagramas.
A composição, união e iteração de AFND bem preparados são semelhantes em termos de requisitos e resultados. Para a negação e interseção é preciso sair desse padrão.
Intuitivamente, pensando em termos de autómatos deterministas, uma palavra é aceite se a computação termina num estado final e rejeitada se termina num estado não final. Portanto, basta trocar os estados finais com os não finais para se definir a linguagem complementar.
Quanto à interseção, uma vez definida a negação e a união, basta lembrar que para conjuntos, e a mesma igualdade é válida para as linguagens regulares. Mas este processo é pouco prático.
Começando pela negação, é importante destacar que se aplica a autómatos deterministas ao contrário do que foi feito para a concatenação, união e iteração.
Negação de AFD. Sejam um AFD.
Então, a negação de é o AFND , definido por .
A linguagem reconhecida por é o complementar da linguagem reconhecida por :
Um AFD e a sua negação |
---|
AFD para |
AFD para |
Paralelismo
É relativamente simples definir um autómato determinista que processa em paralelo outros dois (ou mais) autómatos também deterministas. Melhor, este método é suficientemente simples e geral para ter várias aplicações incluindo a união e interseção de AFD.
Em geral,
Autómato Paralelo. sejam e dois AFD sobre o mesmo alfabeto, .
Seja o AFD tal que:
- Estados de Controlo: , isto é: um estado de controlo de é um par ordenado com um estado de e um estado de .
- Transição: em que , isto é: a transição de um estado é feira componente a componente.
- Estado Inicial: , isto é: o estado inicial é o par de estados iniciais.
- Estados Finais: .
O conjunto dos estados finais fica como parâmetro porque proporciona uma grande flexibilidade aos autómatos paralelos. Por exemplo:
- União: Sejam dois AFD com estados finais respetivamente. Fazendo tem-se . Note-se que uma palavra é aceite por se e só se é aceite por ou se é aceite por .
- Interseção: Nas condições acima, seja . Então . Note-se que uma palavra é aceite por se e só se é aceite por e por .
Conclusão
Esta secção aprofundou o estudo dos AFD e AFND. Especificamente:
- Mostram-se dois métodos para minimizar um dado AFD, de modo a obter-se um AFD equivalente com o menor número possível de estados.
- Definiram-se as operações de concatenação, união e iteração de AFND, replicando as operações das ER.
- Definiu-se a negação e composição paralela de AFD. Com o processamento paralelo de AFD ficou trivial definir as operações de união e a interseção de AFD.
O Problema Principal de ALP — Dada uma linguagem e uma palavra no mesmo alfabeto, determinar se — continua em aberto. As expressões regulares e os autómatos finitos (deterministas e não deterministas) verificam duas das três condições fundamentais:
- São computáveis (existe um algoritmo que recebe uma palavra e num número finito de passos "responde" se essa palavra está ou não na linguagem pretendida) e eficientes (um AFD processa uma palavra com símbolos em exatamente passos).
- Além disso é (relativamente) simples encontrar ER, AFND, AFD equivalentes.
Resta verificar se as linguagens regulares são adequadas para definir as linguagens de programação.