QUESTÕES DE PROVAS ANTIGAS

Documentos relacionados
Lista de Exercícios de CES-11 CTA - ITA - IEC

Busca Binária. Aula 05. Busca em um vetor ordenado. Análise do Busca Binária. Equações com Recorrência

Projeto e Análise de Algoritmos

Classes, Herança e Interfaces

Lista 1 - PMR2300. Fabio G. Cozman 3 de abril de 2013

Técnicas de projeto de algoritmos: Indução

Edital de Seleção 053/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

1. O que é a eficiência assintótica de um algoritmo. Explique com suas palavras.

Edital de Seleção 032/2016 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Edital de Seleção 023/2018 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

UNIVERSIDADE DE SÃO PAULO INSTITUTO DE CIÊNCIAS MATEMÁTICAS E DE COMPUTAÇÃO Departamento de Ciências de Computação

AVALIAÇÃO DE CONHECIMENTO ESPECÍFICO

Análise e Complexidade de Algoritmos

Árvores. Fabio Gagliardi Cozman. PMR2300 Escola Politécnica da Universidade de São Paulo

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

Algoritmo de Dijkstra Estudo e Implementação

Projeto e Análise de Algoritmos Aula 4: Dividir para Conquistar ou Divisão e Conquista ( )

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches

Busca em Memória Primária Estrutura de Dados II

1. Se v é um vetor, qual a diferença conceitual entre as expressões v[70] e v+70? [2 ponto]

Lista 1. 8 de abril de Algorithms: Capítulo 0, exercícios 1 e 2. Tardos: Todos exercícios do cap 2 do livro texto, exceto 7 e 8 letra b.

Estruturas de Dados, Análise de Algoritmos e Complexidade Estrutural. Carlos Alberto Alonso Sanches

Projeto e Análise de Algoritmos

INF1010 Lista de Exercícios 2

PLANO DE DISCIPLINA DISCIPLINA: Análise de Algoritmos

MAC121 ALGORITMOS E ESTRUTURAS DE DADOS I 2O. SEMESTRE DE 2017

Grafos - Introdução. Pedro Ribeiro 2014/2015 DCC/FCUP. Pedro Ribeiro (DCC/FCUP) Grafos - Introdução 2014/ / 32

Prova Didática Grafos: Árvores Geradoras e Caminhos Mínimos, Análise de Complexidade

ANÁLISE DE ALGORITMOS

Centro Federal de Educação Tecnológica de Minas Gerais Programa de Pós-Graduação em Modelagem Matemática e Computacional

Algoritmos de pesquisa

ICET CURSO: Ciência da Computação e Sistemas de Informação (Estrutura de Dados) Estudos Disciplinares Campus: Data: / / Nome:

Estruturas de Dados 2

Árvores. Thiago Martins, Fabio Gagliardi Cozman. PMR2300 / PMR3201 Escola Politécnica da Universidade de São Paulo

ALGORITMOS E ESTRUTURAS DE DADOS CES-11 Prof. Paulo André Castro Sala 110 Prédio da Computação IECE - ITA

Grafos. Exemplo de árvore geradora mínima. Notas. Notas. Notas. Notas. Árvores espalhadas mínimas. Como construir uma árvore geradora miníma

Ordenação Externa. Ordenação Externa. Ordenação Externa. Ordenação Externa

5. Algoritmos de Ordenação

Universidade Federal de Mato Grosso do Sul. Lista de Exercícios 2

Demonstração. Relação invariante chave. Implementações do algoritmo de Prim. Implementação grosseira

Análise e Síntese de Algoritmos. Revisão CLRS, Cap. 7-10

Mergesort. Aula 04. Algoritmo Mergesort. Divisão e Conquista. Divisão e Conquista- MergeSort

ANÁLISE DE ALGORITMOS (INF 1721)

TEORIA: 60 LABORATÓRIO: 0

INF111 Programação II Aulas 11, 12, 13 Ordenação

Otimização em Grafos

Divisão e conquista. Eficiência de divisão e conquista

ORDENAÇÃO POR INTERCALAÇÃO

