Procedimentos e Algoritmos

download Procedimentos e Algoritmos

of 97

Transcript of Procedimentos e Algoritmos

Procedimentos e AlgoritmosDef.1:Um procedimento uma seqncia finita de instrues que podem ser executadas por um agente computacional, seja ele humano ou no. Def.2: Uma funo dita ser computvel se existir um procedimento que a compute. A noo de "computvel" corresponde noo intuitiva de "receita", "roteiro", "mtodo".

Exemplo de procedimentoAlgoritmo de Euclides - Clculo do mximo divisor comum (mdc) de dois inteiros positivos m e n. Passo 1: Adote como valores iniciais de x e y os valores m e n, respectivamente. Passo 2: Adote como valor de r o resto da diviso do valor de x pelo valor de y. Passo 3: Adote como o novo valor de x o valor de y, e como novo valor de y o valor de r. Passo 4: Se o valor de r nulo, ento o valor de x o mdc procurado, e o clculo termina; caso contrrio, volte a executar as instrues do procedimento a partir do passo 2.

Propriedades de um ProcedimentoDescrio Finita. Todo procedimento parte de um certo nmero de dados pertencentes a conjuntos especificados de objetos (como m e n que so inteiros positivos), e espera-se que produza um certo nmero de resultados (como o valor final de x) que mantm uma relao especfica com os dados (funo). Supe-se que exista um agente computacional - humano, mecnico, eletrnico, etc. - que executa as instrues do procedimento. Cada instruo deve ser bem definida, no ambgua (no exemplo, haveria problemas se x e y pudessem ser inteiros quaisquer a menos que definssemos o que seria o resto de diviso para inteiros no positivos). As instrues devem ser efetivas, isto , devem ser to simples que poderiam ser executadas, em princpio, por uma pessoal usando lpis e papel, num espao finito de tempo (no exemplo, elas no o seriam se, por exemplo, x e y pudessem ser nmeros reais quaisquer em representao decimal, possivelmente de comprimento infinito).

Formas de representao de Procedimentostextual diagrama de blocos

Exemplos de trmino de ProcedimentosNesta seo so apresentados alguns exemplos de trmino de Procedimentos: como ser visto, alguns procedimentos terminam quaisquer que sejam os valores dos dados de entrada e outros terminam apenas para alguns valores.

EXEMPLO 1 - Algoritmo de EuclidesCalcula o mximo divisor comum entre dois inteiros positivos m e n.

Pergunta: Este procedimento termina quaisquer que sejam os valores dos dados de entrada? Mostrar isto, neste exemplo, equivale a provar a seguinte proposio: "Se no passo 2 do procedimento os valores de x e y so inteiros e positivos, ento os passos 2, 3 e 4 sero executados apenas um nmero finito de vezes, com os clculos terminando no passo 4". Demonstrao por induo sobre o valor de y: se y = 1, ento aps o passo 2, r = 0. Portanto, os passos 2, 3 e 4 so executados uma nica vez e o clculo termina no passo 4. suponhamos que a proposio verdadeira para qualquer x > 0 e qualquer y, com 1 y 0 e y = r com 00 ^ n>0}(verdadeira por hiptese) (1) x, y m, n; {Q1: m>0 ^ n>0 ^ x=m ^ y=n} repita {Q2: m>0 ^ n>0 ^ x>0 ^ y>0 ^ mdc(m,n)=mdc(x,y)} (2) r resto(x, y); {Q3: Q2 ^ q(q*y + r = x ^ 0 r y)} (3) x, y y, r {Q4: m>0 ^ n>0 ^ x>0 ^ y=r ^ [y=0 ^ mdc(m,n)=x] [y>0 ^ mdc(m,n) = mdc(x, y)]} (4) at que r = 0; (Note que Q4 ^ r 0 implica Q2) {Q5: mdc(m,n) = x} (5) devolva x fim Devemos provar que Q0 (1) => Q1; Q1 => Q2; Q2 (2) => Q3; Q3 (3) => Q4; Q4 ^(4) => Q2; Q4 ^ ~ (4) => Q5. A terminao deste procedimento j foi provada anteriormente, usando-se induo sobre o valor de y.

EXEMPLO 2procedimento fib(n): incio {Q0: n 0} (1) x, y, k 0, 1, 0; {Q1: n 0 ^ x=F0 ^ y = F1 ^ k=0}

enquanto {Q2: n 0 ^ x=Fk ^ y = Fk+1 ^ 0 k n} (2) k < n faa {Q3: n 0 ^ x=Fk ^ y = Fk+1 ^ 0 k < n} (3) x, y, k y, x+y, k+1 {Q4: n 0 ^ x=Fk ^ y = Fk+1 ^ 0 k n}; {Q5: n 0 ^ x=Fn} (4) devolva x fim Temos que provar que: Q0 (1) => Q1; Q1 => Q2; Q2 ^ (2) => Q3 ; Q3 (3) => Q4; Q4 => Q2; Q2 ^ ~ (2) => Q5 . Para mostrar que este programa termina, basta verificar que dentro do nico comando repetitivo, os valores sucessivos da varivel k formam a sequncia 0, 1, 2, 3,..., e como n 0, depois de um nmero finito de repeties, exatamente n, teremos k = n.

EXEMPLO 3Programa para calcular o produto de dois nmeros naturais, x>0 e y>0.

EXEMPLO 4Programa que calcula o quociente entre dois naturais, x>0 e y>0.

EXEMPLO 5Considere o seguinte programa: procedimento g(n): se n > 100 ento devolva n - 10 seno devolva g(g(n+11)) onde n um inteiro qualquer. Demonstraremos que a funo g definida pelo procedimento igual funo h definida por: n - 10 se n > 100 h(n) = 91 se n 100 Consideremos os trs casos possveis: 1) n > 100: neste caso, g(n) = n - 10 = h(n) 2) 90 n 100: neste caso, o valor de g(n) ser dado por g(g(n+11)), onde duas ocorrncias de g correspondem a chamadas recursivas do procedimento. Usando, portanto, a hiptese de induo duas vezes, teremos: g(n) = g(g(n+11)) = g(h(n+11)) = h(h(n+11)) (pois n+11 > 100) Por outro lado, pela definio de h(n): h(h(n+11)) = h(n-10) = 91 = h(n) Temos finalmente, g(n) = h(n). 3) n < 90: ainda neste caso, aplicando a hiptese de induo duas vezes, teremos: g(n) = g(g(n+11)) = g(h(n+11)) = h(h(n+11)) Como n+11 100, temos: h(h(n+11)) = h(91) = h(n) Finalmente: g(n) = h(n). Mostramos, assim, que para todo inteiro n, ou o clculo de g(n) no termina, ou ento g(n)=h(n). Como exerccio, demonstre que este clculo sempre termina.

