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:
- 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. - 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.
- 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]$.
- 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:
- O
key não está no array (caso de falha, retorna -1). - 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.