FACULDADE LOURENÇO FILHO ENADE 2011 Prof. Ricardo Viana DATA: 01/10/2011 Algoritmos e Estruturas de Dados (Desenvolvimento e Complexidade de Algoritmos, Estruturas de Dados Lineares e Não Lineares, Pesquisa e Ordenação, Grafos). QUESTÃO 1 Um programador propôs um algoritmo não-recursivo para o percurso em pré-ordem de uma árvore binária com as seguintes características. - Cada nó da árvore binária é representado por um registro com três campos: chave, que armazena seu identificador; esq e dir, ponteiros para os filhos esquerdo e direito, respectivamente. - O algoritmo deve ser invocado inicialmente tomando o ponteiro para o nó raiz da árvore binária como argumento. - O algoritmo utiliza push() e pop() como funções auxiliares de empilhamento e desempilhamento de ponteiros para nós de árvore binária, respectivamente. A seguir, está apresentado o algoritmo proposto, em que λ representa o ponteiro nulo. Procedimento preordem (ptraiz : PtrNoArvBin) Var ptr : PtrNoArvBin; ptr := ptraiz; Enquanto (ptr ≠ λ) Faça escreva (ptr↑.chave); Se (ptr↑.dir ≠ λ) Então push(ptr↑.dir); Se (ptr↑.esq ≠ λ) Então push(ptr↑.esq); ptr := pop(); Fim_Enquanto Fim_Procedimento Com base nessas informações e supondo que a raiz de uma árvore binária com n nós seja passada ao procedimento preordem(), julgue os itens seguintes. I. O algoritmo visita cada nó da árvore binária exatamente uma vez ao longo do percurso. II. O algoritmo só funcionará corretamente se o procedimento pop() for projetado de forma a retornar λ caso a pilha esteja vazia. III. Empilhar e desempilhar ponteiros para nós da árvore são operações que podem ser implementadas com custo constante. IV. A complexidade do pior caso para o procedimento preordem() é O(n). Assinale a opção correta. (A) Apenas um item está certo. (B) Apenas os itens I e IV estão certos. (C) Apenas os itens I, II e III estão certos. (D) Apenas os itens II, III e IV estão certos. (E) Todos os itens estão certos. 1 QUESTÃO 2 Os números de Fibonacci constituem uma seqüência de números na qual os dois primeiros elementos são 0 e 1 e os demais, a soma dos dois elementos imediatamente anteriores na seqüência. Como exemplo, a seqüência formada pelos 10 primeiros números de Fibonacci é: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34. Mais precisamente, é possível definir os números de Fibonacci pela seguinte relação de recorrência: fib (n) = 0, se n = 0 fib (n) = 1, se n = 1 fib (n) = fib (n - 1) + fib (n - 2), se n > 1 Abaixo, apresenta-se uma implementação em linguagem funcional para essa relação de recorrência: fib :: Integer -> Integer fib 0 = 0 fib 1 = 1 fib n = fib (n - 1) + fib (n - 2) Considerando que o programa acima não reutilize resultados previamente computados, quantas chamadas são feitas à função fib para computar fib 5? (A) 11 (B) 12 (C) 15 (D) 24 (E) 25 QUESTÃO 3 Algoritmo ENADE2008 variaveis V[0..4] <- {2,0,4,3,1}:inteiro I,J,A : inteiro inicio para I <- 0 ate 3 passo 1 faca para J <- 0 ate 3-I passo 1 faca se (V[J] > V[J+1] ) entao A <- V[J] V[J+1] <- V[J] A <- V[J+1] fim se escreva V[0],V[1],V[2],V[3],V[4] fim para fim para fim algoritmo Com relação ao algoritmo acima, que manipula um vetor de inteiros, julgue os itens a seguir: I. Quando as variáveis I e J valerem, respectivamente, 0 e 1, a linha 13 apresentará a seqüência de valores 0,2,4,3,1. II. Quando as variáveis I e J valerem, respectivamente, 1 e 0, a linha 13 apresentará a seqüência de valores 0,2,3,1,4. III. Quando as variáveis I e J valerem, respectivamente, 1 e 2, a linha 13 apresentará a seqüência de valores 0,2,1,3,4. 2 Assinale a opção correta: (A) Apenas um item está certo. (B) Apenas os itens I e II estão certos. (C) Apenas os itens I e III estão certos. (D) Apenas os itens II e III estão certos. (E) Todos os itens estão certos. QUESTÃO 4 Algoritmo ENADE2008 variaveis varA, varB, varC: inteiro varF : real varS : literal varL : lógico inicio varS <- “1000” varA <- 4 varF <- 3.5 varC <- 0 varL <- VERDADEIRO se((varC < varA) E varL OU (varS > varC)) entao varB <- varF/varA senao varB <- varA/varC fim se fim algoritmo O código acima: (A) não apresenta erros de nenhum tipo. (B) apresenta erros de atribuição de tipo inválido, divisão por zero e expressão relacional inválida. (C) apresenta erros de atribuição de tipo inválido, divisão por zero e estrutura condicional. (D) apresenta erros de estrutura condicional e expressão relacional inválida. (E) apresenta somente erro de divisão por zero. 3 QUESTÃO 5 funcao busca(V[0..9] : inteiro, K : inteiro): inteiro variaveis C, F, K, M : inteiro Inicio F <- 9 [________________________] enquanto((V[M] <> K) ou (F > C)) [_________________________] se(K < V[M]) então F <- M – 1; senão [_________________________] fim enquanto se(V[M] <> K) então retorne(0) senão retorne(M) fim se fim O algoritmo representado pelo pseudocódigo acima está incompleto, pois faltam 3 linhas de código. A função busca desse algoritmo recebe um vetor ordenado de forma crescente e um valor a ser pesquisado. A partir disso, essa função verificará se o número armazenado no ponto mediano do vetor é o número procurado. Se for o número procurado, retornará o índice da posição do elemento no vetor e encerrará a busca. Se não for, a função segmentará o vetor em duas partes a partir do ponto mediano, escolherá o segmento no qual o valor procurado está inserido, e o processo se repetirá. A partir dessas informações, assinale a opção que contém os comandos que completam, respectivamente, as linhas 6, 8 e 12 do algoritmo. (A) (B) (C) (D) (E) C <- 0, M <- (C + F) / 2, C <- M + 1 C <- 1, M <- (C + F) / 2, C <- M - 1 C <- 0, C <- M + 1, M <- (C + F) / 2 C <- 1, C <- M + 1, M <- (C + F) / 2 C <- 1, M <- (C + F) / 2, C <- M + 1 QUESTÃO 6 Os métodos de projeto e análise de algoritmos são necessários para o desenvolvimento de algoritmos eficientes, pois eles permitem que se resolva problemas computacionais, reduzindo complexidade e tempo de execução. Acerca desses métodos, assinale a opção incorreta. (A) A abordagem de Divisão e Conquista propõe dividir o problema em vários subproblemas, resolvendo-os e combinando suas soluções para criar a solução final do problema original. (B) A Programação Dinâmica é uma técnica tipicamente aplicada a problemas de otimização em que pode haver várias soluções possíveis. (C) O método Guloso nem sempre encontra a solução ótima, mas faz sempre a melhor escolha momentânea. 4 (D) A Programação Dinâmica e o Método Guloso têm em comum o fato de que se aplicam a problemas em que se observa a existência de sobreposição de subproblemas, ou seja, subproblemas que se repetem. (E) Os métodos de Divisão e Conquista e Programação Dinâmica apresentam a mesma eficiência quando resolvem problemas combinando soluções de subproblemas dependentes uns dos outros. QUESTÃO 7 Suponha que T seja uma árvore AVL inicialmente vazia, e considere a inserçã dos elementos 10,20,30,5,15,2 em T, nesta ordem. Qual das sequências abaixo corresponde a um percurso de T em pré-ordem: (A) (B) (C) (D) (E) 10,5,2,20,15,30 20,10,5,2,15,30 2,5,10,15,20,30 30,20,15,10,5,2 15,10,5,2,20,30 QUESTÃO 8 Uma árvore binária é declarada em C como: onde esq e dir representam ligações para os filhos esquerdo e direito de um nó da árvore, respectivamente. Qual das seguintes alternativas é uma implementação correta da operação que inverte as posições dos filhos esquerdo e direito de um nó p da árvore, onde t é um apontador auxiliar. (A) (B) (C) (D) (E) t = p; p -> esq = p -> dir; p -> dir = p -> esq p -> dir = t; p -> esq = p -> dir; p -> dir = t p -> esq = p -> dir; t = p -> esp p -> dir = t t = p -> dir; p -> esq = p -> dir; p -> dir = t t = p -> dir p -> dir = p -> esq; p -> esq = t QUESTÃO 9 Em uma lista circular duplamente encadenada com n elementos, o espaço ocupado apenas pelos apontadores é (assuma que um apontador ocupa p bytes): (A) np (B) 2np (C) 4np (D) 6np (E) (np)2 5 QUESTÃO 10 Considere n chaves armazenadas: I. de maneira arbitrária suma lista encadeada simples, II. de maneira arbitrária Considere também as mesmas chaves III. armazenadas de maneira ordenada numa lista encadeada simples, IV. armazenadas de maneira ordenada numa lista encadeada dupla. Qual das alternativas preenche a seguinte tabela com a complexidade de busca no pior caso, em cada uma das situações I, II, III e IV descritas acima? (A) (B) (C) (D) (E) QUESTÃO 11 Em um heap com n vértices existem: (A) exatamente piso(n/5) folhas (B) aproximadamente log n folhas (C) não mais que piso(n/5) folhas (D) exatamente teto(n/2) folhas (E) não menos que 2n/3 folhas QUESTÃO 12 Considere as afirmativas: I. O modelo matemático de uma lista é a seqüência linear de itens, cuja principal propriedade estrutural é a posição relativa dos elementos dentro da seqüência. II. A fila e a pilha são consideradas casos especiais da lista III. Numa fila a inserção e a retirada são feitas no mesmo extermo. IV. Numa lista a inserção e a retirada podem ser feitas em qualquer posição. V. Numa pilha apenas a inserção pode ser feita em qualquer posição. Quais são as afirmativas verdadeiras? (A) somente I e III. (B) somente II, III e IV. (C) somente I, II e IV. (D) somente II, IV e V. (E) todas. 6 QUESTÃO 13 Considere as seguintes estruturas de dados: I. II. III. IV. Tabela hash Fila Árvore de pesquisa Pilha Qual ou quais das estruturas acima requer mais do que tempo médio constante para inserção de um elemento? (A) Somente I (B) Somente II (C) Somente III (D) Somente IV (E) Todas. QUESTÃO 14 Qual das seguintes expressões posfixas é equivalente à expressão infixa A+(B/C)*((DE)/F)? (A) ABC/-DE*F+/ (B) ABC/DE-/F+* (C) ABC/DE-F/*+ (D) ABC/D-EF*/+ (E) ABD/CE+/F-* QUESTÃO 15 Considere as seguintes definições de ordens de percurso de uma árvore binária: Considere a seguinte árvore binária: O percurso da árvore binária apresentada em: 7 Ordem A resulta em qual seqüência de visitas? (A) (B) (C) (D) (E) ABDCEKLMFIJGH ABCDEFGHIJKLM ABDCEKLMFGHIJ ABECDFKGILMHJ ABDCEFIJGHKLM QUESTÃO 16 Dada uma lista linear de n+1 elementos ordenados e alocados sequencialmente, qual é o número médio (número esperado) de elementos que devem ser movidos para que se faça uma inserção na lista, considerando-se igualmente prováveis as n+1 posições de inserção? (A) n/2 (B) (n+2)/2 (C) (n-1)/2 (D) n(n+3+2/n)/2 (E) (n+1)/2 QUESTÃO 17 Em uma estrutura de árvore binária de busca, foram inseridos os elementos "h","a","b","c","i","j", nesta seqüência. O tamanho do caminho entre um nó qualquer da árvore e a raiz é dado pelo número de arestas neste caminho. Qual o tamanho do maior caminho na árvore, após a inserção dos dados acima? (A) 2 (B) 6 (C) 4 (D) 5 (E) 3 QUESTÃO 18 Arvores binárias podem ser usadas para guardar e recuperar informações com número de operações proporcional à altura da árvore. Quais das seguintes figuras representam árvores binárias de altura balanceada ou do tipo AVL (Adelson-Velski e Landis): (A) Somente (I) e (IV) são árvores binárias AVL. (B) Somente (I) é árvore binária AVL. (C) Somente (I), (II) e (III) são árvores binárias AVL. (D) Somente (II) e (III) são árvores binárias AVL. (E) Todas (I), (II), (III) e (IV) são árvores binárias AVL. 8 QUESTÃO 19 Dado um conjunto C contendo n inteiros distintos, qual das seguintes estruturas de dados em memória principal permite construir um algoritmo para encontrar o valor máximo de C em tempo constante? (A) Um vetor não ordenado. (B) Um vetor ordenado. (C) Uma árvore binária de busca balanceada. (D) Uma lista encadeada simples ordenada em ordem crescente. (E) Uma árvore rubro-negra. QUESTÃO 20 Suponha que a tabela a seguir apresenta a freqüência de cada letra de um alfabeto em uma string. Quantos bits seriam necessários para representar essa string usando um código de Huffman? (A) 392 (B) 147 (C) 113 (D) 108 (E) Nenhuma das respostas anteriores. QUESTÃO 21 Um estudante de computação precisa resolver um problema bastante importante, que é executar as operações que estão descritas abaixo, cuja estrutura é uma pilha. Tão logo ele retire algum elemento desta pilha, estes deverão ser inseridos em uma fila, cuja entrada é pela esquerda e a saída, pela direita. Assinale a alternativa que contém a sequência correta de entrada dos elementos na fila. PUSH P PUSH E PUSH R PUSH T PUSH O POP POP PUSH S PUSH O PUSH L POP POP POP (A) S - O - L - T – O (B) O - T - R - E – P (C) P - E - R - T – O (D) O - T - L - O – S (E) P - O - R - L – S 9 QUESTÃO 21 Os algoritmos a seguir representam os três caminhamentos para árvores binárias. caminhamento(binário) se binário.esquerda ≠ NULL então caminhamento(binário.esquerda) escrever binário.valor se binário.direita ≠ NULL então caminhamento(binário.direita) caminhamento(binário) escrever binário.dado se binário.esquerda ≠ NULL então caminhamento(binário.esquerda) se binário.direita ≠ NULL então caminhamento(binário.direita) caminhamento(binário) se binário.esquerda ≠ NULL então caminhamento(binário.esquerda) se binário.direita ≠ NULL então caminhamento(binário.direita) escrever binário.valor Assinale a alternativa que contém os nomes dos 3 caminhamentos, respectivamente. (A) pré-ordem, pós-ordem, em-ordem (B) pré-ordem, em-ordem, pós-ordem (C) pós-ordem, pré-ordem, em-ordem (D) em-ordem, pré-ordem, pós-ordem (E) em-ordem, pós-ordem, pré-ordem QUESTÃO 23 A busca antecipada de instruções é uma técnica utilizada nos processadores dos microcomputadores atuais, de forma a acelerar a execução de um programa. As instruções são pré-carregadas da memória A) cache para a memória principal. B) cache para a memória virtual. C) principal para a memória virtual. D) principal para a memória cache. E) virtual para a memória principal. QUESTÃO 24 Considere as seguintes afirmativas sobre o algoritmo de pesquisa binária: I. a entrada deve estar ordenada II. uma pesquisa com sucesso é feita em tempo logarítmico na media III. uma pesquisa sem sucesso é feita em tempo logarítmico na media IV. o pior caso de qualquer busca é logarítmico As afirmativas corretas são: (A) Somente I e II. (B) Somente I, II e III. (C) Somente II e III. (D) Somente III e IV. (E) Todas as afirmativas estão corretas. 10 QUESTÃO 25 Seja V =< v1, . . . , vn > uma lista qualquer de inteiros distintos que se deseja ordenar em ordem não descrescente. Analise as seguintes afirmativas. I. Considere o algoritmo Quicksort. Suponha uma execução do algoritmo sobre V tal que a cada sorteio do pivot, a mediana do (sub)problema em questão é escolhida. Então, a complexidade dessa execução é O(n lg n). II. Considere o algoritmo Quicksort. Suponha uma execução do algoritmo sobre V tal que a cada sorteio do pivot, os dois subproblemas gerados têm tamanho 1/10 e 9/10 respectivamente do tamanho do (sub)problema em questão. Então, a complexidade dessa execução é O(n2) III. Considere o algoritmo Mergesort. A complexidade do pior caso do algoritmo é O(n lg n) e a complexidade do melhor caso (vetor já está ordenado) é O(n). IV. Considere o algoritmo Heapsort. A complexidade do pior caso do algoritmo é O(n lg n) e a complexidade do melhor caso (vetor já está ordenado) é O(n). V. Se para todo i, vi é O(n), então a complexidade do algoritmo Bucketsort é O(n). A partir dos dados acima, pode-se concluir que estão CORRETAS (A) apenas as afirmativas I e II. (B) apenas as afirmativas I, II e III. (C) apenas as afirmativas I, III e V. (D) apenas as afirmativas III, IV e V. (E) apenas as afirmativas I e V. 11