Universidade de São Paulo

DAINF - Departamento de Informática

Teoria dos Grafos Aula 8

BCC202 - Estrutura de Dados I

Solução de Recorrências

Projeto e Análise de Algoritmos Aula 8: Algoritmos Gulosos (DPV 5; CLRS 4)

ALGORITMOS em linguagem C

ANÁLISE DE ALGORITMOS (INF 1721)

Programação Estruturada

Análise de Algoritmos Algoritmos de Ordenação

Algoritmos de Ordenação

Marcelo Keese Albertini Faculdade de Computação Universidade Federal de Uberlândia

Revisão: Tipo Abstrato de Dados Recursividade

1 Elementos Básicos da Linguagem C Parte 1: Revisão da Linguagem C

Fabio G. Cozman, Thiago Martins 2017

Algoritmos de Ordenação: QuickSort

Edital de Seleção 024/2017 PROPESP/UFAM. Prova de Conhecimento. Caderno de Questões

Análise e Complexidade de Algoritmos

ESTRUTURA DE DADOS E ALGORITMOS HEAPS E LISTAS DE PRIORIDADES

Grafos: Busca. SCE-183 Algoritmos e Estruturas de Dados 2. Thiago A. S. Pardo Maria Cristina

Análise e Complexidade de Algoritmos

PUC-Rio Departamento de Informática Prof. Marcus Vinicius S. Poggi de Aragão Período: Horário: 4as-feiras de 13 às 16 horas - Sala 520L

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB

Transcrição:

CT-24 QUESTÕES DE PROVAS ANTIGAS ) Preencha a tabela abaixo com Î ou Ï: ω(log n) Θ(n) O(n log n) Ω(n 2 ) o(n ) 6n + 2n 2 + 2.log n + 4n + n.log n + log n 2) Dada a árvore binária abaixo, escreva os seus percursos pré-ordem, in-ordem e pós-ordem. 0 70 5 50 60 85 5 0 20 5 40 55 65 80 90 ) Utilizando as funcionalidades de uma pilha (top, push, pop e isempty), escreva um algoritmo que leia um número inteiro positivo e imprima a sua correspondente representação binária. 4) Dado o algoritmo recursivo abaixo, calcule o seu tempo exato de execução. Rec(n) { if (n==) return ; return Rec(n-) + Rec(n-) + Rec(n-) + ; Importante: considere que as operações básicas (multiplicações, subtrações, comparações, etc.) gastam tempo constante. 5) Prove por indução: 5 n+ + 2. n + é divisível por 8, para n 0. 6) William G. Horner sugeriu uma maneira alternativa de exprimir polinômios. Por exemplo, o polinômio p(x) = x +8x 2-4x+9 teria o seguinte formato de Horner: p(x) = 9+x(-4+x(8+x.)). Dado um polinômio p(x) de grau n e um parâmetro x, calcule o número de multiplicações e adições necessárias para avaliá-lo: a) através da sua expressão convencional; b) através do formato de Horner.

7) Escreva algoritmos recursivos que recebam como parâmetro um número inteiro x e calculem o polinômio p(x) = akx k, 0 k n: a) através da sua expressão convencional; b) através do formato de Horner. Suponha que os coeficientes ak estejam armazenados em um vetor de dimensão n+. 8) Descreva detalhadamente o que é um heap. Dê um exemplo. 9) Explique as ideias do algoritmo QuickSort e calcule a ordem do pior caso. 0) Explique as ideias do algoritmo MergeSort e calcule a ordem do pior caso. ) Descreva os passos da ordenação crescente do algoritmo RadixSort para os seguintes números: 454, 90, 5, 2, 88, 90, 0, 675, 227, 6. 2) Dê um exemplo de função que seja simultaneamente: a) O(n 2 ) e Ω(log 2 n) b) ω(log n) e o(n) c) Θ(n) e Ω(n ) d) o(2 n ) e Ω(n 50 ) e) O(n 2 ) e ω(n.log n) Se em algum caso não existir tal função, explique por quê. ) Foi visto que uma fila de prioridades (de máximo) é uma estrutura com as seguintes funcionalidades: Max(), ExtractMax(), Insert(x) e Modify(k,x). Também vimos que pode ser eficientemente implementada com um heap. Por outro lado, se quiséssemos implementá-la com uma lista ligada, explique como elaboraria essas 4 funcionalidades (basta um pseudocódigo superficial), e qual seriam as suas complexidades de tempo. 4) Sem utilizar o comando for(;;) (e nenhum outro comando de repetição), 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 variáveis globais, e que C esteja inicialmente zerada. 5) O produto interno de dois vetores n-dimensionais u = (u,..., un) e v = (v,..., vn) é definido como ui.vi. Escreva um algoritmo recursivo que, dados dois vetores n-dimensionais, calcule o seu produto interno.

