Conteudo Web 02-02
Conteudo Web 02-02
Conteudo Web 02-02
de busca
Você sabia que seu material didático é interativo e multimídia? Isso significa que
você pode interagir com o conteúdo de diversas formas, a qualquer hora e lugar.
Na versão impressa, porém, alguns conteúdos interativos ficam desabilitados.
Por essa razão, fique atento: sempre que possível, opte pela versão digital. Bons
estudos!
Os algoritmos computacionais são desenvolvidos e usados para resolver os mais diversos problemas. Algoritmos
de busca, nesse universo, como o nome sugere, resolvem problemas relacionados ao encontro de valores em uma
estrutura de dados.
Busca sequencial
Código Explicação
Fonte: Shutterstock.
Saiba mais Mesmo quando um dos elementos não estiver na lista, todos eles devem ser
visitados. Os elementos da lista podem já estar dispostos em uma sequência
ordenada, ou não. Para cada um dos casos, haverá um comportamento
diferenciado em termos de tempo de execução do algoritmo.
No exemplo de algoritmo de busca sequencial que considera um vetor de entrada com números desordenados.
Temos uma estrutura de repetição “while”.
Linha 5 do código
A estrutura de repetição “while” permitirá percorrer a lista e comparar o elemento procurado com o
elemento que está na posição da lista, nesse caso, enquanto a posição for menor que o tamanho da lista e o
elemento não for encontrado.
Linha 6 do código
Na linha 6 do código, a estrutura condicional “if”, “else” traz a condição para encontrar ou não o elemento do
vetor – no caso, se a posição da lista corresponde ao elemento procurado (valor), será exibido True
(verdadeiro), se não corresponder, haverá um incremento e o próximo elemento será visitado na sequência
da lista.
Linha 13 do código
Na linha 13 é mostrado um vetor com 8 elementos (0 a 7 elementos). E, na linha 14, é buscado o elemento 5
na lista. Como o elemento não está na lista, observe que todas posições serão percorridas, razão pela qual
todos os elementos da lista serão visitados.
Linha 14 do código
Na linha 14, temos um teste em que se busca o elemento de valor 15. Nesse caso, quatro elementos da lista
serão percorridos até que se encontre o valor 15.
Para testar o comportamento desse algoritmo de busca sequencial vamos acessar o código com o Python Tutor.
Para testar o comportamento desse algoritmo vamos acessar o código com o Python Tutor.
Fonte: Shutterstock.
A lógica é a seguinte:
4. Se for maior, então a busca acontecerá na metade superior da sequência (a inferior é descartada), se não for
maior, a busca acontecerá na metade inferior da sequência (a superior é descartada).
5. Repete os passos: 1, 2, 3, 4.
Atenção: Veja que o algoritmo, ao encontrar o valor central de uma sequência, a divide em duas partes, o que
justifica o nome de busca binária.
A figura seguinte ilustra o funcionamento do algoritmo, na busca pelo número 14 em uma certa sequência
numérica.
Busca binária
Veja que o algoritmo começa encontrando o valor central, o qual chamamos de m1. Como o valor buscado não é o
central, e é maior que o elemento do meio da lista, a busca, então, passa a acontecer na metade superior. Dado o
novo conjunto, novamente é localizado o valor central, o qual chamamos de m2, que também é diferente e menor
do valor buscado. Mais uma vez a metade superior é considerada e, ao localizar o valor central (m3), agora sim o
valor procurado, então o algoritmo encerra.
Para testar o comportamento desse algoritmo de busca binária vamos acessar o código com o Python Tutor.
Vamos a outro exemplo de aplicação do algoritmo de busca binária com utilização do mesmo vetor ordenado
apresentado para a busca sequencial.
O código para esse exemplo será escrito da seguinte maneira:
Para testar o comportamento desse algoritmo vamos acessar o código com o Python Tutor.
Agora vamos analisar alguns pontos importantes desse exemplo de aplicação de busca.
Linha 6
Na linha 6, temos a estrutura de repetição “while”, que será executada enquanto o primeiro elemento da lista
(mínimo) for menor ou igual ao máximo (último elemento) e o elemento procurado não for encontrado.
Linha 7
Linha 8
Na linha 8, temos uma estrutura de condição “if” em razão da qual, basicamente, verifica-se que, se o
elemento do meio da lista for o valor procurado, será retornado o True (linha 9).
Linha 10
Na linha 10, temos a condição “else”, que verifica se o elemento procurado é menor que o valor do meio da
lista. Se for maior, então a busca acontecerá na metade superior da sequência (a inferior é descartada); se
não for, a busca acontecerá na metade inferior da sequência (a superior é descartada).
Pesquise mais
Todo algoritmo deve ter uma medida de complexidade – ou seja, a quantidade de recurso computacional é
necessária para executar tal solução. A análise da complexidade do algoritmo fornece mecanismos para
medir o desempenho de um algoritmo em termos de “tamanho do problema versus tempo de execução”
(TOSCANI; VELOSO, 2012). A análise da complexidade é feita em duas dimensões: espaço e tempo. Embora
ambas as dimensões influenciem na eficiência de um algoritmo, o tempo que ele leva para executar é tido
como a característica mais relevante.
Fonte: Shutterstock.
Para aprofundamento, faça a leitura das páginas 13, 14 e 15 do Capítulo 2 da seguinte obra, disponível na
Biblioteca Virtual:
TOSCANI, L. V; VELOSO, P. A. S. Complexidade de algoritmos: análise, projeto e métodos. 3. ed. Porto Alegre:
Bookman, 2012.