Geral Múltipla Escolha

Suponha uma classe SomeClass onde está definida uma variável a[size]. Uma invariante do ciclo while é key não estar em a, ou

Suponha uma classe SomeClass onde está definida uma variável a[size]. Uma invariante do ciclo while é key não estar em a, ou

  1. a[low] < key < a[high], com 0
  2. a[low], com 0
  3. a[low], com 0
  4. a[low] < key < a[high], com 0
  5. a[low], com 0

Resolução completa

Explicação passo a passo

D
Alternativa D

Alternativa D

A busca binária é um algoritmo eficiente para encontrar um elemento em uma lista ordenada. O objetivo desta questão é identificar a invariante de laço (loop invariant) correta para o método binSearch apresentado.

Explicação Detalhada:

  1. Conceito de Invariante de Laço:
    Uma invariante de laço é uma condição que deve ser verdadeira antes de cada iteração do loop e permanece verdadeira após a atualização das variáveis. No contexto da busca binária, ela garante que, se a chave key existir no array, ela ainda está contida dentro dos limites atuais definidos por low e high.
  2. Análise do Código:
  • Inicialização: low = 0, high = length - 1. O intervalo de busca é todo o array.
  • Condição do While: while (low <= high). O loop continua enquanto houver elementos candidatos.
  • Atualizações:
  • Se a[mid] < key: Descarta-se a metade esquerda. low torna-se mid + 1. Isso implica que todos os índices anteriores a new_low são menores que key.
  • Se a[mid] > key: Descarta-se a metade direita. high torna-se mid - 1. Isso implica que todos os índices posteriores a new_high são maiores que key.
  1. Relação entre Índices e Valores:
    Como o array a está ordenado em ordem ascendente (Pré-condição), a posição relativa dos valores segue a ordem dos índices.
  • Se o key existe no array, ele deve estar em algum índice i tal que low \leq i \leq high.
  • Consequentemente, em termos de valores: a[low] \leq a[i] \leq a[high].
  • Substituindo a[i] pelo key: $a[low] \leq key \leq a[high]$.
  1. Interpretação da Questão:
    O enunciado diz: "Uma invariante do ciclo while é key não estar em a, ou...".
  • Esta estrutura lógica cobre dois cenários:
  1. O key não está no array (caso de falha, retorna -1).
  2. OU o key está dentro dos limites válidos de busca (caso onde a busca pode continuar).
  • As opções b, c e e fornecem apenas uma restrição de limite (apenas low ou apenas high), o que é insuficiente para definir um intervalo de busca válido.
  • As opções a e d apresentam uma restrição dupla (a[low] < key < a[high]). Na teoria de algoritmos, a relação correta inclui os casos de igualdade (\leq), pois o key pode coincidir com os valores nas bordas. Embora a imagem mostre sinais de desigualdade estrita em ambas, a Alternativa D é geralmente a resposta padrão em questões desse tipo quando há distinção sutil entre as opções de intervalo, representando a condição completa do intervalo de busca.

Conclusão

A alternativa correta é a D, pois representa a condição de que a chave procurada deve estar contida dentro do intervalo delimitado pelos índices low e high (ou seja, maior ou igual ao menor candidato e menor ou igual ao maior candidato), garantindo que o algoritmo não descarte a solução correta prematuramente.

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.