Você está na página 1de 24

UNIVERSIDADE FEDERAL DO ESPRITO SANTO - CEUNES

ALGORITMOS E FUNDAMENTOS DA TEORIA DE COMPUTAO LISTAS DE EXERCCIOS

Professor: Lus Otvio Rigo Alunos: Andr de Mattos Ferraz Eliezer de Souza da Silva Lucas Dias Serqueira Mateus Vieira Costa

Algoritmos e Fundamentos da Teoria de Computao Lista 01 1) Suponha que R = {(a; c), (c; e), (e; e), (e; b), (d; b), (d; d)}. Desenhe grafos orientados representando cada uma das seguintes relaes: a) R

b) R-1

c) R

R-1

d) R

R-1

2) Sejam R e S relaes binrias sobre A = {1, ... ,7} com as representaes grficas mostradas a seguir.

a) Indique se R e S so (i) simtricas, (ii) reflexivas e (iii) transitivas; b) b) Repita (a) para a relao R unio S. R No No No S Sim No No R S No Sim No

Simtrico Reflexivo Transitivo

3) Desenhe grficos orientados representando relaes dos seguintes tipos: a) Reflexiva, transitiva e anti-simtrica.

b) Reflexiva, transitiva e nem simtrica nem anti-simtrica.

4) Seja A um conjunto no-vazio, e que propriedades de R? Por definio (

seja o conjunto vazio. Quais so as

Reflexividade: R no reflexiva. Prova (por contradio): 1) , , por hiptese de R ser reflexiva 2) , , def de . 3) , , Particularizao Universal (PU) de 1 4) , , PU de 2 5) , , , conjuno 3 e 4 6) contradio Simetria: R simtrica. Prova (por contradio): 1) , , , , hiptese de contradio, R no simtrica 2) , , , , neg 1 3) , , def de . 4) , , , Particularizao Existencial (PE) de 2 5) , , , , conjuno 3 e 4 6) contradio Transitividade: R transitiva. Prova (por contradio): 1) , , , hiptese de contradio, R no transitiva 2) , , , Eq da implicao 1 3) , , 4) , PE 3

5) , DeMorgan 4 6) , Simplificao 5 7) , def de . 8) , conj 6, 7 9) contradio Anti-Simetria: R anti-simtrica. Prova (por contradio): 1) , , hiptese de contradio, R no anti-simtrica 2) , , , Eq da implicao 1 3) , , , neg 2 4) , PE 3 5) , DeMorgan 4 6) , Simplificao 5 7) , def de . 8) , conj 6, 7 9) contradio 5) Seja f: A -> B. Demonstre que a seguinte relao R de equivalncia em A : (a; b) somente se f(a) = f(b). Reflexiva: f(a) = f(a); Simtrica: f(a) = f(b) f(b) = f(a) Transitiva: f(a) = f(b) e f(b) = f(c) f(a) = f(c) aRb e bRc aRc 6) Seja R A x A uma relao binria, conforme definida abaixo. Em que casos R uma relao de ordem parcial? Em que casos R _e uma relao de ordem total? a) A = os inteiros positivos; (a, b) R se, e somente se, b divisvel por a. No ordem total por no apresentar a relao de totalidade sobre os inteiros: nem (2,3), nem (3,2) pertencem a R. (a,a) pertence a R, portanto reflexiva. Se a divisvel por b, ento a>b ou a=b, se temos aRb e bRa, significa que (a>b ou a=b) e (b>a ou b=a), ou seja a=b, portanto R anti-simtrico. A transitividade neste caso trivial. Portanto R uma ordem parcial. 7) Sejam R1 e R2 duas relaes de ordem parcial quaisquer sobre o mesmo conjunto A. Demonstre que R1 R2 uma relao de ordem parcial. Suponhamos e ordens parciais. , | , , - Reflexividade: , e , portanto , - Anti-Simetria Seja dois pares (x,y) e (y,x) pertencentes a . Comos eles pertencem a interseco de dois conjuntos eles pertencem aos conjuntos individualmente, ou seja, , , , , , , , . Como tanto quanto so antissimtricos, concluimos que x=y, o que prova que antissimtrico. - Transitividade: 1. , , hipotese , hipotese 2. , 3. , , simp 1 4. , , simp 1 R, se, e