Complexidade de AlgoritmosCritrios para o julgamento de um programa: Ele faz exatamente o que queremos que faa? Ele o faz corretamente, de acordo com as especificaes originais da tarefa? H uma documentao que descreva como us-lo e como ele trabalha? As sub-rotinas so criadas de tal modo que realizem sub-funes lgicas? O cdigo legvel? Ele executado em tempo timo de execuo? Ele usa espao de memria mnimo necessrio para sua execuo?

Ele executado em tempo timo de execuo? Ele usa espao de memria mnimo necessrio para sua execuo? tm relao com a performance do programa. A avaliao da performance pode ser dividida em duas fases: (a) estimativas prvias e (b) testes posteriores. Estimativas Prvias: Suponha a existncia de um comando x 2, biconexo se e s se cada par de vrtices de G est contido em algum ciclo) A Classe NP

A Classe NPPREMBULO: Considere um problema de deciso D. Se D for solvel atravs de uma aplicao de um processo qualquer, ento necessariamente existe uma justificativa para a soluo de D. Essa justificativa deve atestar a veracidade da resposta SIM ou NO dada ao problema. Por exemplo: Uma justificativa para uma resposta SIM ao problema da Biconectividade seria a prpria justificativa de correo do algoritmo que verifica se um dado grafo ou no biconexo. Considere o problema CICLO HAMILTONIANO: um grafo G possui um ciclo hamiltoniano? Justificativa para resposta SIM: exibe-se um ciclo C de G e atesta-se que ele hamiltoniano (contm todos os vrtices de G, exatamente uma vez cada). Justificativa para resposta NO: listar todos os ciclos simples de G e verificar que nenhum deles hamiltoniano Na justificativa SIM: O processo de reconhecer que um ciclo C hamiltoniano consiste em verificar: (i) se C um ciclo, isto , se vrtices consecutivos na sequncia so adjacentes no grafo e, alm disso, o primeiro e o ltimo coincidem;

(ii) se C um ciclo simples, ou seja, se no h vrtice repetido em C, a menos do primeiro e ltimo; (iii) se todo vrtice de G participa de C. O algoritmo correspondente a esse processo simples e pode ser implementado em tempo linear O(n+m) Na justificativa NO: necessrio exibir todos os ciclos de G e atestar que nenhum hamiltoniano. Para tanto, preciso comprov

A Classe NP: DefinioDefine-se a Classe NP como sendo aquela que compreende todos os problemas de deciso D, para os quais existe uma justificativa resposta SIM para D, cujo passo de verificao pode ser realizado por um algoritmo polinomial do tamanho da entrada de D. Observa-se que: no se exige uma soluo polinomial para os problemas de NP; somente que uma justificativa resposta SIM possa ser verificada em tempo polinomial no tamanho da entrada; para conseguir um algoritmo de reconhecimento polinomial necessrio que o tamanho da justificativa, dada pelo passo de exibio, seja polinomial no tamanho da entrada do problema. No caso do Ciclo Hamiltoniano, a justificativa para a resposta NO o conjunto de todos os ciclos de G, que tem tamanho exponencial no tamanho de G. Portanto, qualquer algoritmo para seu reconhecimento ser exponencial no tamanho de G, embora polinomial no tamanho da justificativa. nada se exige em relao justificativa NO para problemas pertencentes a NP. De fato, h problemas D NP para os quais existem algoritmos de reconhecimento de justificativas NO que so polinomiais no tamanho da entrada de D. Como tambm h aqueles para os quais tais algoritmos no so conhecidos. P NP, pois se D P, ento existe um algoritmo polinomial que apresenta a soluo de D, e que pode ser utilizado como algoritmo de reconhecimento para uma justificativa resposta SIM de D. Logo, D NP. P NP ? Ou seja, em caso afirmativo, existe algum problema na classe NP que seja intratvel? Ou, em caso negativo, todo problema de NP admite necessariamente algoritmo polinomial? Ou seja, a exigncia de que uma justificativa SIM para D pode ser reconhecida em tempo polinomial suficiente para garantir a existncia de um algoritmo polinomial para D?

At o momento, no se conhece a resposta a essa pergunta. Todas as evidncias apontam na direo P NP. O principal argumento para essa conjectura que a classe NP incorpora um conjunto enorme de problemas, para os quais inmeros pesquisadores tm procurado algoritmos polinomiais, porm sem sucesso. Esses problemas pertenceriam, ento, a NP - P, o que conduz conjectura P NP. Quo complexo pode ser um problema da classe NP? Ou seja, admitindo-se que P NP, seria possvel ao menos resolver em tempo exponencial todo problema da classe NP? Resposta: Sim. Se D NP, ento uma resposta SIM ou NO pode ser obtida em tempo exponencial com a sua entrada. P a subclasse de "menor dificuldade" de NP. A subclasse de "maior dificuldade" de NP a classe dos problemas NP-completos. Intuitivamente, se uma soluo polinomial for encontrada para um problema NP-completo, ento todo problema de NP tambm admite soluo polinomial (e consequentemente, nessa hiptese, P=NP) Modelo Formal de Algoritmo - Mquina de Turing

Modelo Formal de Algoritmo Mquina de TuringPara se estudar os limites da computao e complexidade computacional, necessrio escolher um modelo formal de algoritmo. Uma LP uma possvel formalizao, porm complexa demais para ser til do ponto de vista terico. O modelo formal de algoritmo mais utilizado o de Turing, pois: a) suficientemente simples, facilitando demonstraes, e ao mesmo tempo, b) suficientemente poderoso para que os resultados provados se apliquem a modelos aparentemente com mais recursos (na verdade, poderoso o suficiente para que qualquer algoritmo possa ser nele representado). Mquina de Turing

