A busca binária é uma forma rápida de encontrar um valor alvo em uma lista ordenada. Você verifica o item do meio, descarta metade dos valores restantes e repete. Se a lista não estiver ordenada, essa lógica não funciona.

Em uma lista em ordem crescente, a regra é simples: se o valor do meio for menor que o alvo, procure à direita; se for maior, procure à esquerda. Como o intervalo continua diminuindo pela metade, a busca binária roda em tempo O(logn)O(\log n).

Como a busca binária funciona em uma lista ordenada

Use esta lista ordenada:

[3,7,12,18,24,31,39,45,52][3, 7, 12, 18, 24, 31, 39, 45, 52]

Suponha que o alvo seja 3131.

Comece com o intervalo completo. O valor do meio é 2424. Como 31>2431 > 24, tudo à esquerda de 2424 pode ser descartado, então a busca continua em

[31,39,45,52][31, 39, 45, 52]

Agora o valor do meio é 3939. Como 31<3931 < 39, tudo à direita de 3939 pode ser descartado, então o intervalo passa a ser

[31][31]

Agora o valor do meio é 3131, então a busca para. A ideia importante não é só que o alvo foi encontrado. Em duas comparações, o intervalo de candidatos caiu de 99 valores para 11.

Por que a busca binária é O(logn)O(\log n)

Cada comparação elimina cerca de metade dos candidatos restantes. Depois de um passo, restam cerca de n/2n/2 itens. Depois de dois passos, restam cerca de n/4n/4. Depois de kk passos, o tamanho restante é aproximadamente

n2k\frac{n}{2^k}

A busca termina quando essa quantidade é aproximadamente 11, então o número de passos satisfaz

2kn2^k \approx n

Aplicando log2\log_2 nos dois lados, obtemos

klog2nk \approx \log_2 n

É por isso que a busca binária escala bem. Uma busca linear pode precisar de até nn verificações, mas a busca binária só precisa de verificações suficientes para continuar dividindo o intervalo pela metade.

Exemplo de código de busca binária

Aqui está uma versão iterativa padrão em Python:

Precisa de ajuda com um problema?

Envie sua pergunta e receba uma solução verificada, passo a passo, em segundos.

Abrir GPAI Solver →