Questões de Algoritmos de Busca (Algoritmos e Estrutura de Dados)

Limpar Busca

Em uma agência bancária, as filas de atendimento são ordenadas da esquerda para a direita, e o gerente dessa agência percebeu a presença equivocada de um idoso, com a senha 52, na fila de atendimento não preferencial. Visando a sanar o equívoco, o gerente resolveu que, na primeira oportunidade, faria uma busca no sistema para saber se a senha 52 ainda estava ativa, indicando a presença do idoso na fila de atendimento não preferencial. Em caso de resposta positiva, procuraria o cliente para trocar sua senha por outra de atendimento preferencial; se não, apenas registraria o fato para posterior discussão no grupo de qualidade de atendimento.
Considerando o uso de um algoritmo de busca sequencial otimizado, partindo da esquerda para a direita, e as sequências hipotéticas das senhas da fila de atendimento não preferencial e suas regras de ordenação, segundo as quais quem está à esquerda é atendido antes de quem está à direita, o menor número de comparações para o gerente conhecer o resultado de sua busca ocorre em

  • A           Regras de ordenação                                        Sequência das senhas na fila de                                                                                          atendimento não preferencial
    Sequência ordenada crescentemente                              23; 45; 81; 97; 112; 138; 154
  • B           Regras de ordenação                                        Sequência das senhas na fila de                                                                                          atendimento não preferencial
    Sequência ordenada crescentemente                             13; 25; 37; 44; 52; 78; 83; 91
  • C           Regras de ordenação                                        Sequência das senhas na fila de                                                                                          atendimento não preferencial
    Sequência ordenada crescentemente                               17; 28; 32; 49; 67; 85; 94; 103
  • D           Regras de ordenação                                        Sequência das senhas na fila de                                                                                          atendimento não preferencial
    Sequência desordenada                                                         27; 95; 148; 117; 33; 59; 52
  • E           Regras de ordenação                                        Sequência das senhas na fila de                                                                                          atendimento não preferencial
    Sequência desordenada                                                        32; 48; 12; 55; 93; 27; 66

Desejam-se realizar buscas nas seguintes coleções de dados, representadas na linguagem Java:
I - Um array de 1.000 números inteiros ordenados de forma decrescente; II - Uma lista encadeada desordenada e alocada dinamicamente, cujos 1.000 nós contêm strings (uma string por nó); III - Uma lista encadeada, alocada dinamicamente, cujos 1.000 nós contêm números decimais (um número double por nó) ordenados de forma ascendente.
Levando-se em consideração a exequibilidade e a eficiência, quais métodos de busca devem ser empregados, respectivamente, em cada um dos três casos acima?

  • A I – sequencial; II – sequencial; III – binária
  • B I – binária; II – sequencial; III – sequencial
  • C I – binária; II – sequencial; III – binária
  • D I – sequencial; II – sequencial; III – sequencial
  • E I – sequencial; II – binária; III – binária
Suponha uma estrutura de dados do tipo vetor, a qual possui algumas centenas de elementos ordenados. Buscas por valores dos elementos desse vetor são constantes e, portanto, é necessário utilizar um método de busca eficiente. Das seguintes opções, qual seria o método de busca ou o algoritmo mais adequado?
  • A Busca linear.
  • B Busca binária.
  • C Bubble sort.
  • D Quick sort.
  • E Busca sequencial.

Considere uma lista ordenada, contendo 20 chaves únicas, na qual seja realizada uma busca binária. Assinale o número máximo de acessos necessários para encontrar uma determinada chave.

  • A 4
  • B 5
  • C 6
  • D 10
  • E 20

O seguinte trecho de código, implementado em Java, realiza a busca por uma chave x em um vetor de inteiros A, que encontra-se ordenado crescentemente. Os parâmetros p e r delimitam o subvetor A[p..r].
private static int busca(int[] A, int p, int r, int x) { if (p > r) return -1; else{ int q = (p + r) / 2; if(A[q] == x) return q; else if(A[q] > x) return busca(A, p, q-1, x); else return busca(A, q+1, r, x); } }
O trecho de código apresentado implementa uma busca

  • A hash recursiva.
  • B binária recursiva.
  • C pré-ordem recursiva.
  • D sequencial recursiva.