Mquina de TuringDef. Uma mquina de Turing, M, um sistema formal que pode ser visualizado como um computador consistindo de:

: representa espao em brancoum controle central, que em cada instante, est em algum estado q, de um conjunto finito de estados Q. Inicialmente, o controle est no estado inicial q0. uma fita de entrada/trabalho/sada, semi-infinita, manipulada pelo controle, e dividida em clulas, cada uma das quais contm um smbolo de um alfabeto finito (suporemos que este alfabeto contm necessariamente os smbolos {eof, , 0, 1}). Inicialmente a clula mais esquerda contm uma marca especial (eof), seguida pela entrada (input): uma sequncia finita de smbolos sobre o alfabeto de entrada e sada, e/s \ {eof, }, seguida por um nmero infinito de brancos (b). uma cabea de leitura/gravao, que inicialmente est posicionada no 1 smbolo de entrada, mais esquerda. Atravs dessa cabea, o controle pode modificar os smbolos da fita. A computao da mquina segue uma sequncia de passos. A cada passo, com base: i) no estado atual do controle q e ii) no smbolo sobre o qual est posicionada a cabea da fita, a mquina ou pra ou i) substitui por ; ii) reposiciona a cabea da fita, que pode ser movida uma clula direita ou esquerda; iii) muda o controle para um novo estado q. Sempre que eof, ento necessariamente eof; no caso em que = eof, a cabea encontra-se sobre a clula mais esquerda da fita, e ento = eof obrigatoriamente e a cabea no pode ser movida para a esquerda. A computao da MT prossegue passo a passo e, ou nunca termina, ou termina deixando a mquina em algum estado q. Seja a cadeia de entrada da fita (presente j no estado q0), e seja a palavra sobre e/s, escrita aps a primeira clula esquerda contendo eof, at o primeiro smbolo de \ e/s exclusive. Temos que definir, agora, o que vamos considerar como resultado da computao. Algumas MT so ditas reconhecedoras de cadeias, possuindo um subconjunto F de estados finais ou de aceitao. Assim, se q F, dizemos que a entrada foi

aceita ou reconhecida. Se q F, dizemos que a mquina rejeita a entrada . Se a mquina nunca parar, no aceita nem rejeitada. Alternativamente, podemos considerar como sendo o resultado da computao de alguma funo fM, com a propriedade de que fM( ) = . Ou seja: Uma mquina de Turing M reconhece um conjunto A *e/s se para toda entrada *e/s, M pra, e aceita se A. Uma mquina de Turing M calcula uma funo f: *e/s *e/s se para toda entrada *e/s, M pra, e a sada de M a palavra f( ). Formalmente, uma mquina de Turing M denotada por M=< E, , e/s, f, q0, F> onde: i) E um conjunto finito de estados; ii) o alfabeto da fita; iii) e/s \ {eof, } o alfabeto de entrada e sada; iv) f a funo de transio de estados, que mapeia um estado e um smbolo em um estado, um smbolo e um movimento (para esquerda, L, ou direita, R), isto , f: E x E x x {L, R} f pode ser indefinida para certos estados e smbolos; neste caso, dizemos que M pra no seu estado atual; v) q0 E chamado estado inicial; vi) F E o conjunto dos estados finais. Uma configurao da MT pode ser descrita como (x q y) onde esto indicados o contedo, x, da fita esquerda da cabea, o estado atual, q, e o contedo da fita, y, direita da cabea da fita. Ou seja, a fita dada por x.y. . A funo f atua tal que se f(qi, a) = (qj, c, x) ento, quando M l o smbolo a no estado qi, ela ir trocar a por c, mover esquerda ou direita, dependendo se x L ou R, e mudar o estado para qj. Se x for L e M estiver lendo o smbolo mais esquerda, M pra. Representao da Funo de Transio f

Representao da Funo de Transio f

por um conjunto finito de equaes da forma f(qi , a) = ( qj ,b, x) onde x {L, R}; a, b ; qi, qj E.

por uma tabela com | | colunas e |E| linhas, e entradas que so triplas (q, b, x). por um diagrama de transio de estados, que um dgrafo, cujos |E| ns so os estados de E. Se f(qi , a) = (qj ,b, x), ento existe uma aresta que parte do n qi para o n qj que rotulada com a/b,x. O n correspondente ao n inicial diferenciado com uma aresta rotulada "inicial", e os ns correspondentes aos estados finais so diferenciados com um crculo ao seu redor. Exemplos de Mquina de Turing

Exemplo de MT - 1Considere M que reconhece a linguagem {0n1n | n 0} onde: E = {q0, q1, q2, q3, q4, qf} e/s = {0, 1} = {0, 1, , eof, 0v, 1v} F = {qf} Processo: Em cada passo, M reconhece um 0 e sai, direita, a procura de um 1, e ento volta, esquerda, e repete o processo. Os smbolos 0v e 1v so auxiliares e substituem os 0 e 1, respectivamente, que vo sendo reconhecidos. As equaes abaixo definem a funo f: q0: procura, direita, a partir da extremidade direita da cadeia, e reconhece um 0, ignorando 1s. f(q0 , ) = (qf , ,R) --- quando cadeia de entrada nula f(q0 , 0) = (q1 , 0v, R) ---- reconhece primeiro 0 direita f(q0 , 1v) = (q3 , 1v, R) ---- alcanou subcadeia de 1v direita q1: procura, direita, subcadeia de 1s, ignorando 0s e 1vs. f(q1 , 0) = (q1 , 0, R) ----- ignora 0 f(q1 , 1v) = (q4 , 1v, R) ---- ignora 1v f(q1 , 1) = (q2 , 1v, L) ---- reconhece 1 q2: volta esquerda para iniciar novo passo, at encontrar o 0v mais direita. f(q2 , 1v) = (q2 , 1v, L) ---- ignora 1v f(q2 , 0) = (q2 , 0, L) ---- ignora 0 f(q2 , 0v) = (q0 , 0v, R) ---- volta para estado inicial q3: verifica se no existem 1s excedentes direita, quando j no existem mais 0s. f(q3 , 1v) = (q3 , 1v, R) --- ignora 1vs f(q3 , ) = (qf , 0, R) --- alcanou final de cadeia: no h 1s excedentes

