Busca Binária: Comprar Informação pela Metade
por Frank de Alcantara em 30/09/2026
- 1. Contar Antes de Programar: Complexidade, Restrições e Medição
- 2. A Máquina por Baixo do Algoritmo: Tipos, Cache e Desvios
- 3. Treino T01: Contando Antes de Codificar
- 4. Caixa de Ferramentas I: Tipos, Números e Trabalho em Tempo de Compilação
- 5. Caixa de Ferramentas II: Vetores, Matrizes, Vistas e Algoritmos
- 6. Treino T02: Pagar Uma Vez, Perguntar Sempre
- 7. Entrada e Saída de Alto Desempenho
- 8. Treino T03: Alimentando a Máquina
- 9. Busca Binária: Comprar Informação pela Metade
- 10. Ordenar por Comparação: o Limite, a Biblioteca e a Seleção
- 11. Ordenar sem Comparar: Contagem, Radix e a Escolha da Ferramenta
- 12. Treino T04: Comprar Informação
- 13. Somas de Prefixo e Arrays de Diferenças: Integrar e Derivar em Tempo Constante
- 14. Janelas que Deslizam: Deque Monotônico, Dois Ponteiros, Kadane e Sparse Table
- 15. Bits como Conjuntos: Máscaras, popcount e Bitsets de Muitas Palavras
- 16. Hash de Prefixo, Seleção em Três Partes e o Algoritmo de Mo
- 17. Treino T05: Intervalos com Orçamento
- 18. Pilhas, Filas, Heaps e Contêineres Associativos: o Estado que Sobrevive à Pergunta Seguinte
Ordenar e buscar são formas de comprar informação. A ordenação paga
A frase é famosa, e a implementação é famigerada. Knuth (1998) registra que a primeira busca binária foi publicada em 1946, mas a primeira versão correta para todos os tamanhos só apareceu em 1962. Bentley (2000) relata que, em cursos para programadores profissionais, cerca de noventa por cento não conseguiram escrever uma busca binária correta em algumas horas. O algoritmo é antigo, curto e continua ferindo programadores com uma regularidade impressionante. Os erros vêm quase sempre de três lugares: o cálculo do meio como (lo + hi) / 2, que pode sofrer overflow; a mistura de intervalos fechados com intervalos semiabertos; e o esquecimento do invariante do laço. Este artigo começa pelo invariante, porque o invariante é o algoritmo. O código é apenas a caligrafia.
O percurso tem três partes. A primeira constrói a busca binária a partir do invariante, deduz o número de comparações e apresenta as versões da biblioteca padrão. A segunda mede a busca no MSVC e mostra que a contagem de comparações, embora correta, esconde quase todo o custo quando o vetor sai do cache (memória pequena e rápida junto ao processador). A terceira leva a mesma ideia para fora dos vetores: em vez de procurar uma posição, a busca procura a fronteira de um predicado sobre o espaço das respostas possíveis, que é o uso mais poderoso da busca binária em competições.
Este artigo completo contém estratégias práticas e dados exclusivos reservados para nossos membros cadastrados.
Continuar com Google Acesso gratuito e instantâneo com sua conta Google(Updated: )