Vous êtes sur la page 1sur 19

1

Teoria da Computao
ltima atualizao: 2/2/2009

1 Autmatos: Introduo e Conceitos Bsicos


A teoria de autmatos o estudo de computadores abstratos, tambm chamados de mquinas. Em 1930, antes de existirem computadores, A. Turing desenvolveu uma mquina abstrata que tinha todas as caractersticas dos computadores atuais, ao menos no que se refere ao quanto eles poderiam calcular. O objetivo de Turing era descrever com exatido o que uma mquina de computao seria e o que ela no seria capaz de fazer. As concluses de Turing se aplicam no apenas a sua mquina, mas tambm as mquinas reais de hoje. Na dcada de 1940 e 1950, tipos de mquinas simples, que hoje so chamados de autmatos finitos, foram estudados por diversos pesquisadores. No final dos anos 50, o lingista N. Chomsky iniciou o estudo de gramticas formais. Essas gramticas tm um relacionamento estreito com os autmatos abstratos e hoje servem como base de importantes componentes de software, incluindo parte dos compiladores. Em 1969, S. Cook estendeu o estudo de Turing do que podia e no podia ser calculado. Ele conseguiu separar os problemas que podem ser resolvidos de forma eficiente por computadores daqueles que poderiam em princpio ser resolvidos, mas que na prtica levam tanto tempo para serem solucionados que os computadores so inteis para solucion-los. Tais problemas so chamados intratveis ou NP-difceis (NPHard). Mesmo com a melhoria exponencial na velocidade dos computadores (Lei de Moore) muito pouco provvel que haja impacto significativo na habilidade de resolver grandes instncias de problemas intratveis. Todos esses desenvolvimentos tericos tm ligao direta com o que os cientistas da computao fazem hoje. Por exemplo: a teoria dos problemas intratveis nos permite deduzir se ao encontrar um problema temos chance de conseguir construir um programa para resolv-lo (porque ele no intratvel) ou se teremos de descobrir algum modo de contornar o problema intratvel.

1.1 Linguagem
Linguagem um conceito fundamental no estudo de Teoria da Computao, pois trata da forma precisa de expressar problemas, permitindo um desenvolvimento formal adequado ao estudo da computabilidade. A seguir so mostradas algumas definies:

1.1.1 Alfabeto
Um alfabeto um conjunto finito de smbolos ou caracteres. Um conjunto infinito no um alfabeto O conjunto vazio um alfabeto

Exemplos de alfabetos: {a, b, c} (conjunto vazio) No so alfabetos: Conjunto dos nmeros naturais, inteiros, etc... {a, b, aa, ab, ba, bb, aaa, ... }

1.1.2 Cadeia de smbolos, Palavra (String)


Uma Cadeia de Smbolos sobre um conjunto uma seqncia de zero ou mais smbolos (do conjunto) justapostos. Uma Palavra uma cadeia de smbolos finita. Uma cadeia sem smbolos uma palavra vlida e o smbolo: * + Exemplo: a) abcb uma palavra do alfabeto {a, b, c} b) Se = {a, b} ento: + = {a, b, aa, ab, ba, bb, aaa, ... } * = {, a, b, aa, ab, ba, bb, aaa, ... } denota uma cadeia vazia ou palavra vazia denota o conjunto de todas as palavras possveis sobre denota * - {} Se representa um alfabeto ento

1.1.3 Comprimento ou Tamanho de uma Palavra


O Comprimento ou Tamanho de uma palavra w, representado por |w|, o nmero de smbolos que compe a palavra.

3 Exemplos: |abcb| = 4 e || = 0

1.1.4 Prefixo, Sufixo, Subpalavra


Um Prefixo de uma palavra qualquer seqncia inicial de smbolos da palavra. Um Sufixo de uma palavra qualquer seqncia final de smbolos da palavra. Uma Subpalavra de uma palavra qualquer seqncia que compe a palavra. Exemplo: Seja a palavra abcb , a, ab, abc, abcb so os prefixos; , b, cb, bcb, abcb so os sufixos;

1.1.5 Linguagem Formal