Obs.: uma vez no previsto o encontro de 1s excedentes, por f, se isso ocorrer, M pra por falta de definio dessa funo. Neste caso, a cadeia no reconhecida, por q3 no ser estado final. q4: ignora 1v, marcando o primeiro 1 encontrado. f(q4 , 1v) = (q4 , 1v, R) --- ignora 1vs f(q4 , 1) = (q2 , 1v, L) --- reconhece primeiro 1 direita.

Representao de f como diagrama de estados:

Exemplo de MT - 2 Mquina M que reconhece a linguagem {x|x {a, b, c}* e x uma permutao de an bn cn , para algum n 0}. Cadeias vlidas: abc, aabbcc, bca, bacacb, ... Cadeias invlidas: bc, abac, ca, ... Processo: Em cada passo sobre a fita, M substitui um a, um b e um c por 0s. M pra num estado final se um passo iniciado e a fita consiste apenas de 0s. E = {q0, q1, q2, q3, q4, q5, q6, q7, q8, qf} e/s = {a, b, c} = {a, b, c, 0, 1, , eof} F = {qf}

Exemplo de MT - 2

Onde: q0: reconhece 1a. letra (a/b/c) e substitui por 1; q1: j reconhecido a: vai reconhecer b ou c; q2: j reconhecido b: vai reconhecer a ou c; q3: j reconhecido c: vai reconhecer a ou b; q4: j reconhecidos a e b: vai reconhecer c; q5: j reconhecidos a e c: vai reconhecer b; q6: j reconhecidos b e c: vai reconhecer a; q7: volta procura do 1 mais direita; q8: inicia novo passo, ignorando 0s; qf: estado final de aceitao. Exemplo de MT - 3

Exemplo de MT - 3Mquina de Turing, M, que computa a soma de dois nmeros naturais, representados na notao unria. Entrada: 1n101n2; sada deve ser 1n1+n2. Processo: A partir do 0 que separa as duas cadeias de 1s, a cada 1 da subcadeia da direita, M o substitui por 0, volta subcadeia da esquerda e substitui o 0 por 1. Dessa forma, subtrai-se 1 do nmero da direita e soma-se 1 ao da esquerda, tendo

sempre um 0 separando-os. Tese de Church

Tese de Church"Qualquer procedimento efetivo pode ser realizado por uma Mquina de Turing". Uma MT tem uma descrio finita (E e so finitos e, portanto, f tambm um objeto finito). Cada operao de MT claramente efetiva. Logo, fica intuitivamente claro que toda MT descreve um procedimento efetivo. Porm, o modelo de Turing aparentemente to simples que parece improvvel que

ele possa implementar qualquer procedimento efetivo. No entanto, exatamente isto que afirma a Tese de Church. Procedimento Efetivo (informal) X Mquina de Turing (formal) impossibilidade de demonstrao formal. Em particular, pode-se demonstrar que: a) para cada programa em linguagem LP (por ex.), existe uma MT que calcula a mesma funo; b) existe um algoritmo que, tendo por entrada um programa em LP, produz por sada a descrio de uma MT correspondente. Duas aplicaes possveis da Tese de Church: a) Podemos especificar um procedimento informalmente e, invocando a Tese de Church, conclumos que existe um programa formal correspondente. b) Demonstramos que no existe um programa formal de uma certa espcie, e pela Tese de Church, afirmamos que no existe tampouco nenhum procedimento informal do tipo desejado. A fim de demonstrar, empiricamente, o poder computacional das MT, existem tcnicas de combinao e extenso das MT. Dessa forma, o modelo de Turing vai ganhando recursos que facilitam a construo de MT para funes mais complexas. O ponto importante, no entanto, que todas essas extenses comprovadamente NO alteram o conjunto de funes computveis por MT. Isto , o poder computacional das MT permanece inalterado com o acrscimo de todos esses recursos. Isso traz ainda mais evidncias para a Tese de Church. Tcnicas de Extenso de MT

Tcnicas de Extenso de MTPermitir que a fita seja infinita em ambas as direes, ao invs de apenas direita; Permitir vrias fitas, ao invs de uma nica; Permitir vrias cabeas de leitura/escrita, ao invs de uma nica; Permitir que a fita seja bidimensional, ao invs de unidimensional; Permitir no-determinismo na definio de f ; Permitir a combinao de quaisquer extenses acima. Exemplo de MT com 4 fitas:

Seja M uma MT com 4 fitas que reconhece a linguagem{x|x {a, b, c}* e x uma permutao de an bn cn , para algum n 0} (idem Exemplo 2.) Fita 1: usada como fita de entrada, armazena a cadeia de entrada (que no mais alterada); Fitas 2, 3, 4: armazenam os nmeros (unrios) de as, bs, cs que aparecem na cadeia de entrada, limitados esquerda por um 0. Processo: Percorrer a cadeia de entrada, na fita 1, incrementando os nmeros de as, bs, cs nas fitas 2, 3, 4, respectivamente. Obs.: os estados so rotulados pelo nmero da fita considerada para leitura/gravao naquele ponto.

Para cada tipo de extenso, possvel mostrar que a operao de uma MT estendida pode ser imitada, ou simulada, por uma MT do tipo bsico. Uma demonstrao completamente rigorosa deveria, em cada caso: a) primeiro, mostrar como construir uma MT bsica para cada mquina de tipo estendido; e b) segundo, provar que a MT bsica construda imita corretamente o comportamento da mquina original. MT - Teoremas

MT: TeoremasTeorema 1. Toda funo que computada, ou linguagem que decidida ou aceita, por uma MT com fita infinita em ambas direes tambm computada, decidida ou aceita, respectivamente, por uma MT bsica. Teorema 2. Toda funo que computada, ou linguagem que decidida ou aceita, por uma MT com k fitas tambm computada, decidida ou aceita, respectivamente, por uma MT bsica.

