Você está na página 1de 7

CT-234

QUESTES DE PROVAS ANTIGAS


1) Preencha a tabela abaixo com ou : (log n) 3 2 6n + 12n + 12.log n + 3 4n + 3n.log n + log n

(n)

O(n log)

(n2)

o(n3)

2) Dada a rvore binria abaixo, escreva os seus percursos pr-ordem, in-ordem e ps-ordem.

30 15 5 10 20 35 50 40 55

70 60 65 80 85 90

3) Utilizando as funcionalidades de uma pilha (top, push, pop e isEmpty), escreva um algoritmo que leia um nmero inteiro positivo e imprima a sua correspondente representao binria.

4) Dado o algoritmo recursivo abaixo, calcule o seu tempo exato de execuo.


Rec(n) { if (n==1) return 1; else return Rec(n-1) + Rec(n-1) + Rec(n-1) + 1; }

Importante: considere que as operaes bsicas (multiplicaes, subtraes, comparaes, etc.) gastam tempo constante.

5) Prove por induo: 5n+1 + 2.3n + 1 divisvel por 8, para n 0.

6) William G. Horner sugeriu uma maneira alternativa de exprimir polinmios. Por exemplo, o polinmio p(x) = 3x3+8x2-4x+9 teria o seguinte formato de Horner: p(x) = 9+x(-4+x(8+x.3)). Dado um polinmio de grau n, calcule o nmero de multiplicaes e adies necessrias para calcul-lo: a) atravs da sua expresso convencional; b) atravs do formato de Horner.

7) Escreva algoritmos recursivos que recebam como parmetro um nmero inteiro x e calculem o polinmio p(x) = akxk, 0 k n: a) atravs da sua expresso convencional; b) atravs do formato de Horner. Suponha que os coeficientes ak estejam armazenados em um vetor de dimenso n+1.

8) Descreva detalhadamente o que um heap. D um exemplo.

9) Explique as ideias do algoritmo QuickSort e calcule a ordem do pior caso.

10) Explique as ideias do algoritmo MergeSort e calcule a ordem do pior caso.

11) Descreva os passos da ordenao crescente do algoritmo RadixSort para os seguintes nmeros: 454, 901, 15, 23, 188, 901, 0, 675, 227, 6.

12) D um exemplo de funo que seja simultaneamente: a) O(n2) e (log2n) b) (log n) e o(n) c) (n) e (n3) d) o(2n) e (n50) e) O(n2) e (n.log n) Se em algum caso no existir tal funo, explique por qu.

13) Foi visto que uma fila de prioridades (de mximo) uma estrutura com as seguintes funcionalidades: Max(), ExtractMax(), Insert(x) e Modify(k,x). Tambm vimos que pode ser eficientemente implementada com um heap. Por outro lado, se quisssemos implement-la com uma lista ligada, explique como elaboraria essas 4 funcionalidades (basta um pseudocdigo superficial), e qual seriam as suas complexidades de tempo.

14) Sem utilizar o comando de repetio for(;;), escreva um algoritmo recursivo que calcule o produto de duas matrizes quadradas A e B de ordem n, armazenando o resultado numa matriz C. Suponha que essas matrizes sejam variveis globais, e que C esteja inicialmente zerada.

15) O produto interno de dois vetores n-dimensionais u = (u1, ..., un) e v = (v1, ..., vn) definido como ui.vi. Escreva um algoritmo recursivo que, dados dois vetores n-dimensionais, calcule o seu produto interno.

16) Explique para que serve uma rvore AVL. D um exemplo de aplicao prtica.

17) Prove por induo matemtica: 2n < n!, para n > 3.

18) Suponha que um dado vetor de n elementos seja formado por 4 subsequncias ordenadas, cujos comprimentos so desconhecidos. Veja um exemplo a seguir, onde n = 13 (as setas indicam a ordenao): 57 32 -21 32 45 98 98 233 202 -12 45 67 109

Para vetores desse estilo, descreva um eficiente algoritmo de ordenao que seja timo. Justifique.

19) Calcule as complexidades de tempo e de espao do algoritmo Rec(n) abaixo.


Rec(n) { if (n==1) return 1; else return 3*Rec(n-1) + Funcao(n); } Funcao(n) { for (i=0; i<n; i++) for(j=i; j>0; j--) v[i,j] = 4*i*i+j; return v[n-1,n-1]; }

Importante: a) Considere que as operaes bsicas (multiplicaes, subtraes, comparaes, etc.) gastam tempo constante. b) O vetor v tem dimenses [0..n-1, 0..n-1] e uma varivel global.

20) O algoritmo abaixo realiza a busca binria de chave em um vetor v de ndices 0 a N-1, ordenado crescentemente:
int PesquisaBinaria (int v[], int chave, int N) { int inf, sup, meio; inf = 0; sup = N-1; while (inf <= sup) { meio = (inf+sup)/2; if (chave == v[meio]) return meio; else if (chave < v[meio]) sup = meio - 1; else inf = meio + 1; } return -1; /* no encontrado */ }

Com o uso de recorrncias, demonstre que a sua complexidade de pior caso O(log N). Observao: Basta considerar o caso em que N potncia de 2.

21) Dado um vetor no ordenado de tamanho n, apresente um algoritmo que encontre o maior e o menor elementos, mas realizando somente 3n/2 comparaes.

22) Suponha um vetor de n posies cuja primeira metade est em ordem crescente. Para completar a ordenao desse vetor, os elementos da segunda metade so inseridos na parte ordenada, um a um, utilizando-se busca binria. Essa ordenao pode ser terminada em tempo O(n.log n)? Justifique.