Uma Linguagem Formal ou simplesmente Linguagem um conjunto de palavras sobre um alfabeto. Exemplo: Suponha o alfabeto = {a, b} ento: a) O conjunto vazio e o conjunto formado pela palavra vazia so linguagens sobre . Lembrando que { } b) O conjunto de palndromos (palavras que tem a mesma leitura da esquerda para a direita e vice-versa) sobre um conjunto de linguagem infinita. Assim: , a, b, aa, bb, aaa, aba, bab, bbb, aaaa, ... so palavras desta linguagem. comum definir linguagens usando um formador de conjuntos: { w | algo sobre w } Essa expresso lida como o conjunto de palavras w tais que (seja o que for dito sobre w direita da barra vertical). Alguns exemplos: {w | w consiste em um nmero igual de 0s e 1s} {w | w um nmero inteiro binrio primo} {w | w um programa em C sintaticamente correto}

Tambm comum substituir w por alguma expresso com parmetros e descrever os strings na linguagem declarando condies sobre os parmetros. Exemplos: {0n1n | n 1}. L-se o conjunto de 0 elevado a n 1 elevado a n tal que n maior ou igual a 1; essa linguagem consiste nos strings {01, 0011, 000111, ...}. Note que, como ocorre com os alfabetos, podemos elevar

4 um nico smbolo a uma potncia n para representar n cpias desse smbolo. {0i1j | 0 i j}. Essa linguagem consiste em strings com alguns 0s (possivelmente nenhum) seguidos por um nmero igual ou superior de 1s.

1.1.6 Concatenao de Palavras


A concatenao de palavras uma operao binria, definida sobre uma linguagem, a qual associa a cada par de palavras uma palavra formada pela justaposio da primeira com a segunda. Suponha v,w,t como palavras: v(wt) = (vw)t w = w = w - associatividade - elemento neutro a esquerda ou direita

Exemplos: Suponha o alfabeto = {a, b} e as palavras v = baa e w = bb, tem-se que: vw = baabb v = v = baa Uma concatenao definida sobre uma linguagem L no necessariamente fechada sobre L, ou seja, a concatenao de duas palavras de L no necessariamente uma palavra de L. Exemplo: Suponha a linguagem L de palndromos sobre = {a, b}. A concatenao das palavras aba e bbb resultam na palavra ababbb a qual no palndromo. Portanto a operao de concatenao no fechada sobre L.

1.1.7 Concatenao Sucessiva de Palavras


A concatenao sucessiva de uma Palavra (com ela mesma) representada na forma de um expoente: wn onde n o nmero de concatenaes sucessivas Exemplos: wn = w1 = w w3 = www w5 = wwwww

2 Autmatos Finitos
Os autmatos finitos constituem um modelo til para muitos elementos importantes de hardware e software. Alguns exemplos: Software para projetar e verificar comportamento de circuitos digitais Analisador Lxico de um compilador tpico (isto , componente que divide o texto de entrada em unidades lgicas, como identificadores, palavraschave, etc.) Software para examinar grandes corpos de texto, como pginas Web Software para verificar sistemas de todos os tipos que tem um nmero finito de estados distintos, como protocolos de comunicao ou segurana Estes elementos tm como caractersticas estarem a todo o momento em um determinado estado de um conjunto finito deles. Como o conjunto finito a histria toda de execuo no pode ser memorizada, assim o sistema deve ser projetado a fim de memorizar apenas o que relevante. A vantagem de usar um nmero finito de estados que possvel implement-lo de uma forma simples em hardware como um circuito, ou em um software que possa tomar decises examinando apenas um nmero limitado de dados ou a prpria posio no cdigo. Exemplo de autmato finito: um interruptor que memoriza se est no estado ligado ou desligado, e permite que o usurio pressione um nico boto cujo efeito ser diferente de acordo com o estado em que o interruptor se encontra, ou seja, se ele estiver desligado e for pressionado ele ir ligar, e vice-versa.

pressionar Incio desligado ligado

pressionar

Os estados esto representados por crculos, e a ao (ou entrada) est representada pelos arcos. Neste caso temos os estados ligado e desligado, e ambos os arcos representam a ao de pressionar o boto. O estado inicial indicado pela palavra incio e por uma seta que leva a este estado. Frequentemente tambm precisamos

6 indicar um ou mais estados finais ou de aceitao, que representam que a entrada vlida, neste caso utilizamos crculos duplos para representar tais estados. Outro exemplo: um autmato que reconhece a palavra chave case, ele tem cinco estados que representam desde a string vazia at a palavra completa, passando por todos os seus prefixos.
inicio