Teorema 3. Toda funo que computada ou linguagem que decidida ou aceita por uma MT com mltiplas cabeas de leitura/escrita tambm computada, decidida ou aceita, respectivamente, por uma MT bsica. Teorema 4. Toda funo que computada ou linguagem que decidida ou aceita por uma MT com fita bidimensional tambm computada, decidida ou aceita, respectivamente, por uma MT bsica. Quase todas as demonstraes para os teoremas acima usam a estratgia de usar, na MT bsica, uma fita com mltiplas trilhas. MT no determinsticas

MT no determinsticasSo definidas tal que E, e F so os mesmos anteriores, porm f, a funo de transio agora substituda por um subconjunto de (E x ) x (E x x {L, R}) Ou seja, a cada transio de estado, mais do que uma tripla de valores (b, qj , x) pode estar prevista dados o estado atual e o smbolo atual da fita (qi , a). Assim, M poder "escolher" qualquer uma das alternativas previstas. Como o no-determinismo faz com que, se M parar, os resultados obtidos podem ser diferentes entre si, s faz sentido pensar em MT deste tipo como reconhecedoras de linguagens. Em geral, o no-determinismo possibilita computar funes mais complexas do que aquelas usualmente tratadas por mquinas bsicas. Isso verdade, por exemplo, no caso de autmatos a pilha, como veremos mais adiante. No entanto, novamente, esse recurso nada acrescenta ao conjunto de funes computveis por MT bsicas. Teorema 5. Toda linguagem aceita por uma MT no determinstica aceita por uma MT determinstica. Decidibilidade

DecidibilidadeDef.1. Dizemos que uma linguagem L MT-decidvel (ou que uma MT decide L) se existe uma Mquina de Turing tal que, dada qualquer cadeia, pra com resposta SIM, se a cadeia uma sentena de L, ou com a resposta NO, se a cadeia no uma sentena de L. Def.2. Dizemos que uma linguagem L MT-aceita (ou que uma MT aceita L) se existe uma Mquina de Turing tal que, dada qualquer cadeia, pra com resposta SIM, se a cadeia uma sentena de L. Ou seja, a noo de decidibilidade mais forte que a de aceitabilidade, uma vez que neste ltimo caso, a MT pode nunca parar.

Decidibilidade Algoritmo Aceitabilidade Procedimento Teorema 1. Toda linguagem MT-decidvel MT-aceita. Teorema 2. Se L MT-decidvel, ento seu complemento L' tambm MTdecidvel. Nem toda linguagem aceita decidvel. Nem todo complemento de linguagem MT-aceita MT-aceito. No-Computabilidade e Problemas Indecidveis

TESE DE CHURCH:Uma funo computvel se e somente se existir uma Mquina de Turing que a compute. Ou seja, O conjunto de funes para as quais no possvel construir Mquinas de Turing o mesmo conjunto de funes para as quais nenhum procedimento efetivo pode ser formulado. Consequentemente, nenhum programa de computador seria formulado para comput-las. So as chamadas funes no computveis. As funes no computveis usualmente exibidas parecem bastante artificiais. Na realidade, a partir de sua no computabilidade, pode-se provar que funes de outra natureza (mais naturais) tambm so no computveis. Nas pginas seguintes, mostraremos alguns problemas clssicos de no computabilidade. Invocando a Tese de Church novamente, podemos utilizar qualquer linguagem de representao para nossos procedimentos. Se uma funo no pode ser computada em Pascal, por exemplo, ento ela no pode ser computada em qualquer outra linguagem. Exemplos de Funes No-Computveis

Exemplos de Funes No-ComputveisProblema 1.: Existe um procedimento Pascal que toma como entrada um outroprocedimento Pascal p e retorna true se p um algoritmo, ou false, caso contrrio? Resposta: No! Prova: Por contradio Suponha que tal procedimento exista. Vamos cham-lo de ALG. Ento a declarao de ALG da forma: function ALG (procedure p) : boolean; Podemos, ento, usar a funo ALG para definir novos procedimentos:

procedure Problema (x: integer); begin while ALG(Problema) do nil end; "Problema" algoritmo? Suponha que sim. Ento ALG(Problema) true e o comando while nunca termina, e portanto, Problema nunca termina, e no algoritmo. Contradio! Suponha que no. Ento ALG(Problema) false e o comando while termina, e portanto, Problema termina, e um algoritmo. Contradio! Portanto, Problema termina se Problema no termina Logo, ALG no pode existir. (este mtodo de demonstrao baseia-se na tcnica de diagonalizao de Cantor) Problema 2

Exemplos de Funes No-ComputveisProblema 2. (da Parada): Existe um procedimento Pascal, HALT, que tomacomo entrada um procedimento p e um inteiro x, e retorna true se p pra com entrada x e false, se p no pra com entrada x? Resposta: No! Prova: Por contradio. Suponha que HALT exista. Ento podemos escrever um procedimento Pascal D: procedure D (x: integer); begin while HALT(D, x) do nil end; D pra com entrada x? Suponha que sim. Ento HALT(D, x) true e D no termina com entrada x. Contradio! Suponha que no. Ento HALT(D, x) false e D termina com entrada x. Contradio! Portanto, D pra com entrada x se D no pra com entrada x. Logo, HALT no pode existir! No-Computabilidade X Decidibilidade

No-Computabilidade X DecidibilidadeO critrio de no-computabilidade pode ser expresso em funo da propriedade de decidibilidade. (Vimos que uma linguagem L decidvel se sempre se obtm uma resposta (Sim ou No) na verificao se uma cadeia ou no sentena de L.)

Mais genericamente, uma certa propriedade no decidvel se no existir um algoritmo que a decida, i.e., que retorne verdadeiro ou falso, no caso de a propriedade ser verificada ou no, respectivamente. DEF. Seja P uma propriedade de procedimentos. Ento P dita ser decidvel se existir um algoritmo que, quando dado um procedimento p, retorna true se p tem a propriedade P, e false se p no tem a propriedade P. Propriedades No-Decidveis