6) Explique para que serve uma árvore AVL. Dê um exemplo de aplicação prática. 7) Prove por indução matemática: 2 n < n!, para n >. 8) Suponha que um dado vetor de n elementos seja "tetratônico", isto é, seja formado por 4 subsequências ordenadas, cujos comprimentos são desconhecidos. Veja um exemplo a seguir, onde n = (as setas indicam a ordenação): 57 2-2 2 45 98 98 2 202-2 45 67 09 Para vetores desse estilo, descreva um algoritmo de ordenação que seja ótimo. Justifique. 9) Calcule as complexidades de tempo e de espaço do programa abaixo, cujo corpo principal consiste apenas na chamada de Rec(n): Rec(n) { if (n==) return ; return *Rec(n-) + 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-,n-]; Importante: a) Considere que as operações básicas (multiplicações, subtrações, comparações, etc.) gastam tempo constante. b) O vetor v tem dimensões [0..n-, 0..n-] e é uma variável global. 20) O algoritmo abaixo realiza a busca binária de chave em um vetor v de índices 0 a N-, ordenado crescentemente: int PesquisaBinaria (int v[], int chave, int N) { int inf, sup, meio; inf = 0; sup = N-; while (inf <= sup) { meio = (inf+sup)/2; if (chave == v[meio]) return meio; if (chave < v[meio]) sup = meio - ; else inf = meio + ; return -; /* não encontrado */ Com o uso de recorrências, demonstre que a sua complexidade de pior caso é Θ(log N). Observação: Basta considerar o caso em que N é potência de 2.

2) Dado um vetor não ordenado de tamanho n, apresente um algoritmo que encontre o maior e o menor elementos, mas realizando no máximo n/2 comparações. 22) Suponha um vetor de n posições cuja primeira metade está em ordem crescente. Para completar a ordenação desse vetor, os elementos da segunda metade são inseridos na parte ordenada, um a um, utilizando-se busca binária. Essa ordenação pode ser terminada em tempo O(n.log n)? Justifique. 2) Prove por indução que uma árvore binária completa com n = 2 k folhas tem altura k = log2 n. O grafo abaixo será utilizado nas três próximas questões. a b 5 4 c d 2 5 4 2 2 e f g 2 h 24) Através do Algoritmo de Dijkstra, encontre o caminho mínimo entre os vértices h e a. Deixe indicado os passos que seguiu. 25) Através do Algoritmo de Tarjan, encontre as componentes fortemente conexas. Deixe indicados os passos que seguiu. 26) Através do Algoritmo de Kruskal ou de Prim, encontre a árvore geradora de custo mínimo. Deixe indicado os passos que seguiu. Importante: ignore a orientação dos arcos. 27) Escreva um algoritmo divisão-e-conquista para encontrar o valor máximo do vetor A[..n]. Calcule a complexidade deste algoritmo.