c c

a ca

s cas

e case

O nico estado de aceitao aquele em que a palavra aparece completa. Podemos imaginar este autmato como parte de um analisador lxico, que estar analisando um a um os caracteres do programa. Na teoria dos autmatos, um problema a questo de verificar se uma dada string (palavra) elemento de uma linguagem especfica. Assim se um alfabeto e L uma linguagem sobre , ento dado um string w em *, definir se w est ou no em L.

2.1 Autmatos Finitos Determinsticos


Um autmato finito determinstico (AFD, ou DFA em ingls) um autmato que se encontra sempre em um nico estado aps ler uma seqncia qualquer de entrada. O termo determinstico implica que existe um e somente um estado ao qual o autmato pode transitar a partir de seu estado atual. Em contraste, autmatos finitos nodeterminsticos podem estar em vrios estados ao mesmo tempo.

2.1.1 Definio Formal


Um autmato finito determinstico consiste em: a) b) Um conjunto finito de estados, frequentemente denotado por Q. Um conjunto finito de smbolos de entrada, frequentemente denotado por c) Uma funo de transio que toma como argumentos um estado e um smbolo de entrada e retorna um estado. A funo de transio ser comumente denotada por . No grafo representada pelos arcos e rtulos entre os estados. Se q um estado, e a um smbolo de entrada, ento (q,a) o estado p tal que existe um arco identificado por a de q at p. d) Um estado inicial, que um dos estados em Q

7 e) Um conjunto de estados finais ou de aceitao F. O conjunto F um subconjunto de Q. Frequentemente um AFD denotado como uma tupla de cinco elementos, como se segue: A = (Q,,,q0,F) Onde A o nome do AFD, Q seu conjunto de estados, seu conjunto de smbolos de entrada, sua funo de transio, q0 seu estado inicial e F seu conjunto de estados de aceitao.

2.1.2 AFD processando strings


A linguagem de um AFD o conjunto de todos os strings que ele aceita. Suponha que a1, a2, a3, ... an seja uma seqncia de smbolos de entrada. Comeamos com o AFD em seu estado inicial q0 e procuramos por uma funo de transio, algo como (q0, a1) = q1, para saber em qual estado o AFD se encontrar aps processar a1. Em seguida processaremos a2, avaliando (q1, a2) e assim sucessivamente. Se a funo procurada no for encontrada um sinal de que a string de entrada no faz parte da linguagem definida pelo autmato e deve ser rejeitada. Exemplo: Especificar formalmente um DFA que aceita todos e somente os strings de 0s e 1s que tm a seqncia 01 em algum lugar na string. Podemos escrever essa linguagem como: {x01y | x e y so quaisquer strings de 0s e 1s } Alguns exemplos de strings presentes na linguagem so 01, 1010, 01010 e 100010. Exemplos de strings que no esto na linguagem so: 0, 111000 e . Sabemos ento que o alfabeto de entrada = {0,1}, que existe um conjunto de estados Q, e que h um estado inicial que chamaremos de q0. Para decidir se 01 uma substring de entrada, o autmato precisa se lembrar: 1. Ele j viu 01? Nesse caso ele aceita toda seqncia de entrada adicional; ou seja, ele estar sempre em estado de aceitao de agora em diante 2. Ele nunca viu 01, mas sua entrada mais recente foi 0; assim se agora ele vir o 1, ter visto 01 e poder aceitar tudo que vir por diante 3. Ele nunca viu 01, mas sua entrada mais recente foi 1 ou no existente (ele apenas iniciou). Nesse caso, ele no pode aceitar at ver um 0 seguido de 1.

