Escolar Documentos
Profissional Documentos
Cultura Documentos
1
2 Aula 3: Autômatos Finitos
¢10
¢5 ¢5 ¢5 ¢5 ¢5 ¢5 ¢5, ¢10,
start 30 25 20 15 10 5 0
¢25 ¢25 ¢25
¢25 ¢25
¢25
¢25
O estado “faltam 30 centavos” é chamado de estado inicial. O estado inicial deve ser
diferenciado no diagrama. Usaremos para esse propósito uma seta rotulada “start” (ver
Figura 3.1). O estado “faltam 0 centavos” é chamado de estado final, indicando que a
entrada fornecida para a máquina foi aceita, ou seja, que a sequência de moedas fornecida
compra um café. O estado final, ou estado de aceite, será indicado no diagrama por duas
circunferências (ver Figura 3.1).
A máquina de café aceita moedas de 5, 10 e 25 centavos. Seu alfabeto é, portanto,
Σ = {¢5, ¢10, ¢25}. As entradas para a máquina são strings do conjunto Σ∗ = {¢5, ¢10, ¢25}∗ .
As strings aceitas são aquelas que terminam no estado final.
Um autômato finito é uma máquina abstrata que pode ser usada para determinar se
strings fornecidas como entrada são aceitas. Cada sı́mbolo da string é processado em
sequência e o processamento determina as mudanças de estado que ocorrem na máquina.
Isso é feito percorrendo a aresta com rótulo igual ao do sı́mbolo processado.
A string ¢10¢10¢5¢5 é aceita pela máquina de café, pois o caminho induzido pela string
termina em um estado final. A Figura 3.1 mostra, em destaque, o caminho induzido pela
string ¢10¢10¢5¢5.
A string ¢10¢5¢5¢5 não é aceita pela máquina pois o caminho induzido pela string não
3.1. AUTÔMATOS FINITOS DETERMINÍSTICOS 3
¢10
¢5 ¢5 ¢5 ¢5 ¢5 ¢5 ¢5, ¢10,
start 30 25 20 15 10 5 0
¢25 ¢25 ¢25
¢25 ¢25
¢25
¢25
Figura 3.2: Caminho induzido pela string ¢10¢10¢5¢5 na máquina de estados da máquina
de vender café.
¢10
¢5 ¢5 ¢5 ¢5 ¢5 ¢5 ¢5, ¢10,
start 30 25 20 15 10 5 0
¢25 ¢25 ¢25
¢25 ¢25
¢25
¢25
Figura 3.3: Caminho induzido pela string ¢10¢5¢5¢5 na máquina de estados da máquina de
vender café.
Na sequência iremos formalizar as noções vistas nesta introdução. Com isso poderemos
estudar, em máquinas abstratas, capacidades e limitações de computação.
Σ é o alfabeto;
q0 ∈ Q é o estado inicial;
para cada nodo qi ∈ Q e sı́mbolo a ∈ Σ há exatamente uma aresta rotulada como a
partindo de qi .
Exemplo 3.1
Podemos descrever formalmente o autômato da máquina de café (Figura 3.1) como uma
5-tupla M = (Q, Σ, δ, q0 , F ), onde:
q0 = 30;
F = {0};
δ é a função de transição que pode ser resumida pela tabela abaixo. Dado um
estado qi (linha l) e um sı́mbolo a ∈ Σ (coluna c), a posição (l, c) da tabela contém
3.1. AUTÔMATOS FINITOS DETERMINÍSTICOS 5
Exemplo 3.2
O diagrama de estados do DFA M = ({p, q, r}, {0, 1}, δ, p, {r}), com função de transição
δ(p, 0) = q
δ(p, 1) = p
δ(q, 0) = q
δ(q, 1) = r
δ(r, 0) = r
δ(r, 1) = r
é dado abaixo.
1 0 0, 1
p 0 q 1
start r
Um autômato pode ser visto como um máquina que contém cinco componentes.
δ(p, 0) = q
δ(p, 1) = p
δ(q, 0) = q
δ(q, 1) = r
δ(r, 0) = r
δ(r, 1) = r
0 0 1 ...
p
0 0 1 ...
q
0 0 1 ...
q
3.1. AUTÔMATOS FINITOS DETERMINÍSTICOS 7
0 0 1 ...
r
A string 100, por sua vez, não é aceita pela máquina, pois o processo termina em um
estado que não é final.
1 0 0 ...
p
1 0 0 ...
p
1 0 0 ...
q
1 0 0 ...
q
Pelo que vimos no exemplo anterior, podemos definir strings que são aceitas por um DFA.
Definição 3.3. Seja M = (Q, Σ, δ, q0 , F ) um DFA. Uma string w ∈ Σ∗ é aceita se o
processamento de w por M termina em um estado final.
Uma DFA M aceita um conjunto de strings e esse conjunto define a linguagem de M .
Definição 3.4. Seja M = (Q, Σ, δ, q0 , F ) um DFA. A linguagem de M , denotada L(M ), é
o conjunto de strings em Σ∗ aceitas por M .
Exemplo 3.4
O DFA M = ({p, q}, {0, 1}, δ, p, {q}), com função de transição
δ 0 1
p p q
q p q
e diagrama de estados
8 Aula 3: Autômatos Finitos
0 1
1
start p q
0
ii) Passo recursivo: Se w é uma string de tamanho n > 1, então w = ua e δ̂(qi , ua) =
δ(δ̂(qi , u), a).
δ 0 1
p p q
q p q
Dada a string 1001, então a computação da string pode ser vista como
3.1. AUTÔMATOS FINITOS DETERMINÍSTICOS 9
Dada a string 0110, então a computação da string pode ser vista como
L(M ) = {w | w ∈ Σ∗ , δ̂(q0 , w) ∈ F }.
Definição 3.8. Uma linguagem é chamada de linguagem regular se ela é aceita por um
autômato finito determinı́stico.
Exemplo 3.6
Vamos construir o autômato que aceita L = {w | w ∈ {0, 1}∗ e contém a substring 11}.
Não existe um método para construir autômatos para uma linguagem. A tarefa é ba-
sicamente criativa. Uma dica é tentar simular o que ocorre para cada entrada e tomar
decisões sobre o que o autômato precisa “lembrar”. Para a linguagem L, o autômato
pode aceitar uma string se ele lembra que processou dois 1’s justapostos. Lembrar tal
fato significa criar um estado como o significado “foi lida a string 11”. Tal estado deve
ser um estado final. Mas antes de lembrar que leu 11, o autômato precisa saber que leu
o primeiro 1. Para isso basta um estado que signifique a lembrança “acabei de ler um 1
e se eu ler mais um 1 eu posso aceitar a string”. O estado inicial do autômato seria o
estado “ainda não li a substring 11”. Poderı́amos então definir tais estados:
start q0 q1 q2
Agora, para cada estado, precisamos saber qual transição realizar para cada um dos
sı́mbolos do alfabeto. Se estivermos no estado q0 e lermos um 0, nada ajuda no reco-
nhecimento de 11. Podemos simplesmente criar uma transição de q0 para ele mesmo e
continuar lendo a entrada. Se lermos um 1, no entanto, podemos mudar para o estado
q1 pois estamos no meio do caminho.
q0 1 q1 q2
start
3.2. OPERAÇÕES REGULARES 11
No estado q1 , ler um 0 significa que não há mais possibilidade de ler 11. Portanto
precisamos recomeçar, por exemplo, voltando ao estado inicial. Por outro lado, se lermos
um 1 significa que acabamos de ler a sequência 11 e podemos entrar o estado final q2 .
q0 1 q1 1 q2
start
Ainda não terminamos, em um DFA todo estado possui transições para todos os sı́mbolos
do alfabeto. Aqui basta criar transições de q2 para ele mesmo independentemente do
sı́mbolo do alfabeto. A string já foi aceita e tudo o que precisamo e lê-la até o final.
0 0, 1
q0 1 q1 1 q2
start
Formalmente, o DFA é descrito por M = ({q0 , q1 , q2 }, {0, 1}, δ, q0 , {q2 }), com função
de transição
δ 0 1
q0 q0 q1
q1 q0 q2
q2 q2 q2
União: L1 ∪ L2 = {w | w ∈ L1 ou w ∈ L2 }
Concatenação: L1 L2 = {vw | v ∈ L1 e w ∈ L2 }
A concatenação de uma linguagem L com ela mesma k vezes será denotada por Lk .
Note que k = 0 na definição da estrela de Kleene significa que λ pertence à estrela de
Kleene de qualquer linguagem. Alternativamente, poderı́amos pensar na definição da estrela
de Kleene, para uma linguagem L, como:
L0 = {λ}
e para k ≥ 1
Lk = Lk−1 L.
Exemplo 3.7
Sejam as linguagens L1 = {0, 01} e L2 = {1, 10}. Então
Essas operações podem ser usadas para produzir descrições não ambı́guas de linguagens.
Exemplo 3.8
A linguagem L = {w | w ∈ {0, 1}∗ e contém a substring 11}, vista anteriormente, pode
ser construı́da por operações regulares de linguagens mais simples. Vamos considerar as
linguagens L1 = {0} e L2 = {1}, que são regulares.
3. Aplicando a estrela de Kleene sobre a linguagem do passo dois obtemos {0, 1}∗ .
A linguagem L pode então ser descrita como L = {0, 1}∗ 11{0, 1}∗ e consiste justamente
em strings sobre {0, 1} que contêm a substring 11. Essa é uma forma simplificada de
descrever linguagens.
A primeira parte da definição, {0, 1}∗ , informa que uma string pertencente a L pode
conter inicialmente qualquer quantidade de 0’s e 1’s, inclusive pode ser a string vazia. A
segunda parte, 11, obriga que exista a substring 11. A terceira parte funciona exatamente
como a primeira.
Podemos pensar na definição L = {0, 1}∗ 11{0, 1}∗ como: “Uma string que pertence a L
tem necessariamente a substring 11 e esta pode ter como prefixo e/ou sufixo qualquer
quantidade de 0’s e 1’s.”
Exemplo 3.9
Seja L a linguagem sobre {a, b} que consiste em todas as strings que iniciam com aa ou
terminam com bb. Podemos descrevê-la como L = aa{a, b}∗ ∪ {a, b}∗ bb.
complicados a partir de DFA’s mais simples nem sempre é uma tarefa tão fácil quanto a das
linguagens.