Propriedades No-DecidveisTeorema 1: A propriedade "pra para toda entrada", ou seja, " algoritmo", no-decidvel. Prova: Suponha que tal propriedade seja decidvel. Ento, existe um algoritmo que a decide. Pela Tese de Church, este algoritmo poderia ser escrito em Pascal, e o cdigo resultante constituiria uma definio do procedimento ALG do Problema 1, que provamos que no pode existir. Note que o teorema no afirma que dado um particular programa e sua entrada, seja impossvel determinar se o programa pra ou no com esses dados. Provamos, anteriormente, que o Algoritmo de Euclides sempre pra para quaisquer entradas m e n de inteiros positivos, e portanto, s vezes perfeitamente possvel decidir a propriedade de parada. O que o teorema afirma que no existe um algoritmo que decida esta questo para qualquer programa p e entrada x. Corolrio: Se uma propriedade P no-decidvel, ento a negao desta propriedade, P, tambm no-decidvel. Se queremos verificar P num procedimento A, temos que decidir P executando A, e quando A retorna true, a sada false, e quando A retorna false, a sada true. Da segue-se que as propriedades: "no pra para alguma entrada" e "no pra para entrada x" so no-decidveis. Um atributo menos rigoroso de propriedades de procedimentos introduzido por: DEF.: Uma propriedade de procedimento P dita semi-decidvel se existe um procedimento que, quando dado um procedimento p, resulta true, se p tem a propriedade P. Semi-Decidibilidade

Semi-DecidibilidadeObs.1:

A noo de semi-decidibilidade mais fraca que a de decidibilidade. Se uma propriedade P decidvel, ento sempre se pode dizer se um procedimento tem ou no tem a propriedade P. Se P semi-decidvel, pode-se dizer apenas se um procedimento tem a propriedade P. Corolrio: Se P decidvel, certamente ela semi-decidvel. Teorema 2 Teorema 2: A propriedade "pra para entrada x" semi-decidvel. Prova: O procedimento pode ser expresso em Pascal como: function TERM (procedure f): boolean; begin f(x); TERM:= true end; Entretanto, existem muitas propriedades que no so sequer semi-decidveis. Resultado: Se P semi-decidvel e P semi-decidvel, ento P decidvel. Prova: Assuma que ambos P e P so semi-decidveis. Sejam p1: o procedimento que resulta true, se P decidvel; e p2: o procedimento que resulta true, se P decidvel. Podemos, ento, construir um procedimento (algoritmo) p que executa ou simula p1 e p2 em paralelo e espera que um dos 2 retorne true. Desde que P ou true ou false, exatamente um dos 2 procedimentos deve retornar com o valor true. Se p1 retornar true p retorna true; Se p2 retornar true p retorna false. Portanto, p decide P. Este resultado til quando queremos mostrar que uma propriedade no semidecidvel. Exemplo 3

Exemplo 3:Sabemos que a propriedade P, "procedimento f pra para entrada x", semidecidvel. Se P, "procedimento f no pra para entrada x", for semi-decidvel, ento, pelo Resultado anterior, teramos que a propriedade P, "procedimento f pra para entrada x", decidvel o que sabemos ser falso. Conclumos, ento, que P, "procedimento f no pra para entrada x", no semi-decidvel. Outros problemas indecidveis

Outros problemas indecidveis (Problema da equivalncia de programas) No existe um algoritmo que decide se dois procedimentos dados P e Q so equivalentes; mais precisamente, no existe um programa Eq(P, Q) tal que Eq pra com quaisquer dados de entrada, e Eq(P, Q) = T se os procedimentos P e Q calculam a mesma funo e Eq(P, Q) = F em caso contrrio. Note que P e Q calculam a mesma funo se para qualquer entrada ou ambos no param, ou ambos param com a mesma resposta. indecidvel se uma expresso formada com os smbolos 0, 1, +, *, =, conectivos lgicos , , , variveis e quantificadores lgicos e , um Teorema da Aritmtica. (Problema das Palavras em Grupos) indecidvel se duas palavras dadas representam o mesmo elemento de um grupo finitamente apresentado. Indecidibilidade e Conjuntos Recursivos

Indecidibilidade e Conjuntos RecursivosDEF.1: Um conjunto A se diz recursivamente enumervel se ou A= ouexiste um algoritmo F que calcula uma funo sobrejetora (conjunto imagem coincide com o contra-domnio) f: N A. Resultado 1: A unio e a interseco de conjuntos recursivamente enumerveis so recursivamente enumerveis. Resultado 2: Um subconjunto A de X recursivamente enumervel se existe um programa P que com uma entrada x X pra se x A. DEF.2: Um subconjunto A de X se diz recursivo se existe um algoritmo que calcula sua funo caracterstica, isto , quando o problema "x A" decidvel. Resultado 3: Se A recursivo ento A recursivamente enumervel. Resultado 4: Um subconjunto A de um conjunto X recursivo se A e X\A so recursivamente enumerveis. Corolrio: Nem o conjunto T de todos os programas em LP que so algoritmos, nem seu complemento em relao ao conjunto de todos os programas em LP, so recursivamente enumerveis. Resultado 5: Todo conjunto decidvel enumervel. Resultado 6: H conjuntos enumerveis que so indecidveis. Linguagens Formais

Linguagens FormaisAlfabeto ou Vocabulrio: Conjunto finito no vazio de smbolos de que so formadas as cadeias. Ex: {a,b}