28) Através de programação dinâmica, escreva um algoritmo que, dado n, monte uma matriz de ordem n com os valores do triângulo de Pascal. Calcule a complexidade deste algoritmo. Exemplo para n = 6: 2 4 6 4 5 0 0 5 29) Monte o autômato de busca do padrão bacabacb. 0) Dê a classificação de Flynn (966) e descreva em que consistem cada um dos seus itens. Explique qual é a nomenclatura atual equivalente. ) Dado o texto Faturei com folga na prova de complexidade de algoritmos e o padrão algo, indique (e justifique) o número de comparações que os algoritmos abaixo realizam até encontrarem esse padrão no texto: a) Knuth-Morris-Pratt; b) Boyer-Moore. 2) Considere o digrafo abaixo: 2 0 9 5 4 8 a) Supondo armazenamento por listas de adjacências, onde os vértices estão em ordem crescente, aplique o algoritmo de Tarjan a partir do vértice 7, classificando os arcos em 4 conjuntos diferentes: Árvore, Avanço, Retorno e Cruzamento. Algum desses conjuntos ficou vazio? Por quê? b) Encontre uma ordenação topológica para ele, caso exista. Justifique. 6 7 ) Escreva a matriz de incidências do digrafo da questão anterior. 4) Ainda para o mesmo digrafo, desconsidere as orientações das arestas e aplique a variante do algoritmo de Tarjan a partir do vértice para encontrar seus vértices e arestas de corte.

5) Através do algoritmo de programação dinâmica visto em aula, encontre a maior subsequência comum de <AACGTGGCCTA> e <CACGTTCCA>. 6) Dado o texto Esta prova é mais longa que complicada e o padrão cada, indique (e justifique) o número de comparações que os dois algoritmos abaixo realizam até encontrarem esse padrão no texto: a) Knuth-Morris-Pratt; b) Boyer-Moore. Importante: considere os caracteres de espaço presentes no texto. 7) Em aula foi apresentada uma implementação do algoritmo de Prim que utiliza uma estrutura de heap. Se ao invés dessa estrutura utilizássemos uma lista ligada, na qual os vértices fossem mantidos em ordem crescente de custo, qual seria a complexidade de tempo do algoritmo? Justifique. 8) Um determinado algoritmo sequencial tem complexidade de tempo O(n 2 ). Um aluno elaborou a seguinte paralelização escalável desse algoritmo, onde p é o número de processadores: Complexidade de tempo Intervalo de processadores O(n 2 /p + log n) 0 < p < log n O(n/p + log 2 n) log n p < n O(n 2 /p) n p n 2 A partir desses resultados, é possível verificar se o aluno cometeu algum erro? Qual? Explique. 9) Através de algum algoritmo visto em aula, encontre uma ordenação topológica para o digrafo abaixo. Indique os passos que seguiu. 2 5 6 7 4 2 9 7 2 5 4 6 8 8 40) Para o digrafo da questão anterior, encontre as distâncias mínimas a partir do vértice utilizando o algoritmo de Dijkstra. Indique os passos que seguiu. 4) Ainda nesse mesmo digrafo, desconsidere a orientação dos arcos e encontre a árvore geradora de custo mínimo. 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 exploração a partir do vértice i. Considere armazenamento em ordem alfabética. i a b c h g d f e 4) Com o algoritmo de Tarjan, encontre as componentes fortemente conexas do digrafo anterior. Considere armazenamento em ordem alfabética. 44) Como é possível saber se o método guloso funciona ou não na resolução de um determinado problema? Explique. 45) Dado o texto abaixo, encontre uma codificação de Huffman: AABCCDAABEAEDBCCEEAAA 46) Dada o produto de matrizes abaixo, simule o algoritmo de programação dinâmica que encontra a melhor parentização: P = M. M2. M. M4. M5 Respectivas dimensões das matrizes Mi: (2x), (x7), (7x8), (8x4), (4x). 47) Calcule o produto 4 x 729 através do algoritmo de Karatsuba. Importante: basta simular apenas o primeiro nível de recursão. 48) Para grafos esparsos (com pouquíssimas arestas), qual é a melhor estrutura de armazenamento? Justifique. E para grafos densos? 49) Após a aplicação do algoritmo de Dijkstra em um grafo, constatou-se que a distância entre alguns pares de vértices era infinita. Se todas as arestas desse grafo têm custos positivos, o que se pode afirmar sobre ele? Justifique. 50) Dado um digrafo, indique como seria possível encontrar um dos seus eventuais ciclos através do algoritmo de Tarjan.