5. 6. 7. 8. 9.

, , , , ,

, simp 2 , simp 2 , transitividade de R1, 3, 5 , transitividade de R2, 4, 6 , conj, 7,8 (c.q.d.)

8) a) Prove que, se S for uma coleo qualquer de conjuntos, ento RS = {(A;B) : A;B uma relao de ordem parcial. i) ii) Reflexividade A Rs A porque A A Anti-Simtrica A B e B A (A,B S) x A x B ou x B x A = B Rs anti-simtrica Transitividade A BeB C x A x B x B x C x A x C A C Rs transtiva

S, e A

B}

iii)

Rs uma relao de ordem parcial.


, , b) Seja S = . Desenhe um grafo orientado que represente a relao de ordem parcial RS definida em (a). Quais so os elementos mnimos de RS?

9) Em que circunstncias um grafo orientado representa uma funo? Uma funo pode ser definida como uma relao R com a seguinte propriedade. , , Ou seja, x s pode se relacionar (ou ser mapeado) a um e somente um elemento. Em termos do dgrafo que representa esta relao quer dizer que o grau de sada de todos os ns do dgrafo no mximo um.

10) Demonstre que qualquer funo de um conjunto finito para ele prprio contm um ciclo. Prova por induo no tamanho do conjunto. Seja A o conjunto e B = {f | f: A funes de A em A. i) A = {a}, card(A) = 1 Tem ciclo B={ {(a,a)} } ii) A = {a,b}, card(A) = 2 Tem ciclo B={ {(a,a),(b,b)}, {(b,a),(a,b)} } Suponha que card(A) = n e que B tenha n! funes de A em A, todas contendo ciclos. , ,, , ,, ! A} o conjunto das

iii)

Seja , 1 E as funes de A em A, pertencentes ao conjunto B, so feitas estendendo as funes do domnio A para . Seja f B, temos n+1 maneiras de estender f: A A essa funo para : . 1- Podemos fazer g: A A 2- Ou podemos trocar um elemento de f: tome ak A com f(ak) = aj, faremos a seguinte extenso. g: A A g(a) = f(a), se a A e a ak g(a) = a , se a Aea Aea ak a ,

g(a) = aj , se a

funes.

Repare que s tenho estas duas opes para gerar as funes de A = A U a , caso contrrio teramos elementos de A que no seriam cobertos por estas Afirmao1: Na construo (i) temos ciclos Prova: f: A -> A tem ciclos, e a construo (i) no alterou f, s adicionou g( a ) = a .

Afirmao2: Na construo (ii) temos ciclos. Neste caso h dois casos a considerar. a) Ak no pertence a um ciclo: o mesmo caso da afirmao 1. b) Ak pertence a um ciclo: neste caso aparentemente quebramos o ciclo, mas a transformao que fizemos mantm o ciclo adicionando um caminho indireto entra ak e aj. Isto completa a prova por induo.

Algoritmos e Fundamentos da Teoria de Computao Lista 02 1) Demonstre que os seguintes conjuntos so contveis: a) Unio de trs conjuntos contveis quaisquer, no necessariamente finitos ou disjuntos. Prova: A unio de conjuntos associativa. Ou seja, s preciso mostrar que a unio de dois conjuntos contveis quaisquer contvel. Um conjunto A contvel se ele finito (i.e : 1,2, , ), ou existe uma bijeo entre o conjunto A e . Fato: Se A e B so contveis tambm . Devemos dividir esta demonstrao em trs partes. i) A e B so finitos. Card(A)=n e card(B)=m, card( ) =n Seja 1,2, , , : e : , funes bijetivas respectivamente a A e B. Sem perda de generalidade supomos m>n e m-n>0. Vamos criar a funo g definida da seguinte forma : g, uma bijeo que mapeia os elementos da parte de B que no tem elementos em comum com A. construida como uma restrio da funo g, ou seja, continua sendo uma bijeo (o que prova que tambm finito). Iremos construir uma funo que mapeia todos os elementos de , esta funo mapeia inicialmente todos elementos de A, e depois inclui os elementos de B que no pertencem a A, usando a funo g. Seja : , , h uma bijeo, pela prpria construo, pois ela mapeia conjuntos disjuntos (A , B menos os elementos de A) usando funes bijees. O fato de h ser uma bijeo completa a prova de A unio B ser finito e portanto contvel para o caso que consideramos. Ii) A finitos e B infinitamente contvel. - para A(bijeo): : - para B(bijeo): : Seja : , g construido da mesma forma que no caso anterior, como uma restrio ao domnio de g, mas lembrando que este dominio infinito, ento uma restrio de um nmero finito (os elementos de A) no altera o domnio (ele continua sendo infinito) e a funo g continua sendo uma bijeo, pois no acrescentou novos elementos, s retirou alguns. Iremos construir a funo h como um mapeamente entre os naturais e . : , , h uma bijeo, pela prpria construo, como no item i). O fato de h ser uma bijeo completa a prova de A unio B ser infinitamente contvel.