{0,1,2,3,4,5,6,7,8,9} Cadeia: Concatenao de smbolos de um alfabeto. Define-se como cadeia vazia ou nula uma cadeia que no contm nenhum smbolo. Ex: aab 123094 cadeia nula Comprimento de cadeia: Nmero de smbolos de uma cadeia Ex: |aab| = 3 |123094|=6 ||=0 Concatenao de cadeias: Define-se a concatenao z de uma cadeia x com uma cadeia y, como sendo a concatenao dos smbolos de ambas as cadeias, formando a cadeia xy. |z| = |x| + |y| Ex: x = abaa; y = ba z = abaaba x = ba; y = z = ba Produto de alfabetos: o produto cartesiano de alfabetos. Ex: V1 = {a,b} V2 = {1, 2, 3} V1.V2 = V1xV2 = {a1, a2, a3, b1, b2, b3} Observe que V1.V2 V2.V1 Exponenciao de alfabetos: So todas as cadeias de comprimento n sobre V (Vn). V0 = {}, V1 = V, Vn = Vn-1.V Ex: V = {0, 1} V3 = V2.V = (V.V).V = {00, 01, 10, 11}.{0, 1} = {000, 001, 010, 011, 100, 101, 110, 111} Fechamento (Clausura) de um Alfabeto: Seja A um alfabeto, ento o fechamento de A definido como A* = A0 A1 A2 ... An ... Portanto A* = conjunto das cadeias de qualquer comprimento sobre o alfabeto a. Ex: A = {1} A* = {, 1, 11, 111, ...} Fechamento Positivo de A: A+ = A* - {} Uma cadeia gera diretamente () uma cadeia se

( ) P Uma cadeia gera () uma cadeia se 1, 2, ... n, tal que = 1 2 ... n =

, n 0.

n = 0 = portanto para Uma cadeia (Vn Vt)* uma forma sentencial de G se S ou seja, um embrio para uma cadeia gerada pela gramtica. Uma forma sentencial, , uma sentena de G se Vt*. Portanto as cadeias geradas pela gramtica so as sentenas de G. L(G) = { | sentena de G} a linguagem gerada por G, ou seja, L(G) = { Vt* | S } Duas gramticas G1 e G2 so equivalentes se L(G1) = L(G2) Ambigidade: Uma sentena ambgua se duas ou mais seqncias de derivao que a define. Uma gramtica ambgua se possui alguma sentena ambgua. Linguagens

LinguagemLinguagem uma coleo de cadeias de smbolos, de comprimento finito. Estas cadeias so denominadas sentenas da linguagem, e so formadas pela justaposio de elementos individuais, os smbolos ou tomos da linguagem. Ex: {ab, bc} ( linguagem formada pelas cadeias ab e bc) {abn,anb; n=0} ( linguagem formada por todas as cadeias que comeam com "a"

seguido de um nmero qualquer de "b"'s ou comeam com um nmero qualquer de "a"'s seguidos de um "b", por exemplo ab, abb, aab, aaab, ...) Mtodos de Representao de Linguagens

Mtodos de Representao de LinguagensUma linguagem pode ser representada atravs de trs mecanismos bsicos: enumerao das cadeias de smbolos que formam as suas sentenas (somente linguagens finitas podem ser representadas por este mtodo) atravs de um conjunto de leis de formao das cadeias (ao conjunto de leis de formao d-se o nome de Gramtica) atravs de regras de aceitao de cadeias (s regras de aceitao d-se o nome de Reconhecedor) Enumerao

EnumeraoEnumerao das cadeias de smbolos que formam as suas sentenas: todas as sentenas da linguagem aparecem explicitamente na enumerao, e a deciso acerca da pertinncia ou no de uma cadeia linguagem se faz por meio de uma busca da cadeia em questo no conjunto de sentenas da linguagem; Exemplo: L = {a, b, ab, ba} ( linguagem formada pelas cadeias a, b, ab e ba) Leis de Formao

Leis de FormaoAtravs de um conjunto de leis de formao das cadeias (ao conjunto de leis de formao d-se o nome de Gramtica): no caso de se dispor uma descrio da linguagem atravs de leis de formao (gramticas), dada uma cadeia de smbolos, s possvel afirmar que tal cadeia pertence linguagem se for possvel, aplicando-se as leis de formao que compem a gramtica da linguagem, sintetizar a cadeia em questo. Ao processo de obteno de uma sentena a partir da gramtica d-se o nome de derivao da sentena. Exemplo: G = ( {A, B}, {0, 1}, P, A) P: A 0A AB B 1B B L(G) = {0n1m; n, m=0} Regras de aceitao de Cadeias

Regras de aceitao de cadeias