8 Cada uma dessas condies pode ser representada por um estado. A condio 3 representada pelo estado inicial q0, pois quando iniciamos ainda esperamos por 01. Se estivermos em q0 e recebermos um 1, ento devemos permanecer no estado q0. Isto (q0, 1) = q0. Entretanto, se estamos em q0 e vemos um 0, estaremos na condio 2, isto , no vimos 01, mas temos um 0. Assim vamos usar q2 para representar esta condio. A transio , portanto (q0, 0) = q2. Agora, estando em q2, podemos ver um 0, neste caso estaremos na mesma situao que antes, ou seja, continuamos com um 0 e esperando um 1. Portanto devemos ficar no mesmo estado (q2, 0) = q2. Porm se estamos em q2 e vemos uma entrada 1, sabemos agora que existe um 0 seguido de 1. Podemos ento passar para um estado de aceitao que chamaremos de q1 e que corresponde a condio 1. Assim: (q2, 1) = q1. Finalmente, estando no estado q1 qualquer que seja a entrada, ainda estaremos na condio 1, em que j vimos um 01. Assim permaneceremos neste estado, (q1, 1) = (q1, 0) = q1. Portanto, Q = {q0, q1, q2}, q0 o estado inicial como dito anteriormente e q1 o nico estado de aceitao portanto F = {q1}. Assim a especificao completa do autmato pode ser dada por: A = ({q0, q1, q2},{0,1}, , q0,{q1}) onde a funo de transio descrita anteriormente.

2.1.3 Diagrama de Transies


Especificar um AFD atravs da tupla de cinco e das funes de transio algo tedioso e que fica difcil de ler, existem outros tipos de notaes que so preferenciais, dentre elas podemos destacar o diagrama de transies, que um grafo como os vistos anteriormente. Um diagrama de transies para um AFD A = (Q,,,q0,F) um grafo definido da seguinte forma: 1. Para cada estado em Q existe um n correspondente. 2. Para cada estado q em Q e para cada smbolo de entrada a em , seja (q,a) = p. Ento, o diagrama de transies tem um arco do n q para o n p, rotulado por a. Se existem vrios smbolos de entrada que causam transies de q para p, ento o diagrama de transies pode ter um arco rotulado pela lista desses smbolos.

9 3. Existe uma seta no estado inicial q0, identificada como nicio. Essa seta no se origina em nenhum n. 4. Os ns correspondentes aos estados de aceitao (aqueles em F) so marcados por um crculo duplo. Todos os outros estados tem um nico crculo. Exemplo: abaixo vemos o diagrama de transies para o AFD que projetamos na seo anterior, e que aceita todos os strings que contem o substring 01:
1
Incio

0 0

0,1 1

q0

q2

q1

2.1.4 Tabela de Transies


Outra maneira mais simples de especificar um AFD a tabela de transies que uma representao convencional e tabular de uma funo como que recebe dois argumentos e retorna um valor. As linhas da tabela correspondem aos estados, e as colunas correspondem as entradas. O conjunto de estados e o alfabeto de entrada so especificados implicitamente. O estado de entrada indicado com uma seta, e os estados de aceitao so marcados com asterisco. Exemplo: abaixo vemos a tabela de transio para o nosso mesmo exemplo anterior que aceita todos os strings que contem o substring 01: 0 1 q0 q2 q0 *q1 q1 q1 q2 q2 q1

2.1.5 Funo de Transio Estendida


Funo de Transio Estendida uma funo que toma um estado q e um string w e retorna um estado p o estado que o autmato alcana quando comea no estado q e processa a seqncia de entradas w. A funo de transio estendida normalmente denotada por , * ou ainda com acento circunflexo. Exemplos: funes de transio estendida para cada prefixo da string 11010 com o autmato do nosso exemplo que aceita strings que contem 01 como substring:

10 (q0,11010) = ((q0,1),1010) = (q0,1010) = ((q0,1),010) = (q0,010) = ((q0,0),10) = (q2,10) = ((q2,1),0) = (q1,0) = q1

2.1.6 Linguagem de um AFD


A linguagem de um AFD A = (Q,,,q0,F), denotada por L(A) definida por: L(A) = {w | (q0,w) est em F} ou seja, dado um string w, se construirmos sua funo de transio estendida e chegarmos a um estado que est em F (o conjunto de estados finais), ento w est em A ( aceito pelo autmato A). Se L L(A) para algum AFD A, dizemos que L uma linguagem regular.

2.2 Autmatos Finitos No-Determinsticos