23) Prove por induo que uma rvore binria completa com n folhas tem altura log2 n.

O grafo abaixo ser utilizado nas trs prximas questes.

a 1 e 2

b 5

c 4

4 3

d 2

2 3

h 1

24) Atravs do Algoritmo de Dijkstra, encontre o caminho mnimo entre os vrtices h e a. Deixe indicado os passos que seguiu.

25) Atravs do Algoritmo de Tarjan, encontre as componentes fortemente conexas. Deixe indicados os passos que seguiu.

26) Atravs do Algoritmo de Kruskal ou de Prim, encontre a rvore geradora de custo mnimo. Deixe indicado os passos que seguiu. Importante: ignore a orientao dos arcos.

27) Escreva um algoritmo diviso-e-conquista para encontrar o valor mximo do vetor A[1..n]. Calcule a complexidade deste algoritmo.

28) Atravs de programao dinmica, escreva um algoritmo que, dado n, monte uma matriz de ordem n com os valores do tringulo de Pascal. Calcule a complexidade deste algoritmo. Exemplo para n = 6: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1

29) Monte o autmato de busca do padro bacabacb.

30) D a classificao de Flynn (1966) e descreva em que consistem cada um dos seus itens. Explique qual a nomenclatura atual equivalente.

31) Dado o texto Faturei com folga na prova de complexidade de algoritmos e o padro algo, indique (e justifique) o nmero de comparaes que os algoritmos abaixo realizam at encontrarem esse padro no texto: a) Knuth-Morris-Pratt; b) Boyer-Moore.

32) Considere o digrafo abaixo:

1 4 6 5 8

10

a) Supondo armazenamento por listas de adjacncias, onde os vrtices esto em ordem crescente, aplique o algoritmo de Tarjan a partir do vrtice 7, classificando os arcos em 4 conjuntos diferentes: rvore, Avano, Retorno e Cruzamento. Algum desses conjuntos ficou vazio? Por qu? b) Encontre uma ordenao topolgica para ele, caso exista. Justifique.

33) Escreva a matriz de incidncias do digrafo da questo anterior. 34) Ainda para o mesmo digrafo, desconsidere as orientaes das arestas e aplique a variante do algoritmo de Tarjan a partir do vrtice 1 para encontrar seus vrtices e arestas de corte.

35) Atravs do algoritmo de programao dinmica visto em aula, encontre a maior subsequncia comum de <AACGTGGCCTA> e <CACGTTCCA>.

36) Dado o texto Esta prova mais longa que complicada e o padro cada, indique (e justifique) o nmero de comparaes que os dois algoritmos abaixo realizam at encontrarem esse padro no texto: a) Knuth-Morris-Pratt; b) Boyer-Moore. Importante: considere os caracteres de espao presentes no texto.

37) Em aula foi apresentada uma implementao do algoritmo de Prim que utiliza uma estrutura de heap. Se ao invs dessa estrutura utilizssemos uma lista ligada, na qual os vrtices fossem mantidos em ordem crescente de custo, qual seria a complexidade de tempo do algoritmo? Justifique.

38) Um determinado algoritmo sequencial tem complexidade de tempo O(n2). Um aluno elaborou a seguinte paralelizao escalvel desse algoritmo, onde p o nmero de processadores: Complexidade de tempo Intervalo de processadores O(n2/p + log n) 0 < p < log n O(n/p + log2 n) log n p < n 2 O(n /p) n p n2 A partir desses resultados, possvel verificar se o aluno cometeu algum erro? Qual? Explique.

39) Atravs de algum algoritmo visto em aula, encontre uma ordenao topolgica para o digrafo abaixo. Indique os passos que seguiu.
2 4 12 1 5 2 3 1 11 6 4 13 1 8 3 1 5 6 9 8 7 7

40) Para o digrafo da questo anterior, encontre as distncias mnimas a partir do vrtice 1 utilizando o algoritmo de Dijkstra. Indique os passos que seguiu.

41) Ainda nesse mesmo digrafo, desconsidere a orientao dos arcos e encontre a rvore geradora de custo mnimo. Para isso, escolha o algoritmo de Prim ou de Kruskal, e indique os passos que seguiu.

42) A partir do algoritmo de Tarjan visto em aula, classifique os quatro tipos de arestas do digrafo abaixo. Comece a explorao a partir do vrtice i. Considere armazenamento em ordem alfabtica.
i a b c

43) Com o algoritmo de Tarjan, encontre as componentes fortemente conexas do digrafo anterior. Considere armazenamento em ordem alfabtica.

44) Como possvel saber se o mtodo guloso funciona ou no na resoluo de um determinado problema? Explique.

45) Dado o texto abaixo, encontre uma codificao de Huffman: AABCCDAABEAEDBCCEEAAA

46) Dada o produto de matrizes abaixo, simule o algoritmo de programao dinmica que encontra a melhor parentizao: P = M1 . M2 . M 3 . M4 . M5 Respectivas dimenses das matrizes Mi: (2x3), (3x7), (7x8), (8x4), (4x1).

47) Calcule o produto 34 x 1729 atravs do algoritmo de Karatsuba. Importante: basta simular apenas o primeiro nvel de recurso.

48) Para grafos esparsos (com pouqussimas arestas), qual a melhor estrutura de armazenamento? Justifique. E para grafos densos?

49) Aps a aplicao do algoritmo de Dijkstra em um grafo, constatou-se que a distncia entre alguns pares de vrtices era infinita. Se todas as arestas desse grafo tm custos positivos, o que se pode afirmar sobre ele? Justifique.

50) Dado um digrafo, indique como seria possvel encontrar um dos seus eventuais ciclos atravs do algoritmo de Tarjan.