Atravs de regras de aceitao de cadeias ( regra de aceitao d-se o nome de reconhecedor): neste caso, dispe-se de um conjunto de regras de aceitao. Para decidir se uma cadeia uma sentena da linguagem, basta aplicar a ela as regras de aceitao, as quais devero fornecer a deciso desejada acerca da pertinncia da cadeia linguagem. Exemplo: M = ({A, B, {0, 1}, f, A, {B}) f : f(A,0) A f(A, 1) B f(B, 1) B f(B, 0) A A Linguagem reconhecida a de cadeias de 0's e 1's, terminando necessariamente com 1. Gramticas

GramticasFormalmente as gramticas, dispositivos de gerao de sentenas das linguagens que definem, podem ser caracterizadas como qudruplas ordenadas G = ( Vn, Vt, P, S) , , onde Vn representa o vocabulrio no terminal da gramtica G. Este vocabulrio corresponde ao conjunto de todos os elementos simblicos dos quais a gramtica se vale para definir as leis de formao das sentenas da linguagem. Vt o vocabulrio terminal, contendo os smbolos ou tomos dos quais as sentenas da linguagem so constitudas. D-se o nome de terminais aos elementos de Vt. P representa o conjunto de todas as leis de formao utilizadas pela gramtica para definir a linguagem. Para tanto, cada construo parcial, representada por um noterminal, definida como um conjunto de regras de formao relativas definico do no-terminal a ela referente. A cada uma destas regras de formao que compem o conjunto P d-se o nome de produo da gramtica. Cada produo P tem a forma: (Vn U Vt)+; (Vn U Vt)* onde , no caso geral, uma cadeia contendo no mnimo um no-terminal. S um elemento de Vn, cuja propriedade ser o no-terminal que d incio ao processo de gerao de sentenas. S dito o smbolo inicial ou o axioma da gramtica. Ao conjunto de cadeias geradas por uma gramtica d-se o nome de Linguagem.

Exemplo: Gramtica G1 = (V1, 1, P1, A) onde V1 = {A, B} 1 = {0, 1} P1 = A 0A AB B 1B B L(G) = {0n1m} At este ponto no foi imposta qualquer restrio sobre a gramtica ou sobre as produes que denotam as leis de formao da linguagem que est sendo definida. As gramticas gerais tm limitaes em relao sua aplicabilidade no contexto do estudo dos compiladores, devido s dificuldades que acarretam em seu tratamento, sendo que as linguagens de programao de interesse no exigem toda a generalidade que as gramticas gerais definidas acima so capazes de oferecer. Torna-se atraente o estudo de casos particulares, de aplicao mais restrita, porm suficiente para resolver os problemas levantados ao se projetar compiladores para linguagens de interesse. Sendo assim, dividimos as gramticas em quatro classes, que sero vistas a seguir. Classes Gramaticais

Classes GramaticaisConforme as restries impostas ao formato das produes de uma gramtica, a classe de linguagens que tal gramtica gera varia correspondentemente. A teoria mostra que h quatro classes de gramticas, capazes de gerar quatro classes correspondentes de linguagens, de acordo com a denominada Hierarquia de Chomsky. Gramticas com Estrutura de Frase ou Tipo 0 Gramticas Sensveis ao Contexto ou Tipo 1 Gramticas Livres de Contexto ou Tipo 2 Gramticas Regulares ou Tipo 3

Gramticas com Estrutura de Frase ou Tipo 0So aquelas s quais nenhuma limitao imposta. Obviamente, todo o universo das linguagens que se pode definir atravs dos mecanismos generativos definidos pelas gramticas corresponde exatamente ao conjunto das linguagens que esta classe de gramticas capaz de gerar. A esta classe de gramticas, a hierarquia de Chomsky classifica como sendo a das Gramticas com Estrutura de Frase ou

Tipo 0. Chamam-se linguagens do tipo 0 todas as linguagens que podem ser geradas por alguma gramtica do tipo 0. Para gramticas do tipo 0, as produes so todas da forma , (Vn U Vt)+, (Vn U Vt)*. Exemplo: G = ({A, B, C}, {a, b}, P, A) P: A BC BC CB Bb Ca L(G) = {ba, ab} Gramticas Sensveis ao Contexto ou Tipo 1

Gramticas Sensveis ao Contexto ou Tipo 1Se s regras de substituio for imposta a restrio de que nenhuma substituio possa reduzir o comprimento da forma sentencial qual a substituio aplicada, cria-se uma classe de gramticas ditas sensveis ao contexto. As gramticas que obedecem a estas restries pertencem, na hierarquia de Chomsky, ao conjunto das Gramticas Sensveis ao Contexto ou do Tipo 1. Chamam-se linguagens do tipo 1 todas aquelas que podem ser geradas por alguma gramtica do tipo 1. Note-se que todas as linguagens do tipo 1 podem ser geradas atravs de gramticas com estrutura de frase ou do tipo 0, embora o inverso no seja verdade. Para gramticas do tipo 1, as produes so todas da forma , com || =1} Gramticas Livres de Contexto ou Tipo 2

Gramticas Livres de Contexto ou Tipo 2Conceituam-se gramticas livres de contexto como sendo aquelas em que levantado o condicionamento das substituies impostas pelas regras definidas pelas produes. Este condicionamento eliminado impondo s produes uma restrio adicional, que restringe as produes forma geral onde A Vn, (Vn U Vt)* . Segundo a hierarquia de Chomsky, esta classe de gramticas classificada como Livre de Contexto ou do Tipo 2. Denominam-se linguagens do tipo 2 aquelas que podem ser definidas atravs de gramticas do tipo 2. Notar novamente a relao de incluso: toda gramtica ou linguagem do tipo 2 tambm do tipo 1, e portanto do tipo 0. Outra maneira de se representar as Gramticas Livres de Contexto atravs da Forma Normal de Backus. As Linguagem Livres de Contexto tambm podem ser reconhecidas pelos Autmatos Pilha. Exemplo 1: G = ({S}, {a, +, *, (, )}, P, S) P=SS*S SS+S S (S) Sa L(G) = conjunto das expresses aritmticas envolvendo *, +, ( ) e a. Um exemplo de cadeia formada por esta gramtica a * (a + a). Exemplo 2: G = ({S, A, B}, {a, b}, P, S) P : S aB | bA A a | aS | bAA B b | bS | aBB L(G) = { x Vt+ | x contm nmero de a's igual ao nmero de b's } Exemplo 3: Processo inverso: dada L(G), determinar G. L(G) = {0n12n0m | n = 0, m =0 } G= ({S, A, B}, {0, 1}, P, A) P: S AB A 0a11 | B 0B |

Exemplo 4: L(G) = {ambn | m 0, n 0 } G=({S, A, B}, {a, b}, P, S) P: S AB A aB | a B bB | b Obs.: Caso geral: Se S S | ento L(G) = Exemplo 5: L(G) = {anbn | n = 1} S aSb | ab Exemplo 6: G = ({E, T, F}, { i, +, -, *, /, **}, P, E) P=ET|E+T|E-T TF|T*F|T/F F i | F ** i (recursiva esquerda) i - i * i + i ** i sentena?

rvore Sinttica

Gramticas Regulares ou Tipo 3

Gramticas Regulares ou Tipo 3Aplicando-se mais uma restrio sobre a forma das produes, pode-se criar uma nova classe de gramticas, de grande importncia no estudo dos compiladores por possurem propriedades adequadas para a obteno de reconhecedores simples. Nesta classe de gramticas, as produes so restritas s formas seguintes: A a ou Ab onde A,B Vn, a Vt e b Vt U {} classe de gramticas assim definida d-se o nome de Gramticas Regulares ou do Tipo 3, que podem ser denotadas por Expresses Regulares. Denominam-se linguagens do tipo 3, na hierarquia de Chomsky, as linguagens que podem ser definidas atravs de alguma gramtica do tipo 3. Assim sendo, as gramticas do tipo 3 tambm podem ser classificadas como sendo dos tipos 2, 1 ou 0. Exemplo 1: G = ({S}, {a, b}, P, S) P = S aS Sb L(G) = {anb; n=0} Exemplo 2: G = ({S, A}, {a, b, c}, P, S) P = S aS | bA Ac L(G) = {anbc | n =0} Exemplo 3: G = ( {