Um autmato finito no-determinstico (AFND, ou NFA do ingls) tem o poder de estar em vrios estados ao mesmo tempo. Essa habilidade expressa com freqncia como a capacidade de adivinhar algo sobre sua entrada. Por exemplo, quando o autmato usado para procurar certas seqncias de caracteres (como por exemplo, palavras-chave) em um longo string de texto, til adivinhar que estamos no incio e um desses strings e usar uma seqncia de estados apenas para verificar se o string aparece, caractere por caractere. Os AFND aceitam exatamente as linguagens regulares, da mesma maneira que fazem os AFDs. Desta forma sempre possvel converter um AFND em um AFD, porm o AFD gerado pode ter exponencialmente mais estados que o AFND. Muitas vezes os AFNDs so mais sucintos e mais fceis de projetar que um AFD. A diferena entre um AFD e um AFND est na funo de transio . Para um AFND esta funo recebe um estado e um smbolo de entrada como argumentos (da mesma forma que um AFD), porm retorna um conjunto de zero, um ou mais estados (em vez de retornar exatamente um estado como um AFD deve fazer). Exemplo: abaixo temos um autmato que aceita todos os strings de 0s e 1s que terminam em 01 e somente eles. O estado q0 o estado inicial, e podemos pensar que o autmato est nele at que adivinhe que o 01 final comeou, sempre possvel que o

11 prximo smbolo no inicie o 01 final, mesmo que esse smbolo seja 0. Desse modo, o estado q0 pode fazer uma transio para ele mesmo em 0 e em 1. Porm, se o prximo smbolo 0, esse AFND tambm adivinha que o 01 final comeou. Um arco identificado por 0 leva portanto de q0 a q1. Note que existem dois arcos rotulados como 0 saindo de q0. O AFND tem a opo de ir para q0 ou q1 e, de fato, ele segue os dois caminhos. No estado q1 o AFND verifica se o prximo smbolo 1 e, nesse caso, vai para o estado q2 e aceita a entrada.
0,1
Incio

q0

q1

q2

Observe que no existe nenhum arco saindo de q1 rotulado com 0, e no existe nenhum arco saindo de q2. Nessas situaes, o encadeamento no AFND correspondente a esses a estes estados simplesmente morre, embora outros encadeamentos possam continuar a existir.

2.2.1 Definio Formal


Um AFND consiste em: a) b) Um conjunto finito de estados, frequentemente denotado por Q. Um conjunto finito de smbolos de entrada, frequentemente denotado por c) Uma funo de transio que toma como argumentos um estado e um smbolo de entrada e retorna um subconjunto de Q. A diferena para os AFD est no tipo de valor que retorna: um conjunto de estados para os AFND e um nico estado para os AFD. d) e) Um estado inicial, q0 que um dos estados em Q Um conjunto de estados finais ou de aceitao F, sendo que o conjunto F um subconjunto de Q. A tupla de 5 elementos A = (Q,,,q0,F) utilizada nos AFD tambm utilizada para definir os AFNDs, assim o nosso exemplo pode ser definido por: ({q0,q1,q2},{0,1},,q0,{q2}) onde a funo de transio dada pela tabela de transies abaixo: 0 1

q0 {q0,q1} {q0}

12 q1 *q2 {q2}

Note que as tabelas de transies utilizadas nos AFD tambm servem para os AFND, sendo que a nica diferena que as respostas so dadas por conjunto de estados, em vez de um estado unitrio, assim necessrio o uso de chaves mesmo que haja um nico elemento. Quando no existe nenhuma transio de um estado dada uma entrada a resposta conjunto (vazio).

2.2.2 Funo de Transio Estendida


Suponha a string de entrada 00101 para o autmato do nosso exemplo, teremos a seguinte funo de transio estendida: (q0,00101) = ((q0,0),0101) = ({q0,q1},0101) = ((q0,0) U (q1,0),101) = ({q0,q1} U ,101) ({q0,q1},101) = ((q0,1) U (q1,1),01) = ({q0} U {q2},101) ({q0,q2},01) = ((q0,0) U (q2,0),1) = ({q0,q1} U ,01) ({q0,q1},1) = (q0,1) U (q1,1) = {q0} U {q2} = {q0,q2}

2.2.3 Linguagem de um AFND


Um AFND aceita um determinado string w se possvel chegar a um estado de aceitao por pelo menos um dos caminhos possveis. O fato de um dado caminho no chegar a um estado de aceitao ou morrer no impede que um AFND seja aceito como um todo. Formalmente, se A = (Q,,,q0,F) um AFND ento L(A) = {w | (q0,w) F } ou seja, L(A) o conjunto de strings w que submetidas a funo de transio estendida retornaro um conjunto que contenha pelo menos um estado de aceitao.

