Algoritmos #06 - Algoritmos de busca

Ao trabalharmos com estruturas de dados, como lista e vetores, pode haver casos em que seja necessário verificar se determinado elemento existe em uma sequência. Embora algumas linguagens já tragam funções pré-estabelecidas para realizar esta tarefa, é possível que, em certos casos, tal funcionalidade tenha que ser implementada pelo próprio programador. Diante disso, foram criados os chamados "algoritmos de busca/pesquisa", cujo funcionamento será explanado a seguir.

Busca sequencial


A Busca sequencial é o mais simples algoritmo de pesquisa existente, o qual pode ser utilizado em qualquer vetor. Seu funcionamento consiste basicamente em percorrer toda a sequência (da esquerda para a direita), comparar os elementos da sequência à variável desejada e, caso ela esteja presente lá, retornar "verdadeiro", caso contrário, o algoritmo retornará "falso". 

Como na Busca sequencial existe a necessidade de que, no pior dos casos, todo o array seja percorrido, ela apresentará uma certa lentidão em vetores de tamanho grande e, portanto, não é indicada para tais situações.

- Exemplo de implementação em python:











Busca binária


Em razão dos problemas apresentados pela busca sequencial, surgiu a busca binária, um algoritmo consideravelmente mais eficiente e de mais difícil implementação, que utiliza do paradigma de "divisão e conquista" para varrer um vetor mais rapidamente. Para que a pesquisa binária funcione, é necessário que a sequência base esteja ordenada (em ordem alfabética ou crescente, por exemplo), por isso, é possível usar os algoritmos de ordenação, já apresentados no blog, antes da busca.

O algoritmo funciona da seguinte forma:
  1. Escolhe-se o valor x (aquele será procurado na sequência);
  2. Determina-se qual o elemento que está no meio da lista (m);
  3. Caso x == m, a pesquisa acaba, pois, o valor foi encontrado.
  4. Caso contrário:
  • Se x < m, o valor x deve estar à esquerda de m, na primeira metade da sequência (se ele existir). Agora a pesquisa será realizada apenas nessa parte da lista.
  • Se x > m, o valor x deve estar à direita de m, na segunda metade da sequência (se ele existir). Agora a pesquisa será realizada apenas nessa parte da lista.
O procedimento se repetirá até x seja encontrado ou a lista seja completamente percorrida. Como a lista é reduzida à metade em cada comparação, o tempo de busca é reduzido drasticamente.

- Exemplo de implementação em python:




Referências




Comentários

Postagens mais visitadas deste blog

Algoritmos #03 - Formas de representar um algoritmo

Estrutura de Dados #2 - Listas Encadeadas e Árvores.

Algoritmos #02 - Ada Lovelace e o primeiro algoritmo