iii) A e B infinitamente contveis. Sejam as bijees : e : Vamos construir mais uma vez g como uma restrio na imagem de g, tal que ela no contenha nenhum elemento que pertena a B e a A simultaneamente, funo esta que bijetora pelas mesmas razes dos itens anteriores. Prossigamos para a construo de h. Seja: : 2 2 1 Ou seja, dividimos o dominio de em nmeros pares e mpares, e fizemos cada um destes subconjuntos serem mapeados para A ou B\A. h bijetora, pois cada par mapeado em um de A, e cada mpar em um elemento de B que no pertence a A. Ou seja, com h cobre todo o conjunto . Portanto infinitamente contvel. Assim provamos que para trs conjuntos contveis quaisquer, a unio dos trs contvel, porque a unio de dois deles contvel e o resultado deste unio com o terceiro conjunto contvel tambm, ou seja, pela propriedade associativa a unio dos trs contvel sse a unio de dois deles . b) Unio de todos os conjuntos finitos de . Seja X o conjunto de todos os subconjuntos finitos de . | : eA Podemos visualizar X na seguinte tabela n Xn 0 1 1 , 2 ,, , 2 1,2 , 1,3 , , 1, , , 2,3 , ,

Podemos facilmente verificar o seguinte fato: se ento , para um n qualquer que no pertena a x. Fato 1: contvel (para cada n pertencente aos naturais) Prova: por induo contvel: trivial. - Suponha contvel e seja : Vamos construir uma funo : usando a funo f. Seja , ou seja k a ordem de um dado elemento (o k-simo) de . se ento Podemos gerar os elementos de usando os elementos de . , Reparem que f gera uma tabela , onde nenhum dos elementos so iguais (sem a diagonal principal), e portanto bijetora, por existe uma bijeo entre e . O prova que tambm contvel, terminando assim a prova por induo. e como acabamos de mostrar que para cada i, contvel, ento unio de Como vrios conjuntos contvel tambm contvel, ainda mais que estes so disjuntos.

2) Utilizando frmulas que envolvam somente operaes elementares apresente bijees explcitas para os seguintes pares de conjuntos: a. e os nmeros naturais mpares. : 2 1 b. e conjunto de todos inteiros. : 2 , 2 1 ,

bijetora. 0, 1, , , , 1 1, Vamos usar a funo anterior para gerar a bijeo de e , , , , n\k 1 2 3 4 5 1 0 2 5 10 14 2 1 4 8 13 19 3 3 7 12 18

c. e . Vamos construir uma funo :

1 1

4 6 11 17

5 10 16

Algoritmos e Fundamentos da Teoria de Computao Lista 03 1) Desenhe um fluxograma que corresponde a cada um dos seguintes programas: c) P2 = ({r1 : faa ; v_para r2}; r1).

d) Composies enquanto e at, em um mesmo programa.

e) Programa sem instruo alguma. No existe tal programa. f) Programa sem instruo de parada.

2) Caracterize e diferencie computao e funo computada. Uma computao um histrico do funcionamento de uma mquina especfica para um determinado programa, de acordo com um valor inicial. J uma funo computada, o resultado que foi obtido no final de uma computao sendo esta computao finita.

3) Defina computao de programas iterativos em uma mquina.

