Curso de Tecnologia em Sistemas de Computação Disciplina: Estrutura de Dados e Algoritmos Gabarito da AP1 - Segundo Semestre de 2016 Nome Assinatura - Observações: 1. Prova sem consulta e sem uso de máquina de calcular. 2. Use caneta para preencher o seu nome e assinar nas folhas de questões e nas folhas de respostas. 3. Você pode usar lápis para responder as questões. 4. Ao final da prova devolva as folhas de questões e as de respostas. 5. Todas as respostas devem ser transcritas nas folhas de respostas. As respostas nas folhas de questõesnão serão corrigidas. 1 1. (2,0) Ordene as funções de complexidade dadas em cada item, da assintoticamente menor para a maior. Exemplo: se as funções dadas forem n3 , n, n2 , sua resposta deve ser: n, n2 , n3 . (a) n2 , 3n log n, Resposta: 2 3 n, 1 3 2 2 n , 3 n. 3n log n, n2 , 1 3 2n (b) 23 n, 56 log n, 25, 2n . Resposta: 25, 56 log n, 2 3 n, 2n . 2. (2,0) É dada uma sequência S de sı́mbolos, onde cada sı́mbolo pode ser “e” ou “s”. É dada também uma fila implementada em um vetor F com 4 posições, que se encontra inicialmente vazio. A sequência S indica, da esquerda para a direita, o movimento de clientes na fila F . Cada sı́mbolo e indica a entrada de um novo cliente na fila, e cada sı́mbolo s indica a saı́da de um cliente da fila para ser atendido. Em cada item abaixo, você deve desenhar a fila F após a leitura de toda a sequência S, da esquerda para a direita. Exemplo: se S = e e e s e s, sua resposta deve ser F = [− − 3 4], isto é, o terceiro e o quarto clientes a chegar ainda estão aguardando na fila. (Cada sı́mbolo “−” indica uma posição vazia no vetor F ). Importante: você deve responder “overflow” ou “underflow”, caso ocorram. Exemplo: se S = e e e s e e e então ocorreria overflow ao ler o último sı́mbolo de S. (a) S = e s e s e e Resposta: F = [− − 34] (b) S = e e s s e s Resposta: F = [− − −−] (c) S = e e e s e e s e e Resposta: “overflow” (d) S = e e s s s Resposta: “underflow” 3. (2,0) É dada a lista L = (12, 23, 34, 45, 56, 67, 78, 89, 91, 105, 117, 126). (a) Determine a sequência correta de comparações que a BUSCA BINÁRIA efetua ao buscar a chave x = 90. Resposta: 1a. 2a. 3a. 4a. comparação: comparação: comparação: comparação: 90=67? 90=91? 90=78? 90=89? 2 (b) Quantas comparações a BUSCA BINÁRIA efetua no pior caso para uma lista de entrada com n elementos? Justifique. Resposta: No pior caso a BUSCA BINÁRIA efetua log n + 1 comparações, pois após cada comparação o número de elementos a serem considerados é reduzido pela metade. log n comparações nos conduzem no pior caso a um vetor com um único elemento, sendo uma última comparação necessária pa determinar se o elemento foi encontrado ou não. 4. (2,0) Considere o algoritmo de BUSCA na LISTA SIMPLESMENTE ENCADEADA (não ordenada). (a) Escreva este algoritmo. procedimento BUSCA-ENC(x, ant, pont) ANT:= PTLISTA PONT := λ PTR := PTLISTA↑.PROX enquanto PTR 6= λ faça se PTR↑.CHAVE 6= x então ANT := PTR PTR := PTR↑.PROX senão PONT := PTR PTR := λ (b) Determine as complexidades de melhor e pior caso deste algoritmo. Resposta: No melhor caso o elemento buscado encontra-se na primeira posição, portanto o algoritmo efetua O(1) passos no melhor caso. Por outro lado, no pior caso o algoritmo deverá percorrer todas as posições e portanto efetuará O(n) passos, um possı́vel cenário de pior caso é quando o elemento buscado não encontra-se na lista. 5. (2,0) Para os próximos dois itens, recorde que existem dois métodos clássicos para ordenação de listas lineares: a ORDENAÇÃO POR SELEÇÃO (OS) e a ORDENAÇÃO PELO MÉTODO DA BOLHA (OB). (a) Desenhe um vetor de 5 elementos que leve a OS a realizar o MAIOR número possı́vel de trocas de elementos. Resposta: No pior caso a ORDENAÇÃO POR SELEÇÃO efetua n − 1 trocas para um vetor com n posições. O vetor V = [5, 2, 1, 3, 4] é um exemplo de vetor com 5 posições para o qual a OS efetua 4 trocas. (b) Desenhe um vetor de 5 elementos que leve a OB a realizar o MAIOR número possı́vel de trocas de elementos. 3 Resposta: No pior caso a ORDENAÇÃO PELO MÉTODO DA BOLHA 2 efetua n 2−n trocas para um vetor com n. O vetor V = [5, 4, 3, 2, 1] é um exemplo de vetor com 5 posições para o qual a OB efetua 10 trocas. 4