2.2.4 Equivalncia entre autmatos finitos determinsticos e no determinsticos


Para muitas linguagens mais fcil construir um AFND do que um AFD, entretanto sempre possvel construir um AFD que aceite a mesma linguagem de um AFND. Na prtica um AFD tem quase tantos estados quantos tem o AFND correspondente, embora com freqncia tenha mais transies. Porm, no pior caso, o menor AFD pode ter 2 n estados para um AFND para a mesma linguagem que tenha n estados.

13 Podemos construir um AFD a partir de um AFND apenas construindo todos os subconjuntos de estados possveis do AFND, sem conhecer os detalhes especficos deste ltimo. A construo de subconjuntos comea a partir de um AFND N = (QN,,N,q0,FN). O objetivo descrever um AFD D = (QD,,D,q0,FD), tal que L(D) = L(N). Note que os alfabetos de entrada dos dois autmatos so os mesmos, e o estado inicial de D o mesmo de N. Os outros componentes so construdos da seguinte forma: QD o conjunto de subconjuntos de QN; isto , QD o conjunto potncia de QN. Note que, se QN tem n estados, ento QD ter 2n estados. Com freqncia, nem todos esses estados esto acessveis a partir do estado inicial de QD. Os estados inacessveis podem ser descartados; assim, o nmero de estados de D pode ser efetivamente muito menor que 2n. FD o conjunto de subconjuntos S de QN tais que S FN . Isto , FD representa todos os conjuntos de estados de N que incluem pelo menos um estado de aceitao N. Para cada conjunto S QN e para cada smbolo de entrada a em ,

D S , a

N p em s

p, a

Isto , para calcular D S , a , examinamos todos os estados p em S, vemos para quais estados N vai a partir de p sobre a entrada a e fazemos a unio de todos esses estados. Exemplo: seja N o autmato do nosso exemplo de autmato que aceita strings terminadas em 01. O conjunto de estados de N {q0, q1, q2}, a construo de subconjuntos produz um AFD com 23 = 8 estados, correspondendo a todos os subconjuntos deste trs estados. A seguir vemos a tabela de transio para estes 8 estados: 0 {q1} *{q2} {q0} {q0, q1} 1 {q0} {q2} {q0}

{q0, q1} {q0, q1} {q0, q2} *{q0, q2} {q0, q1}

14 *{q1, q2} {q2}

*{ q0, q1, q2} {q0, q1} {q0, q2} Esta tabela de transies equivale a um autmato finito determinstico, pois embora as entradas na tabela sejam conjuntos, os estados do AFD gerado tambm so conjuntos. Para tornar este ponto mais claro podemos criar novos nomes para esses estados; por exemplo, A para , B para {q0} e assim por diante. 0 1

A A A B E B C A D *D A A E E F *F E B *G A D *H E F Dos oito estados, comeando no estado inicial B, s podemos acessar os estados B, E e F. Os outros cinco estados so inacessveis a partir do estado inicial e no precisam constar da tabela. possvel evitar esta etapa de tempo exponencial na construo de entradas da tabela atravs de uma avaliao de subconjuntos ociosos. Uma maneira de fazer isso partindo do subconjunto do estado inicial {q0} que sabemos que faz parte do AFD, descobrimos que D({q0},0) = {q0,q1} e D({q0},1} = {q0}, estes dados so obtidos do diagrama de transies do AFND. O conjunto {q0} antigo e j foi avaliado, porm o outro {q0,q1} novo e suas transies devem ser calculadas. Encontramos D({q0,q1},0) = {q0,q1} e D({q0,q1},1) = {q0,q2}. E iremos considerar todos os novos conjuntos que forem aparecendo at que nenhum novo conjunto aparea, e a a construo ter convergido. Assim teremos a seguinte tabela de transio: 0 {q0} {q0, q1} 1 {q0}

{q0, q1} {q0, q1} {q0, q2}

15 *{q0, q2} {q0, q1} e o seguinte diagrama de transies correspondente:


1
Incio

{q0}

0 0 {q0,q1} 1 0 1 {q0,q2}

0,1

{q0}

Observe que ele s tem trs estados, que por coincidncia o mesmo nmero de estados que AFND a partir do qual ele foi construdo. Porm ele tem seis transies comparado com as quatro transies do AFND.

2.3 Autmatos Finitos com Transies Vazias


