Autómatos Finitos — Exercícios
Os exercícios assinalados com "✓" serão resolvidos nas aulas práticas; Os assinalados com "†" têm elevada dificuldade. Todos os restantes devem ser resolvidos pelos alunos.
- Autómatos Finitos — Exercícios
Autómatos Finitos Deterministas
Exercício 01
Para o AFD com a transição dada pela tabela
- Desenhe o diagrama de estados.
- Escreva as computações de para as palavras e referindo se são, ou não, aceites.
- Escreva uma expressão regular que represente a linguagem reconhecida por .
Exercício 02
AFD Exercício 02 |
---|
Seja o AFD dado pelo diagrama acima.
- Qual é o estado inicial, e quais são os estados finais?
- As palavras , e são aceites?
- Que palavras de estão em ?
Exercício 03
Seja um AFD.
- desenhe o diagrama de estados
- ✓ escreva uma expressão regular que represente a linguagem reconhecida por
- ✓ repita a alínea anterior para o AFD que apenas difere de no conjunto dos estados de aceitação, que no caso de é
Exercício 04
Construa um autómato finito determinista que reconheça a linguagem das palavras...
- sobre em que todos os 's precedem todos os 's que, por sua vez, precedem todos os 's (donde que todos os 's precedem todos os 's), podendo não haver nem 's, nem 's, nem 's.
- sobre que não têm como subpalavra.
- sobre em que cada é seguido imediatamente por .
- não vazias sobre em que o número de 's é divisível por .
Exercício 05
Construa um autómato finito determinista que reconheça a linguagem da ER .
Exercício 06
Calcule ER das linguagens reconhecidas pelos autómatos seguintes.
a) | b) | |
c) | d) | |
e) | ||
Exercício 07
Encontre um AFD que aceite a linguagem das palavras em ...
- com prefixo .
- com subpalavra .
- expansões binárias dos naturais congruentes zero módulo .
- com subpalavra e sufixo .
- com subpalavra e não têm sufixo .
- em que cada bloco de quatro letras consecutivas contém .
Exercício 08
Encontre um AFD que aceite a linguagem das palavras...
- com prefixo .
- com sufixo .
- com subpalavra ou .
- em que as últimas cinco letras têm três s.
- tais que é múltiplo de cinco.
- sobre o alfabeto onde a soma dos símbolos é múltiplo de cinco.
Computação Não Determinista
Exercício 09
Determine a linguagem (ER) dos AFND acima.
a) | b) | c) |
Exercício 10
Considere a linguagem de todos os números inteiros sem sinal, escritos em base , em que o último algarismo ocorre anteriormente no número. Por exemplo, e pertencem a esta linguagem, mas e não. (Os números escritos em base só podem ter os algarismos e .)
- escreva uma expressão regular que a represente.
- defina um autómato finito que a reconheça.
- apresente um autómato finito determinista que a reconheça (Sugestão: tente construí-lo diretamente, sem recorrer a qualquer algoritmo).
Exercício 11
Considere o autómato definido no diagrama acima.
- Calcule o e o .
- Calcule e .
- Desenhe as árvores das computações de e , indicando se são aceites ou rejeitadas.
Exercício 12
Seja um autómato finito não determinista cuja função de transição é
Construa um autómato finito determinista equivalente a , usando o algoritmo dado nas aulas, e apresente uma ER que represente a linguagem por ele reconhecida.
Exercício 13
✓ Repita o exercício anterior para o autómato finito não determinista cuja função de transição é
Exercício 14
✓ Considere a linguagem de todas as palavras sobre em que o antepenúltimo símbolo é .
- defina um autómato finito (não determinista) que reconheça esta linguagem.
- aplicando o algoritmo dado nas aulas, construa um autómato finito determinista equivalente ao autómato finito da alínea anterior.
Exercício 15
Repita o exercício anterior para a linguagem de todas as palavras sobre em que o terceiro e o antepenúltimo símbolos são . São exemplos de palavras que pertencem a esta linguagem as palavras , , e .
Exercício 16
Sejam e dois autómatos finitos tais que e são disjuntos. Defina um autómato finito tal que .
Exercício 17
Defina um AFD equivalente ao AFND
em que
Minimização e Composição de AFD
Exercício 18
✓ Aplicando o algoritmo dado nas aulas, construa o autómato finito determinista mínimo equivalente a , com a função de transição
e apresente uma expressão regular que represente .
Exercício 19
Considere o autómato finito não determinista , com a função de transição
- construa o AFD equivalente a .
- construa o AFD mínimo equivalente a .
Exercício 20
✓ Considere a linguagem representada por reunida com .
- defina um autómato finito (não determinista) que reconheça aquela linguagem.
- construa um AFD equivalente ao autómato finito definido na alínea anterior.
- construa um AFD mínimo equivalente ao AFD obtido na alínea anterior.
Exercício 21
Repita o exercício anterior para a linguagem das palavras sobre que têm como subpalavra.
Exercício 22
✓ Construa um AFND que aceita a linguagem das palavras
- binárias com, pelo menos, três ocorrências de ;
- binárias com subpalavras e ;
- binárias (com subpalavra ou ) e (com sufixo ou );
- binárias em que o -ésimo símbolo é , para ;
- binárias, de tamanho , e em que, para cada , algum dos , ou -ésimo símbolo é ;
- em que ;
Exercício 23
Encontre um AFND que aceite as palavras...
- com prefixo ou sufixo .
- com pelo menos, duas ocorrências de e sufixo .
- em que .
Exercício 24
- Sejam e dois AFND. Encontre um AFND tal que .
- Seja um AFND. Encontre um AFND tal que .
Exercício 25
Seja um AFND em que
Construa um AFND que aceite a linguagem complementar de .
Exercício 26
- Construa um AFD que aceite a linguagem binária das palavras em que o quinto símbolo a partir do fim é .
- Converta (simule) cada um dos AFND seguintes num AFD:
-
com transição
-
Dados nos diagramas abaixo:
-
26.2 A | 26.2 B | 26.2 C |
---|---|---|
Exercício 27
Construa um AFD que aceite a linguagem das palavras que:
- Contêm as sub-palavras e ;
- Com sufixo ou ou (de duas maneiras);
- Ou (contêm as sub-palavras e ) ou (não contêm nem nem );
- A quarta letra a partir do fim, e a quarta letra a partir do princípio são ambas (nota: e estão nesta linguagem);
O Pumping Lemma
Exercício 28
Mostre que as seguintes linguagens não são regulares:
- ✓ .
- A linguagem das palavras capicua sobre .
- .
- .
- .
- .
Implementação
As indicações gerais para os exercícios de implementação são válidas aqui.
Uma Biblioteca para AFD
A biblioteca para AFD tem de verificar as condições indicadas a seguir.
- Os estados são números inteiros, os símbolos de entrada são
string
e as palavras são listas de símbolos. - Represente. Um AFD é representado por uma estrutura de dados
FSA
(pode ser uma classe, umastruct
, etc) com os seguintes atributos, que devem ser visíveis mas não modificáveis:initialState
o estado inicial.finalStates
o conjunto dos estados finais.delta
uma lista de triplos(q, s, p)
que define a transição .
- Construção. Um AFD é construidos pela função/método
makeFSA(t,i,f)
em que:t
é uma lista de triplos(q, s, p)
como acima.i
é o estado inicial.f
é a lista dos estados finais.
- Sanidade. A função
wellFormed(fsa)
oufsa.wellFormed()
testa se os atributost,i,f
do argumento definem, de facto, um AFD. Quais são essas condições? - Implemente. A função
step(fsa, q, s)
oufsa.step(q, s)
devolve o estadop
quandofsa
está no estadoq
e lês
.Se não existe transição para
(q, s)
esta função devolve "não definido".Em python "não definido" é
None
, emjava/kotlin
énull
, em rust éOption::None
, outras linguagens podem ou não definir "não definido" :D - Implemente. A função
proc(fsa, q, w)
oufsa.proc(q, w)
devolve o estado em quefsa
termina se começar emq
e ler a palavraw
. Use o critério destep
se a computação não continuar até ao fim. - Implemente. A função
accepts(fsa, q, w)
oufsa.accepts(q, w)
, testa sew
é aceite porfsa
. Esta função deve devolver sempre um booleano. - Escrita. A função
repr(fsa)
oufsa.repr()
devolve umastring
com várias linhas:- A primeira linha tem o formato
i <Q>;
em que<Q>
é o estado inicial. - A segunda linha tem o formato
f <Q1> ... <Qn>;
em que os<Qi>
são os estados finais. - As restantes linhas têm o formato
<Q> <S> <P>;
para representar a transição dofsa
. Deve existir uma linha destas para cada "aresta" do autómato. - N.B. todas as linhas terminam em "
;
" e valores na mesma linha são separados por espaços.
- A primeira linha tem o formato
- † Leitura. A função
parseFSA(s)
tem como argumento umastring
no formato acima e devolve oFSA
correspondente. A leitura do argumento deve descartar carateres "espaço" (\n\r\t
) mas com cuidado. - † Escrita. Consulte a documentação da linguagem
dot
usada para definir grafos. Implemente uma funçãoreprDOT(fsa)
oufsa.reprDOT()
para gerar um grafo numastring
emdot
. - † Sanidade. As funções
repr
eparseFSA
devem ser "inversas" uma da outra, no sentido em queparseFSA(s).repr() == s
eparseFSA(fsa.repr()) == fsa
. Embora estas igualdades não sejam exatamente igualdades, nem fáceis de implementar, teste-as com alguns casos simples.