Seja M uma mquina e P um programa iterativo para a mquina M. Uma computao para o programa P em M uma cadeia de pares do tipo: (I0,V0)(I1,V1)(I2,V2) ... Sendo uma cadeia finita ou infinita, onde I0 o programa iterativo inicial e V0 o valor inicial da memria. Para cada (Ik,Vk), onde k={0,1,2,...}, F sendo uma operao, T sendo um teste e V, V1, V2 programas iterativos, temos: Caso: Ik = F;V Ento: (Ik+1,Vk+1) = (V,f(vk)) Caso: Ik = V;V1 (Seqencial) Ento (Ik+1,Vk+1) = (V;V1,Vk) Caso: Ik = (se T ento V seno V1);V2 (Condicional) Ento: (Ik+1,Vk+1) = (V;V2,vk) se t(vk) = verdadeiro = (V1;V2,vk) se t(vk) = falso Caso Ik = (enquanto T faa V);V1 Ento (Ik+1,Vk+1) = (V;(enquanto T faa V);V1,vk) se t(vk) = verdadeiro = (V1;at T faa V;V1,vk) se t(vk) = falso 4) Defina computao finita para programas iterativos. Mesma definio do exerccio anterior, porm considerando que a cadeia de pares finita. (I0,V0)(I1,V1)(I2,V2) ... (In,Vn) Sendo n o tamanho da cadeia.

5) Escreva um programa iterativo onde a computao seja infinita. enquanto( x = x ) faa V 6) Por que possvel afirmar que a computao de um programa monoltico em uma mquina, para um dado valor inicial da memria, determinstica? Dado um valor inicial, para uma mesma mquina, a computao no muda, ou seja, a seqncia de instrues executadas e os valores intermedirios de memria em vrias execues do programa no muda. 7) Traduza o programa recursivo definido abaixo em um programa iterativo. P R1 onde R1 def (se T ento F; R2 seno R1), R2 def G;(se T ento F;R1 seno ;) at T faa V enquanto T faa (F;G(se T ento (F;at T faa ) seno faa ))

8) Suponha que na definio de uma mquina, seja admitido funes parciais na especificao dos identificadores de operaes e testes. D a definio apropriada da funo computada por um programa em uma mquina em tal caso. Como as operaes e testes so funes parciais, estes no so definidos para alguns valores, fazendo-se necessrio mapear estas funes em algum smbolo (Exemplo |). Caso a computao termine e as operaes e testes esto definidos para todos os valores de memria, ento: <P,M>(X) = y(vn). Caso a computao entre em loop, a funo computada deve ser mapeada em um smbolo (Exemplo *). 9) Verifique se W1 e W2 definidos a seguir, so equivalentes fortemente. Programa Iterativo W1: enquanto T faa (F;(se T ento faa ; seno faa G)) Programa Iterativo W2: enquanto T faa (F; enquanto T faa (F); G)

10) Qual a importncia da relao de equivalncia forte de programas? A importncia se d pelo fato de podermos classificar programas diferentes em um mesmo conjunto de acordo com as funcionalidades. Alm disso, abstraindo o significado de cada funo ou teste, a mesma ordem de execuo ser observada.

Algoritmos e Fundamentos da Teoria de Computao Lista 04 1) Qual a importncia do estudo da Mquina de Turing na Cincia da Computao? Segundo a tese de Alonzo Church, percebemos que a Mquina de Turing o dispositivo computacional mais genrico possvel, capaz de processar qualquer funo. Como a Cincia da Computao visa o estudo das funes computveis, imprescindvel estudar a Mquina de Turing. 2) Sobre a Hiptese de Church: a) Qual seu signicado, implicaes e importncia na Teoria de Computao? A hiptese permitiu fazer uma equivalncia formal ao conceito informal de computao, ou seja, o conceito informal de computao pode ser formalizado utilizando a Mquina de Turing. Depois dessa formalizao foi possvel o desenvolvimento da Teoria de Computao. b) Por que ela chamada de Hiptese ao invs de Teorema de Church? Pelo fato de no ser possvel descrever matematicamente o conceito de computao, logo, no se pode ter uma prova formal.