Os Autmatos Finitos com Transies Vazias (AFND, AFN ou ainda -NFA) so AFNDs que aceitam transies vazias ou seja, transies sem leitura de smbolo algum da fita, o que tambm pode ser interpretado como a transio sobre , o string vazio. Esse recurso no expande a classe de linguagens que pode ser aceita pelo autmato finito, mas nos d uma certa facilidade adicional para projetar. Assim para qualquer autmato finito no determinstico com transies vazias pode ser construdo um autmato finito determinstico (AFD) equivalente. Ao montar o diagrama de transio utilizamos o smbolo para representar as transies vazias. Abaixo mostramos um exemplo de AFND que aceita nmeros decimais que consistem em: 1. Um sinal + ou opcional 2. Uma string de dgitos 3. Um ponto decimal 4. Outra string de dgitos. Tanto o string (2) quanto o string (4) podem ser vazios, mas pelo menos um dos dois deve ser no-vazio.

16
0,1,...,9 +,{q0,q1} {q1}

Incio

. 0,1,...,9
{q1,q4} {q2,q3,q5}

0,1,...,9 0,1,...,9 . .

{q2}

0,1,...,9

{q3,q5}

0,1,...,9

O estado q1 representa a situao em que j vimos o sinal, se ele existir, e talvez alguns dgitos, mas no o ponto decimal. O estado q2 representa a situao em que acabamos de ver o ponto decimal, tendo visto ou no dgitos anteriores. Em q4 vimos pelo menos um dgito, mas no o ponto decimal. Assim em q3 vimos um ponto decimal e pelo menos um dgito, esteja ele antes ou depois do ponto decimal. Podemos permanecer em q3 lendo outros dgitos que existirem, e tambm podemos a qualquer momento adivinhar que a string de dgitos est completa e ir espontaneamente para q5, o estado de aceitao.

2.3.1 Notao Formal


O AFND pode ser representado da mesma forma que um AFND, porm acrescentando informaes a respeito das transies sobre . Um AFND A representado formalmente por A = (Q,,,q0,F), onde cada componente tem a mesma interpretao que no caso de um AFND, exceto pela funo de transio ser agora uma funo que recebe como argumentos: 1. Um estado em Q 2. Um elemento de U {}, isto , um smbolo de entrada do alfabeto ou o smbolo (que representa a string vazia e no pode fazer parte do alfabeto) O AFND do nosso exemplo definido formalmente como E = ({q0,q1,q2,q3,q4,q5},{.,+,-,0,1,2,3,4,5,6,7,8,9},,q0,{q5}) onde definido pela tabela de transies abaixo: +,. 0,1,...,9 {q3}

q0 {q1} {q1} q1 q2

{q2} {q1, q4}

17 q3 {q5} q4 q5 {q3} {q3}

2.3.2 Fecho-
A funo Fecho- (tambm conhecida como Fecho-Vazio e ECLOSE) de um estado pode ser definida informalmente como a funo que recebe um estado q e retorna o conjunto de estados composto por q e todos os estados em que possvel chegar a partir de q seguindo transies rotuladas por . Formalmente podemos definir Fecho-(q) recursivamente: O estado q est em Fecho-(q) Se o estado p est em Fecho-(q), e existe uma transio do estado p para o estado r rotulada por , ento r est em Fecho-(q) Para o nosso exemplo temos as seguintes funes Fecho-: Fecho-(q0) = {q0, q1} Fecho-(q2) = {q2} Fecho-(q4) = {q4} Fecho-(q1) = {q1} Fecho-(q3) = {q3, q5} Fecho-(q5) = {q5}

2.3.3 Funo de Transio Estendida


Suponha a entrada 8.5 para o AFND do nosso exemplo, faremos a funo de transio estendida da seguinte forma: 1. Primeiro calculamos o Fecho- do nosso estado inicial: o Fecho-(q0) = {q0,q1} 2. Dado o smbolo 8 teremos que calcular sua transio a partir dos estados do Fecho- do nosso estado inicial, ou seja, q0 e q1: o (q0,8) U (q1,8) = U {q1, q4} 3. Faremos agora o Fecho- de cada elemento do conjunto calculado no passo anterior: o Fecho-(q1) U Fecho-(q4) = {q1} U {q4} = {q1,q4} 4. Agora iremos processar o smbolo . a partir dos estados obtidos na etapa anterior: o (q1,.) U (q4,.) = {q2} U {q3} = {q2,q3}

