Geral Dissertativa

Considere o seguinte método binSearch() dessa classe: A pesquisa binária será efetuada na seguinte lista: a = [4, 7, 9, 11, 20, 24, 30, 41] Quantas iterações serão necessárias efetuar para determinar que 27 não está na lista?

Considere o seguinte método binSearch() dessa classe:

int binSearch(int key) {
  // Efetua uma pesquisa binária por uma chave numa array.
  // Pré-condição: A array a[0]...a[length-1] está ordenada
  // Pós-condição: Se key não está em v, então devolve -1.

  int low = 0;
  int high = length - 1;

  while (low <= high) {
    int mid = (low + high) / 2;
    if (a[mid] == key) {
      return mid;
    } else if (a[mid] < key) {
      low = mid + 1;
    } else {
      high = mid - 1;
    }
  }
  return -1;
}

A pesquisa binária será efetuada na seguinte lista:

a = [4, 7, 9, 11, 20, 24, 30, 41]

Quantas iterações serão necessárias efetuar para determinar que 27 não está na lista?

Resolução completa

Explicação passo a passo

Resumo da resposta

Esta questão solicita a simulação manual de um algoritmo de Busca Binária (Binary Search) sobre uma lista ordenada específica. O objetivo é contar quantas vezes o laço while será executado antes de concluir que o elemento procurado (chave 27) não existe na lista.

Análise do Algoritmo

O código apresentado implementa a busca binária clássica. As variáveis principais controlam as fronteiras da pesquisa:

  • low: índice inicial do intervalo de busca.
  • high: índice final do intervalo de busca.
  • mid: índice central calculado a cada iteração.

A condição de continuação do loop é while (low <= high). Enquanto isso for verdadeiro, uma nova iteração ocorre.

Dados Iniciais

  • Lista (a): [4, 7, 9, 11, 20, 24, 30, 41]
  • Comprimento (length): 8 (índices de 0 a 7)
  • Chave (key): 27

Simulação Passo a Passo

Vamos traçar a evolução das variáveis a cada iteração:

IteraçãolowhighCálculo de midValor em a[mid]Comparação com 27Ação Realizada
107(0+7)/2 = 3a[3] = 11$11 < 27$low passa a ser $3 + 1 = 4$
247(4+7)/2 = 5a[5] = 24$24 < 27$low passa a ser $5 + 1 = 6$
367(6+7)/2 = 6a[6] = 30$30 > 27$high passa a ser $6 - 1 = 5$

Verificação de Parada:
Após a 3ª iteração, temos low = 6 e high = 5.
A condição do loop é while (low <= high).
Como $6 \leq 5$ é falso, o loop encerra imediatamente e a função retorna -1.


Conclusão

O algoritmo precisou acessar três posições diferentes da memória (a[3], a[5] e a[6]) para reduzir o espaço de busca até esgotá-lo. Portanto, foram necessárias 3 iterações.

Resposta: Serão necessárias 3 iterações.

Tem outra questão para resolver?

Resolver agora com IA

Mais questões de Geral

Ver mais Geral resolvidas

Tem outra questão de Geral?

Cole o enunciado, tire uma foto ou descreva o problema — a IA resolve com explicação completa em segundos.