MC3305 - Algoritmos e Estruturas de Dados II Prova 01 – 07/07/2015 – Diurno RA: NOME: Instruções para a prova (leia antes de começar): • A prova tem a duração de 1h45min. • É proibido o uso de qualquer celular, calculadora ou recurso de comunicação. • As respostas podem ser feitas a lápis ou caneta (desde que legíveis). • Responda as perguntas em ordem. 1. Dada uma matriz Anxm de inteiros considere os seguintes algoritmos baeados em comparações para encontrar o maior elemento: (a) Acha-se o máximo de cada linha, armazenando-se os resultados em um vetor, e depois acha-se o máximo do vetor. (b) Acha-se o máximo de cada coluna, armazenando-se os resultados em um vetor, e depois acha-se o máximo do vetor. supondo-se que n<m, qual deles realiza menos comparações? Justifique (4 pontos). 2. Uma empresa deseja comprar um software para resolver sistemas lineares. Existem no mercado quatro softwares para tal tarefa com custos operacionais diferentes. Seja n o tamanho da entrada para o sistema. - ExtremeLS: O(5(n^3)/2 + 2n/3) - Lumaster: O((n^3)/3 - (n^2)/4 + n/3) - superQR: O(2(n^3)/3 + n/2 - n/4) - DonkeyShot: O((n^4)/9 + n) Do ponto de vista de análise assintótica, qual software deveria ser escolhido? Justifique sua resposta. (4 pontos) 3. O Professor Progresso encontrou um algoritmo de ordenação baseado em comparações que gasta tempo O(n log(sqrt(n)). Considerando-se o limitante inferior para o tempo de ordenação, isso é possível? Justifique detalhadamente. (4 pontos) 4. Todo algoritmo de ordenação parcial visto em aula faz uso de estruturas auxiliares (por exemplo, vetores adicionais)? Justifique detalhadamente. (4 pontos) 5. Suponha que os nós de uma árvore tem a seguinte estrutura (5 pontos) : struct cel { int chave; int conteudo; struct cel *esq; struct cel *dir; }; typedef struct cel no; Escrever, usando a linguagem C/C++, uma função que permita percorrer em nível uma árvore binária. Assinatura: void percorrerArvore(no *r) 6. Analise uma árvore T que armazena 100.000 elementos. Quais são o pior e o melhor casos em relação à altura de T das seguintes árvores (5 pontos): - T é uma árvore binária completa; - T é uma árvore AVL. Justifique detalhadamente. 7. Escrever um algoritmo de exclusão (eliminação/remoção) de nós em árvores AVL. Apresente diagramas que exemplifiquem as operações. Obs. Pode descrever seu algoritmo em pseudocódigo. (4 pontos) Boa Prova! MC3305 - Algoritmos e Estruturas de Dados II Prova 01 – 07/07/2015 – Noturno RA: NOME: Instruções para a prova (leia antes de começar): • A prova tem a duração de 1h45min. • É proibido o uso de qualquer celular, calculadora ou recurso de comunicação. • As respostas podem ser feitas a lápis ou caneta (desde que legíveis). • Responda as perguntas em ordem. 1. Dada uma matriz Anxm de inteiros considere os seguintes algoritmos baeados em comparações para encontrar o maior elemento: (a) Acha-se o máximo de cada linha, armazenando-se os resultados em um vetor, e depois acha-se o máximo do vetor. (b) Acha-se o máximo de cada coluna, armazenando-se os resultados em um vetor, e depois acha-se o máximo do vetor. supondo-se que n<m, qual deles realiza menos comparações? Justifique (4 pontos). 2. Uma empresa deseja comprar um software para resolver sistemas lineares. Existem no mercado quatro softwares para tal tarefa com custos operacionais diferentes. Seja n o tamanho da entrada para o sistema. - ExtremeLS: O(5(n^3)/2 + 2n/3) - Lumaster: O((n^3)/3 - (n^2)/4 + n/3) - superQR: O(2(n^3)/3 + n/2 - n/4) - DonkeyShot: O((n^4)/9 + n) Do ponto de vista de análise assintótica, qual software deveria ser escolhido? Justifique sua resposta. (4 pontos) 3. Todo algoritmo de ordenação em tempo linear visto em aula faz uso de estruturas auxiliares, além do vetor de entrada? Justifique detalhadamente (ao todo foram tratados 3 algoritmos. (4 pontos) 4. Descreva um algoritmo em que, dado um vetor v[0,..,n-1] de n elementos, permita ordenar os elementos no intervalo v[a,..,b]. Para 0 <= a <= b <= n-1. Qual a complexidade computacional em termos de número de comparações entre elementos? Obs. Não é permitido ordenar todos os elementos do vetor. Pode descrever seu algoritmo em pseudocódigo. (4 pontos) 5. Suponha que os nós de uma árvore tem a seguinte estrutura (5 pontos): struct cel { int chave; int conteudo; struct cel *esq; struct cel *dir; }; typedef struct cel no; Escrever, usando a linguagem C/C++, uma função que decida se uma dada árvore binária é ou não é de busca. Assinatura: int EhArvoreBinariaDeBusca(no *r) 6. Quais são as diferenças/semelhanças entre Árvores binárias, ABBs, AVLs, e estrutura de heap? Todos os algoritmos baseadas nessas estruturas tem complexidade proporcional a O(log(n)), onde n é o número de elementos da estrutura? Obs. Apresente uma tabela comparativa entre as operações mais comuns consideradas nessas estruturas. (5 pontos) 7. Escrever um algoritmo de exclusão (eliminação/remoção) de nós em árvores AVL. Apresente diagramas que exemplifiquem as operações. Obs. Pode descrever seu algoritmo em pseudocódigo. (4 pontos) Boa Prova!