Você está na página 1de 5

Autômatos Finitos Determinísticos

Definição
Um Autômato Finito Determinístico (AFD) é uma quíntupla ordenada, A = (Q, Σ, δ, q0, F)
onde:
• Q é um conjunto finito, não vazio, de estados ,

• Σ é um conjunto finito (alfabeto) de símbolos de entrada,


• δ: Q X Σ → Q é a função (parcial) de transição ou de mudança de estado,
• q0 ∈ Q é o estado inicial,

• F ⊆ Q é o conjunto dos estados finais ou de aceitação.

Exemplo 1:
sobre o alfabeto Σ = {0, 1} consideremos a linguagem L = {w∈ Σ* | a seqüência 01 é parte de w}.
pretendemos construir um Autômato reconhecedor das palavras de L
uma palavra w ∈ Σ* pertence a L, se e somente se, partindo do estado inicial o Autômato
atingir o estado final (de aceitação ou reconhecimento) pela entrada de w.

a linguagem de um AFD é o conjunto de todas as palavras reconhecidas por ele.

temos então: A = ({q0, q1, q2}, {0, 1}, δ, q0, {q1})

Diagrama de transições

Tabela de transições
0 1
→ q0 q2 q0
* q1 q1 q1
q2 q2 q1
Exemplo 2:
também sobre o alfabeto Σ = {0, 1} consideremos a linguagem L = {w ∈ Σ* | a seqüência
001 é parte de w} tem como autômato reconhecedor:

Obs: a linguagem de um AFD aparece no seu diagrama de transições, como o


conjunto da seqüências de símbolos correspondentes a todos os caminhos possíveis
no grafo, desde o estado inicial até um dos estados finais.

Ampliando o conceito de função de transição para descrever a aceitação de seqüências de


símbolos, temos:

Definição: δˆ : Q X Σ* → Q
caso base: δˆ (q, ε) = q
passo indutivo: ∀w = xa, δˆ (q, w) = δ( δˆ (q, x),a)

δˆ representa os caminhos efetivos ao longo do grafo, isto é, se w = a1a2...an e se

δ(pi, ai) = pi+1 para todo i = 0, 1, ..., n-1, então δˆ ( p0, w) = pn.

Definição um AFD, A = (Q, Σ, δ, q0, F) reconhece (ou aceita) a palavra w ∈ Σ*,


se e somente se δˆ ( q0, w) ∈ F.

Definição linguagem de um AFD, A = (Q, Σ, δ, q0, F): L(A) = {w ∈ Σ* | δˆ ( q0, w) ∈ F}

Exemplo 3: construção de um reconhecedor para uma linguagem, sobre o alfabeto Σ = {0, 1},
definida como L = {w | w tem um número par de 0´s e 1´s}
Construção do AFD:
basicamente trata-se de, ao longo de uma dada palavra, contar os 0´s e 1´s, e verificar
se contamos um número par . Há quatro casos a considerar:
− Os 0´s e 1´s já contados, são em número par;
− Já foram contados um número par de 0´s e um número ímpar de 1´s;
− Já foram contados um número par de 1´s e um número ímpar de 0´s;
− Os 0´s e os 1´s já contados, são em número ímpar.
Diagrama de transições:

Tabela de transições:
0 1

*→ q0 q2 q1
q1 q3 q0
q2 q0 q3
q3 q1 q2

Verificação indutiva para w = 110101


− δˆ (q0, ε) = q0
− δˆ (q0, 1) = δ( δˆ (q0, ε), 1) = δ(q0, 1) = q1
− δˆ (q0, 11) = δ( δˆ (q0, 1), 1) = δ(q1, 1) = q0
− δˆ (q0, 110) = δ( δˆ (q0, 11), 0) = δ(q0, 0) = q2
− δˆ (q0, 1101) = δ( δˆ (q0, 110), 1) = δ(q2, 1) = q3
− δˆ (q0, 11010) = δ( δˆ (q0, 1101), 0) = δ(q3, 0) = q1
− δˆ (q0, 110101) = δ( δˆ (q0, 11010), 1) = δ(q1, 1) = q0
portanto w = 110101 ∈ L.

Uma aplicação:
De modo informal consideremos,
Σ = {a, b, c, ... ,z} ∪ {0, 1, 2, ..., 9} e L = { w ∈ Σ* | w representa um identificador},
Seguindo a regra habitual de construção de identificadores nas linguagens de
Programação, temos o AFD reconhecedor de identificadores:

Note que o autômato não possui a capacidade de verificar o comprimento máximo do


identificador.
Exemplo 4: um reconhecedor da linguagem L, sobre o alfabeto Σ = {0, 1}:
L = { w ∈ Σ* | w é a representação binária de um múltiplo de 5}
Construção do AFD:
Em cada momento do reconhecimento, é necessário conhecer o valor do resto da divisão por 5,
do número decimal correspondente á cadeia binária já lida.
Obs:
− sendo w a representação binária do número n (decimal), então a cadeia w0 representa
2 X n e a cadeia w1 representa 2 X (n+1);
− (a X b + c) mod 5 = (a X (b mod 5) + c) mod 5
exemplos:
1011 → 11 (base decimal) e 11 mod 5 = 1 mod 5
10110 → 2 X 11 = 22 (base decimal)
2 X 11 mod 5 = (2 X (1 mod 5)) mod 5 = 2 mod 5
10111 → 2 X 11 + 1 = 23 (base decimal)
(2 X 11 + 1) mod 5 = (2 X (1 mod 5) + 1) mod 5 = 3 mod 5
quantos casos precisamos considerar ?

O AFD reconhecedor:
A = ({q0, q1, q2, q3, q4}, {0, 1}, δ, q0, {q0})

Diagrama de transições:

O estado qk significa que a cadeia binária já percorrida representa um número decimal cuja
divisão por 5 tem resto igual a k.
Note que o AFD aceita números binários que começam com zeros e, até aceita a cadeia vazia.
Tabela de transições:
0 1
* → q0 q0 q1
q1 q2 q3
q2 q4 q0
q3 q1 q2
q4 q3 q4
Exemplo 5: um reconhecedor da linguagem L, sobre o alfabeto Σ = {0, 1}:
L = {w ∈ Σ+ | w começa por 1 e é a representação binária de um múltiplo de 5}

Basta uma pequena modificação no autômato anterior:


Se a palavra começa por 0, não pertence à linguagem de deve ser conduzida para um
“estado de erro”, digamos o estado r – de onde não saem.
A inclusão de um estado de partida, o estado p, permite essa verificação, e também
rejeitar a palavra vazia, bem como a passagem ao autômato anterior.

AFD reconhecedor: A = ({p, q0, q1, q2, q3, q4, r}, {0, 1}, δ, p, {q0})

Diagrama de transições:

Tabela de transições:
0 1
→ p r q1
* q0 q0 q1
q1 q2 q3
q2 q4 q0
q3 q1 q2
q4 q3 q4
r r r

Exercícios
1) Projete um AFD que reconheça cadeias binárias terminadas em 01.
2) Considere a tabela de transição para um AFD, abaixo:
0 1 a) descreva a linguagem do autômato
→ A A B b) Demonstre, por indução, que o autômato
* B B A reconhece essa linguagem.

Você também pode gostar