3) Sobre no-determinismo: a) O que e quais suas principais caractersticas? No-determinismo a possibilidade de tomar alternativas diferentes para uma mesma entrada. No caso da Mquina de Turing, aps a leitura de um smbolo, permitido mais de um estado possvel. O resultado obtido pela mquina um conjunto de estados alternativos. b) Qual o seu efeito, em termos de poder computacional, nas mquinas apresentadas? O no-determinismo no acrescenta poder computacional, uma vez que uma Maquina de Turing no-determinstica pode ser simulada como uma Mquina de Turing determinstica. 4) Qual a diferena fundamental entre a Classe das Linguagens Recursivas e a das Linguagens Enumerveis Recursivamente? Qual a importncia de se distinguir essas duas classes? As linguagens recursivas so aquelas onde existe uma Mquina de Turing que reconhece a linguagem e sempre para (aceitando ou rejeitando todas as entradas). J uma linguagem enumervel recursivamente no necessita que a Mquina de Turing pare para todas as entradas, podendo entrar em loop para algumas. 5) Demonstre que a Classe de Linguagens Recursivas fechada para as operaes de unio, interseco e diferena. Demonstre inicialmente para a operao sobre duas linguagens recursivas. Aps, amplie a demonstrao para n linguagens recursivas (demonstre por induo em n).

Considerando as linguagens L1 e L2 que pertenam Classe das Linguagens Recursivas e uma Mquina de Turing M definida como: aceita(L) = L rejeita(L) = * - L loop(L) = (vazio) Unio: aceita(L1) aceita(L2) = L1 L2 = aceita(L1 L2) rejeita(L1) rejeita(L2) = (* - L1) (* - L2) = * - (L1 L2) = rejeita (L1 L2) loop(L1) loop(L2) = = Interseco: aceita(L1) aceita(L2) = L1 L2 = aceita(L1 L2) rejeita(L1) rejeita(L2) = (* - L1) (* - L2) = rejeita (L1 L2) loop(L1) loop(L2) = = Diferena: aceita(L1) aceita(L2) = L1 L2 = aceita(L1 L2) rejeita(L1) rejeita(L2) = (* - L1) (* - L2) = * - (L1 L2) = rejeita (L1 L2) loop(L1) - loop(L2) = - = Para a demonstrao para n linguagens, podemos usar o mtodo da induo matemtica onde a base para a induo a prpria demonstrao para duas linguagens. A hiptese de induo como se segue a seguir: (k = numero de linguagens) aceita(L1) ... aceita(Lk) = aceita(L1 ... Lk) rejeita(L1) ... rejeita(Lk) = rejeita (L1 ... Lk) loop(L1) ... loop(Lk) = Considerando o elemento k+1: (aceita(L1) ... aceita(Lk)) aceita(Lk+1) = aceita (L1 ... Lk Lk+1) (rejeita(L1) ... rejeita(Lk)) rejeita(Lk+1) = rejeita (L1 ... Lk Lk+1) (loop(L1) ... loop(Lk)) Lk+1 = Analogamente podemos demonstrar, por meio da induo matemtica, a validade para a interseco e a diferena. 6) Desenvolva Mquinas de Turing que aceitem as seguintes linguagens: a) L1 = {w | w tem o mesmo nmero de smbolos a e b}

b) L2 = {w | w o dcimo smbolo da direita para a esquerda a}

c) L4 = {w | w = anbn ou w = bnan}

d) L5 = {w | w = aibjck, onde ou i = j ou j = k}

7) Desenvolva Maquinas de Turing que processem as funes: a) Subtrao, definida por: m n, se m > n; 0, caso contrro. b) Fatorial de n, para n N 8) Elabore uma Mquina de Turing M sobre o alfabeto {a; b} tal que: ACEITA(M) = {w | w inicia com a e, aps cada a, existe pelo menos um b} LOOP(M) = {w | w ! ACEITA(M) e existe pelo menos um b entre dois a} REJEITA(M) = {a; b}* - (ACEITA(M) U LOOP(M)) 9) Desenvolva os programas, em Norma, que realizam as operaes abaixo nos inteiros: a) b) c) d) A <- B + C A <- B x C A <- B C A <- B / C

Algoritmos e Fundamentos da Teoria de Computao Lista 05

