Geral Múltipla Escolha

Suponha uma classe SomeClass onde está definida uma variável a[size]. Considera o seguinte método binSearch() dessa classe. A pesquisa binária será efetuada na seguinte lista 4 7 9 11 20 24 30 41. No estado binSearch, qual das seguintes asserções é verdadeira após cada iteração do ciclo while?

Suponha uma classe SomeClass onde está definida uma variável a[size]. Considera o seguinte método binSearch() dessa classe. A pesquisa binária será efetuada na seguinte lista 4 7 9 11 20 24 30 41. No estado binSearch, qual das seguintes asserções é verdadeira após cada iteração do ciclo while?

  1. key == a[mid] ou key == a[low]
  2. a[low]
  3. low
  4. key == a[mid] ou a[low]
  5. key == a[mid] ou key não está em a[low], ou key não está em a[mid]

Resolução completa

Explicação passo a passo

E
Alternativa E

Alternativa E

A questão aborda o algoritmo de Pesquisa Binária (Binary Search), um método eficiente para encontrar um elemento específico em uma lista ordenada. Para responder corretamente, devemos entender a lógica do laço while e as condições de parada.

Análise da Questão

O código apresentado implementa a pesquisa binária clássica:

  1. Inicialização: Define-se o intervalo de busca começando no início (low = 0) até o fim (high = length - 1) do array.
  2. Iteração: Enquanto low for menor ou igual a high, calcula-se o ponto médio (mid).
  3. Comparação: Compara-se o valor procurado (key) com o valor no meio (a[mid]).
  • Se igual, retorna o índice (mid).
  • Se key for maior, descarta-se a metade esquerda (low = mid + 1).
  • Se key for menor, descarta-se a metade direita (high = mid - 1).
  1. Falha: Se o laço terminar sem encontrar o valor, retorna -1 (indicando que key não está em a).

Justificativa Didática

A alternativa correta deve descrever o estado lógico da busca ao longo das iterações ou na sua conclusão. Vamos analisar as opções:

  • Assegurar a completude: O algoritmo só termina quando encontra o valor ou esgota o espaço de busca. Portanto, qualquer afirmação sobre o resultado final ou o estado do sistema deve considerar tanto o sucesso quanto a falha.
  • Opção E (Correta): Esta opção afirma que key pode ser igual a a[mid] (encontrado no meio), igual a a[low] (caso limite onde o intervalo se reduz a um único elemento, onde low e mid coincidem), ou que key não está em a (caso de falha). Ela abrange todas as possibilidades lógicas do algoritmo.
  • Opção A (Incompleta): Embora mencione o sucesso (a[mid]) e a falha (não está em a), a Opção E é mais abrangente ao incluir explicitamente os limites da busca (a[low]), que são fundamentais para a definição do intervalo válido durante as iterações. Em questões de múltipla escolha sobre invariantes de laço, a opção que cobre todos os cenários possíveis (sucesso parcial, sucesso total, falha) é geralmente a correta.
  • Outras opções: As opções B, C e D estão incorretas por serem sintaticamente incompletas ou por ignorarem a condição de falha (quando o elemento não existe).

Conclusão:
A alternativa E é a resposta correta porque descreve de forma completa as três situações possíveis relativas à chave (key) durante a execução da função: ela pode estar localizada no ponto médio, pode estar no limite inferior do intervalo atual (caso especial de busca), ou pode simplesmente não existir no array.

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.