18 5. Mais uma vez iremos fazer o Fecho- de cada elemento do conjunto calculado na etapa anterior: o Fecho-(q2) U Fecho-(q3) = {q2} U {q3,q5} = {q2,q3,q5} 6. Agora iremos processar o smbolo 5 a partir dos estados obtidos na etapa anterior: o (q2,5) U (q3,5) U (q5,5) = {q3} U {q3}U = {q3} 7. E novamente iremos calcular o Fecho- dos elementos do conjunto que obtivemos na ltima etapa: o Fecho-(q3) = {q3,q5} 8. No temos mais nenhum smbolo para processar, portanto basta verificar se pelo menos um dos estados obtidos na ltima etapa estado final. Neste caso, q5 um estado final, portanto a string 8.5 aceita pelo nosso AFND.

2.3.4 Eliminao de transies vazias


Dado um AFND E qualquer, ns podemos encontrar um AFD A que aceita a mesma linguagem que E. Assim como na converso de AFND para AFD, os estados de A sero subconjuntos dos estados de E. A nica diferena que deveremos incorporar as transies vazias de E, atravs da funo Fecho-. Sendo E = (QE,,E,q0,FE). Ento A = (QA,,A,qA,FA) definido assim: 1. QD o conjunto dos subconjuntos de QE, todos os estados acessveis de A so subconjuntos com Fecho- de QE, ou seja, so subconjuntos de elementos cujas transies vazias de cada elemento levam apenas a elementos que esto neste subconjunto. 2. qA = Fecho-(q0); isto ; o estado inicial de A o fechamento do estado inicial de E. 3. FA representa os conjuntos de estados que contm pelo menos um estado de aceitao em E. Ou seja, FA = {S | S est em QD e S FE } 4. A(S,a) calculado, para todo a em e todos os conjuntos S em QA por: a. Seja S = {p1,p2,...,pk}. b. Calcule

i 1

E pi , a ; seja esse conjunto {r1,r2,...,rm}.


m

c. Ento A S , a j 1 Fecho r j Exemplo: Vamos eliminar as transies vazias do nosso exemplo de AFND, que chamaremos de E. Construiremos um AFD A equivalente da seguinte forma:

19 1. O estado inicial de E q0, portanto o estado inicial de A ser Fecho-(q0), que {q0,q1}. 2. Devemos agora obter os sucessores de q0 e q1 para os vrios smbolos em , este smbolos so os sinais de + ou -, o ponto e os dgitos de 0 a 9. Sobre + e -, q1 no vai para lugar algum, enquanto q0 vai para q1. Assim ({q0,q1},+} ser o Fecho(q1). Como no existe nenhuma transio vazia saindo de q1, temos que ({q0,q1},+} = {q1}, e da mesma forma ({q0,q1},-} = {q1} 3. Em seguida calcularemos ({q0,q1},.}, como q0 no vai para lugar algum lendo o ponto, q1 e vai para q2, devemos calcular o Fecho- de q2. Como no h transies vazias saindo de q2, ({q0,q1},.} = {q2} 4. Finalmente, devemos calcular ({q0,q1},0}. Vemos que q0 no vai para lugar algum lendo 0, mas q1 vai para q1 e q4. Como nenhum desses dois estados tem transies vazias, conclumos que ({q0,q1},0} = {q1,q4}. Note que esta mesma transio vlida para todos os dgitos de 0 a 9. Assim calculamos todos os arcos saindo de {q0,q1}. Todas as outras transies so calculadas de modo semelhante, conforme ser demonstrado na aula, e finalmente chegaremos ao seguinte AFD A:
0,1,...,9 +,{q0,q1} {q1}

Incio

. 0,1,...,9
{q1,q4} {q2,q3,q5}

0,1,...,9 0,1,...,9 . .

{q2}

0,1,...,9

{q3,q5}

0,1,...,9

Note que, para evitar confuso, foram omitidas todas as transies para o estado , assim voc deve imaginar que para todo estado do diagrama em que no aparecem transies para um dado smbolo, essa transio tem como destino o estado . Alm disso, o estado tem transies para ele mesmo para todos os smbolos de .

Vous aimerez peut-être aussi