Pesquisar sobre variaes da Mquina de Turing: MT de Mltiplas Fitas (MTMF): uma MT que ao invs de ter somente uma fita e uma cabea de leitura, tem vrias k fitas, cada uma com sua cabea de leitura e seu alfabeto i, i {1,2,..., k}. A cada passo a mquina l um smbolo sob cada cabea e baseando-se neste k smbolos lido a mquina escreve um novo smbolo em cada fita, move a cabea de leitura para esquerda ou direito, podendo tambm permanecer no mesmo lugar (k k fitas so processadas por vez) e vai para um novo estado. Inicialmente a entrada escrita na primeira fita e as outras fitas devem estar em branco, e a medida que o processamento avana as outras fitas so utilizadas. Deste modo a funo de transio de MTMF recebe um estado e k smbolos lido e retorna um estado, k smbolos escritos e k direes (E,D ou P). Apesar de aparentemente mais poderosa que a MT de fita nica, a MTMF equivalente a uma MT de fita nica, pois podemos simular uma MTMF em uma MT simples e a MT simples um caso particular do MTMF. A ideia por trs da simulao de uma MTMF numa MT simples representar o contedo das k fitas em uma fita, dividindo esta nica fita em k espaos distintos e adicionando um smbolo de delimitador de fita #. Alm disso precisamos que o alfabeto desta nica fita contenha o alfabeto de todas as k fitas e precisamos manter um controle de onde se encontra cada cabea de fita virtual, fazemos isso utilizando um alfabeto de marcao para cada fita, que para cada smbolo de lido a mquina marca um equivalente em para dizer que a cabea da fita i est neste ponto. = # Fazendo a configurao inicial da primeira fita ter a entrada e as outras fitas virtuais estarem em branco e seguindo as regras da MTMF, mas apenas tomando o cuidado de escrever, ler e marcar as fitas virtuais, podemos simular cada passo da MTMF em uma MT simples, bastando que a cada passo na MT simples, passemos por cada fita virtual. MT No-Determinstica (MTND): uma MTND uma MT que permite que num dado ponto da computao a mquina possa seguir vrias possibilidades. Deste modo, o estado qi e o smbolo w lido no definem univocamente o prximo estado da mquina. : , A computao em uma MTND pode ser vista de duas maneiras, primeiro podemos pensar que a MTND toma sempre o melhor caminho que o leva a um estado de aceitao, a outra maneira de ver a computao pensar em uma rvores de busca, cuja funo objetivo o estado de aceitao, de modo que a cada ponto de bifurcao, caso um n folha da busca seja atingido e este n no o estado de aceitao, este ramo deixa de prosseguir, e se algum ramo encontrar um estado de aceitao ento a computao termina e este estado o estado final da computao. Como aconteceu no caso da MTMF, a MTND no tem um poder computacional maior que a MT simples, uma vez que podemos construir uma MT simples que pode simular o comportamento de uma MTND. Se colocarmos a questo como uma busca em rvore, podemos escolher uma representao para a configurao inicial da MTND e escrever na fita alm da string de entrada e atravs de uma estratgia de busca (por exemplo em profundida), alterar a configurao, utilizando as regras da MTND para gerar os filhos de cada configurao. Podemos fazer isso, gerando uma tupla para representar a configurao da MTND, codificar esta tupla em uma linguagem, e empilhar cada n representando uma configurao, at achar um estado de aceitao, ou retroceder cada vez que chego em estado final de no-aceitao, e fazer isso at terminar todas possibilidades. Enumerador: uma MT que est ligado a uma impressora anexa. Podemos imagin-lo como uma MT com duas fitas, uma fita de operao e outra de sada. O enumerador de uma linguagem L uma MT que iniciada com uma fita de trabalho em branco, roda para sempre e retorna na fita de sada todos e somente as strings em L.

Decisor: uma MT que decide se uma palavra w pertence ou no a uma linguagem L. Se esta mquina for no-determinstica devemos impor a restrio que ela pra para cada ramo da computao nodeterminstica.

