Ciências da computação dia 174
Algoritmos de busca: pesquisa linear e binária
Durante nossa aula de hoje, exploramos dois algoritmos fundamentais para a busca de elementos em listas: a busca linear e a busca binária. Embora simples, esses algoritmos são a base para estruturas de dados mais complexas e são frequentemente cobrados em entrevistas técnicas e provas de ciência da computação.
1. O que é busca?
Busca é o processo de localizar um elemento específico dentro de um conjunto de dados. O conjunto pode ser um array, uma lista ligada, um arquivo ou qualquer outra estrutura. A eficiência da busca depende do algoritmo escolhido e da organização dos dados.
2. Busca Linear
A busca linear (ou busca sequencial) percorre cada elemento da lista até encontrar o alvo ou chegar ao final. É o algoritmo mais simples, e não requer que a lista esteja ordenada.
def busca_linear(lista, alvo):
for i in range(len(lista)):
if lista[i] == alvo:
return i
return -1
Análise de complexidade: No melhor caso (alvo é o primeiro elemento), a complexidade é O(1). Nos casos médio e pior (alvo não está na lista), é O(n), onde n é o número de elementos.
3. Busca Binária
A busca binária é muito mais eficiente, mas exige que a lista esteja ordenada. O algoritmo divide repetidamente a lista ao meio, comparando o alvo com o elemento central.
def busca_binaria(lista, alvo):
esquerda, direita = 0, len(lista) - 1
while esquerda <= direita:
meio = (esquerda + direita) // 2
if lista[meio] == alvo:
return meio
elif lista[meio] >< alvo:
esquerda = meio + 1
else:
direita = meio - 1
return -1
>
Análise de complexidade: Em cada iteração, o espaço de busca é reduzido à metade. Portanto, a complexidade é O(log n) tanto no caso médio quanto no pior caso. O melhor caso (alvo é o elemento central) é O(1).
4. Comparação de Desempenho
A tabela abaixo resume as complexidades:
| Algoritmo | Melhor Caso | Caso Médio | Pior Caso |
|---|---|---|---|
| Busca Linear | O(1) | O(n) | O(n) |
| Busca Binária | O(1) | O(log n) | O(log n) |
Para listas pequenas (n < 100), a diferença pode ser imperceptível. Porém, em listas grandes, a busca binária é exponencialmente mais rápida.
5. Vantagens e Desvantagens
- Busca Linear: Simples, funciona com dados não ordenados, mas lenta para listas grandes.
- Busca Binária: Muito rápida, mas exige ordenação prévia e acesso aleatório à lista.
6. Exemplo Prático
Vamos testar os algoritmos com uma lista de números:
numeros = [1, 3, 5, 7, 9, 11, 13, 15]
print(busca_linear(numeros, 7)) # 3
print(busca_binaria(numeros, 7)) # 3
print(busca_linear(numeros, 2)) # -1
print(busca_binaria(numeros, 2)) # -1
Ambos retornam o mesmo resultado, mas a busca binária é muito mais rápida para listas grandes.
7. Conclusão
Nesta aula, vimos que a escolha do algoritmo de busca depende do contexto. Se os dados estão desordenados, a busca linear é a única opção. Se estão ordenados e o acesso é indexado, a busca binária é preferível. Entender essas diferenças é fundamental para escrever programas eficientes.
Perguntas Frequentes
O que é necessário para a busca binária funcionar?
A lista deve estar ordenada e permitir acesso direto aos elementos (como arrays).
Qual a complexidade da busca linear no pior caso?
O(n), onde n é o tamanho da lista. Ocorre quando o alvo não está presente ou está no último elemento.
A busca binária pode ser usada em listas ligadas?
Não diretamente, pois listas ligadas não oferecem acesso aleatório em O(1). A busca binária perderia eficiência e poderia se tornar O(n log n) ou pior.
Para mais conteúdos como este, visite a página de Posts ou navegue pelas Tags do blog.