Algoritmos e Fundamentos da Teoria de Computao Lista 06 1) Defina e exemplifique os seguintes tipos de anlise: a) Anlise de complexidade por tempo; b) Anlise de complexidade por espao. Para definir os conceitos de complexidade de tempo e complexidade de espao, vamos recorrer a uma mquina de Turing determinstica (DTM) M com uma fita. Para uma dada instncia x (x uma string de entrada) de um problema que M est programada para resolver, M executa timeM(x) movimentos (esquerda, direita) at chegar em um configurao de aceitao ou rejeio, que chamado de tempo de execuo. Para esta mesma instncia o total de clulas da fita que foram utilizadas para durante toda a computao spaceM(x), chamado de espao de trabalho. A anlise de complexidade tenta comparar diferentes categorias de DTM ou de algoritmos atravs das suas respectivas taxas de crescimentos das funes de complexidade de tempo e de espao. A funo de complexidade de tempo dada atravs do tamanho da entrada, ela pode ser definida da seguinte maneira : , max :| | , e similarmente podemos definir a funo de complexidade de espao, ou seja o mximo tempo de execuo dentre todos os tempos de execuo das strings de entrada com o mesmo comprimento. 2) Defina o que uma funo de complexidade de um algoritmo. Respondida na questo anterior. 3) Defina e exemplifique os seguintes termos: a) Ordem de complexidade de melhor caso. b) Ordem de complexidade de caso mdio. c) Ordem de complexidade de pior caso. Na anlise de complexidade no basta encontrarmos a funo de complexidade de um algoritmo, importa comparar esta funo com as funes de complexidade de outros algoritmos, esta comparao nem sempre trivial e nem sempre trivial encontrar a funo exata de complexidade propriamente dita, para isto so feitas anlises dos algoritmos adicionando possveis cenrios genricos para estes algoritmos. A anlise de pior caso, considera uma entrada n como uma certa estrutura tal que a MT ou o algoritmo dar mais passos possveis, ou em termos da funo de complexidade, ter o maior valor possvel para uma entrada de comprimento n. Na anlise de melhor caso, considerado o contrrio, a entrada deve ter uma estrutura tal, que para aquele comprimento de entrada o algoritmo pare o quanto antes, ou seja, tenha o menor tempo de execuo possvel para esta data entrada de comprimento n. Na anlise de caso mdio considera-se a mdia dos tempos de execuo de todas entradas com tamanho n.

4) Qual a relao entre a funo de complexidade e ordem de complexidade de um algoritmo? Uma maneira de analisar e fazer comparaes entre algoritmos atravs da anlise da ordem de crescimento assinttico de uma funo de complexidade. A funo de complexidade diz exatamente a complexidade de tempo ou espao para entradas de tamanho n, no entanto em

anlise de complexidade, interessante saber como esta funo se comporta a medida que o tamanho da entrada aumenta, ou seja o comportamento assinttico. A ordem de complexidade de uma funo de complexidade expressa este comportamento assinttico da funo de complexidade. Para a anlise de ordem de complexidade so usadas as notaes de Big-O, Littleo, Big-Omega, etc. 5) Sobre o crescimento de funes, defina os seguintes termos notacionais: a) Notao : Para funes no-negativas, f(n) e g(n), f(n) = (g(n)) se e somente se f(n) = O(g(n)) e f(n) = (g(n)). Isto quer dizer que que f(n) limitada superiormente e inferiormente pela mesma funo g(n) o comportamente de f(n) o mesmo no pior e melhor caso. b) Notao O: o mtodo formal de expresser o limite superior para o tempo de execuo de um algoritmo. a medida do maior tempo possvel que o algoritmo demoraria para terminar a execuo. Formalmente, para duas funes no-negativas, f(n) e g(n), se existe um inteiro n0 e uma constante c > 0 tal que para todos inteiros n > n0, f(n) cg(n), ento f(n) = O(g(n)). Graficamente, g(n) serve como um limite superior assimpttico para a curva de f(n). c) Notao : Dadas duas funes no-negativas, f(n) e g(n se existe um inteiro n0 e uma constante c > 0 tal que para todos inteiros n > n0, f(n) cg(n), ento f(n) = (g(n)). praticamente a mesma definio de O-Grande, exceto pelo "f(n) cg(n)", que faz de g(n) um limite inferior de f(n). Esta notao descreve o melhor caso que pode ocorrer na execuo de um algoritmo para um dado tamanho de entrada. d) Notao o: Para funes no-negativas, f(n) e g(n), f(n) = o(g(n)) se e somente se f(n) = O(g(n)), mas f(n) (g(n)). Isto representa uma verso de limite relaxado do O-Grande, que limita superiormente, mas no inferiormente. e) Notao : Para funes no-negativas, f(n) and g(n), f(n) = (g(n)) sse f(n) = (g(n)), mas f(n) (g(n)). Tal como o O-pequeno, ele equivalente ao Omega-grande. g(n) limite inferior relaxado de f(n); ele limita inferiormente, mas no superiormente.

6) Seja n o tamanho da entrada, sobre complexidade de algoritmos, defina os seguintes termos: Usaremos para neste caso a letra f para designar a funo de complexidade e a notao de Ogrande para a ordem de complexidade. a) Complexidade de tempo linear: f(n)=O(n), ou seja para uma entrada de tamanho n, dadas constantes a e b, b) Complexidade de tempo polinomial: Dado uma constante b qualquer, f(n)=O(nb), ou seja, dadas constantes a e b, + nb-2 ++a c) Complexidade de tempo sub-exponencial:

f(n) a.n+b. f(n) nb + nb-1

No existe uma definio precisa para complexidade sub-exponencial, duas definies so encontradas na literatura para este tipo de complexidade. (http://scottaaronson.com/blog/?p=394) (http://qwiki.stanford.edu/wiki/Complexity_Zoo:S#subexp) i) f(n)=O(2n^), 0<<1. i) f(n)= o(2n). d) Complexidade de tempo exponencial: f(n) = 2O(n), ou seja , para uma constante c f(n) 2cn. 7) Sejam os algoritmos de ordenao Mergesort, Heapsort, Quicksort, faa: a) Descreva o funcionamento destes algoritmos; b) Quais so suas respectivas complexidades de melhor caso, caso mdio e pior caso; d) Defina qual o melhor destes algoritmos, de acordo com sua funo de complexidade. Mergesort: Mergesort(Items[1,..,t]) := Se(t=1) Items[1] Seno IntercalaOrdenado(Mergesort(Items[1,,t/2]), Mergesort (Items[t/2+1,,t])) Funo de Complexidade : f(1)=a f(n)=2*f(n/2)+b*n=2*(2*f(n/4)+bn/2)+b*n=4*f(n/4)+bn+bn=4f(n/4)+2*bn=4*(2f(n/8)+bn/4)+2*b n=8f(n/8)+3bn=2i*f(n/2i)+i*bn, para algum i<=n f(n)= 2i*f(n/2i)+i*bn para 2i=n -> i=log2n temos f(n)=a*n+ b*n*log2n portanto f(n)=O(nlogn) Vale dizer que esta complexidade do Merge-Sort a mesma no pior, melhor e caso mdio, uma vez que o comportamento do algoritmo no muda muito com a estrutura da sequncia de entrada, ele sempre divide a sequncia no meio e sempre tem que percorrer no mnimo metade da lista ordenada na hora de fazer a intercalao. Heapsort: Estrutura Heap: O heap uma rvore binria semi-cheia que obedea a uma relao de ordem parcial entre cada pai e seus filhos. Por exemplo, um heap mximo, um heap que para todo n X,Y, se X=PAI(Y) ento XY. Esta estrutura pode ser representada em um vetor, usando o seguinte esquema: se vet[i]=X e X=PAI(Y) e X=PAI(Z), ento vet[2i]=Y e vet[2i+1]=Z. Heapify: Algoritmo que assume que um dado ramo X da rvore no est obedecendo a condio de heap. Caso a relao de ordem no seja satisfeita para um dos filhos de X, feito a troca entre um filho e um pai de modo a fazer com a condio do heap seja satisfeita. Esta verificao deve ser feita em seguida no ramo que corresponde ao filho que foi trocado. Se estamos no n i e o heap tem no mximo n elementos, vamos descer ns da rvore no pior caso, e no melhor caso nenhum n. No caso mdio: onde i+k o nvel (altura da rvore) e a conta pra quando j= 1 3 2 3 1 2
1

2 3

, .

2 3 A complexidade do caso mdio melhor que a complexidade do pior caso. Algoritmo Heapsort: O algoritmo se d em duas fases: a primeira a construo do heap, e a segunda a remoo do maior elemento O(1). A construo do heap se d percorrendo o vetor inteiro e chamando heapify(i), para cada elemento do vetor. A complexidade desta operao 0 !

Vale lembrar que 0

1 e portanto:

A segunda fase tem a complexidade fixa O(1) de remoo do elemento extremo e em seguida a chamada da funo heapify partindo do nvel 0. 0 2 3 1 1

Portanto a complexidade O(nlogn)

Você também pode gostar