Você está na página 1de 5

Linguagem de Programação II

Aula 8º

ALGORITMOS DE BUSCA

Nesta aula, vamos aprender a utilizar algoritmos de busca,


que são mecanismos empregados para localizar um valor dentre
vários.
Um algoritmo de busca é um programa ou função que
toma como entrada um problema e apresenta uma solução.
O problema pode ser compreendido como localizar um
determinado elemento em uma lista de elementos e a solução
pode ser o processo que deverá ser realizado para que o
elemento seja localizado.
Nesta aula, veremos os algoritmos de busca sequencial
e binária. Esses são os métodos mais comuns no meio
computacional. O algoritmo de busca sequencial é bastante
utilizado para buscar elementos em pequenas estruturas,
enquanto o algoritmo de busca binária é mais utilizado para
buscar elementos em estruturas um pouco maiores, mas a sua
utilização não fica restrita ao tamanho do problema
Bons estudos!

Objetivos de aprendizagem

Ao término desta aula, vocês serão capazes de:

• entender os métodos de busca apresentados;


• identificar o melhor método para determinado caso;
• implementar soluções parecidas com as apresentadas.
51
FIGURA 8.1: MÉTODO DE BUSCA SEQUENCIAL.
Seções de estudo

1 – Busca Sequencial
2 – Busca Binária

1 - Busca Sequencial
A busca sequencial é a mais simples e mais fácil de
implementar e a lista não precisa estar ordenada para que
a busca seja efetuada com sucesso. Utilizando a busca
sequencial, basicamente, percorre-se toda a lista em busca de
um determinado elemento e verifica-se sua existência ou não
nessa lista. Esse processo é bastante simples, mas não muito
eficiente, visto que em uma lista muito grande a busca poderá
se tornar muito lenta e comprometer o bom desempenho do
programa. Seus passos fundamentais são:

• percorre-se a lista a partir do primeiro elemento até


encontrar o elemento procurado ou até chegar ao
final da lista;
• caso o elemento seja encontrado, então o
retornamos;
• caso o elemento não seja encontrado, então Fonte: criação nossa

retornamos uma mensagem de que o elemento não


se encontra na lista. Vamos ver a saída do programa mostrado pela figura
acima? A figura 8.1 representa esta saída. No exemplo que
podemos ver, o valor buscado é 12, e para localizá-lo, foi
preciso iniciar a busca, comparando o valor buscado com 2,
depois com 4, com 6, com 8, com 10 e finalmente com 12.
Tivemos 6 comparações para localizar o valor buscado.

FIGURA 8.2: TELA DE SAÍDA DO PROGRAMA


A busca utilizando esse método pode ser rápida ou se REPRESENTADO PELA FIGURA 8.1.
tornar muito lenta; o que influencia no tempo de localização
de um valor é a sua posição.

Vamos entender melhor?

A busca sempre se inicia no primeiro elemento da lista,


então:

• se o valor buscado estiver na primeira posição, então


o retorno da busca será rápido (dizemos que esse é
o melhor caso)
• se o valor buscado estiver na última posição, a busca
será muito lenta (dizemos que esse é o pior caso)
• baseado nos dois casos apresentados, os demais
são proporcionais à posição que o valor buscado se
encontra na lista.

Vamos ver a implementação de um programa onde é Fonte: criação nossa

realizada a busca utilizando esse método?


Vimos que a busca sequencial localiza de forma eficiente
Veja a seguir: o valor buscado, mas, em alguns casos, ela pode se tornar
Linguagem de Programação II 52
muito lenta. Vamos ver agora busca binária, que é um método Primeira divisão:
mais rápido, pois realiza algumas operações que tornam a
busca mais eficiente.

A busca binária é mais complexa e mais eficiente do que


a busca sequencial, pois geralmente, ela retorna um resultado
com menos comparações do que a busca sequencial.
Para que essa busca seja efetuada é estritamente
necessário que a lista esteja ordenada, o motivo veremos a O cálculo para localizar o elemento central (meio) foi o
seguir. seguinte:(início + fim) / 2 = meio
Onde:
Seus passos fundamentais são: • início = 0 -> primeira posição da lista;
• Calcula-se o elemento central da lista (meio), e • fim = 14-> última posição da lista;
compara-o com o valor procurado:
• caso o valor seja igual ao elemento central da lista, Portanto:
então retornamos a sua posição no vetor – a busca (0 + 14) / 2 = 14 / 2 = 7, então 7 é a posição do elemento
termina; central do vetor (meio).
• caso contrário, continuamos a busca;
• se o valor buscado é menor do que o valor do Localizamos o valor buscado? Ainda não, mas podemos
elemento central da lista (meio), então criamos uma seguir para o próximo passo. O valor buscado não é igual ao
sublista que vai do elemento inicial até o elemento elemento central da lista, então verificamos se ele é maior,
central menos um (-1) e verificamos se o valor ou menor do que o elemento central. Nesse caso é maior,
buscado é igual ao elemento central dessa nova lista: então, o meio mais um (+1) passa a ser o início da lista e ela é
• caso o valor seja igual ao elemento central da sublista, dividida novamente ao meio.
então retornamos a sua posição no vetor – a busca
termina;
• caso contrário, continuamos a busca;

• Se o valor é maior do que o valor do elemento


central da lista, então criamos uma sublista que vai do O cálculo para localizar o elemento central foi o seguinte:
elemento central mais um (+1) da lista até o último (início + fim) / 2 = meio
elemento dela, e verificamos se o valor buscado é Onde:
igual ao elemento central dessa nova lista; • início = 8 -> que é a posição do vetor onde ele se
• caso o valor seja igual ao elemento central da sublista, encontra;
então retornamos a sua posição no vetor – a busca • fim = 14 -> que é a posição do vetor onde ele se
termina; encontra;
• caso contrário, continuamos a busca;
Portanto:
Esses passos são realizados repetidas vezes até que o (8 + 14) / 2 = 22 / 2 = 11, então 11 é o meio
elemento central da lista seja igual ao valor buscado ou que os
extremos da lista se cruzem. O valor buscado não é igual ao elemento central da
sublista, então verificamos se ele é maior ou menor do que o
REGRA elemento central. Agora é menor do que o elemento central,
O elemento buscado tem que ser igual ao elemento então o meio da lista menos (-1) um passa a ser o fim da lista;
central da lista ou sublista dividimos ela novamente ao meio.

Vamos ver a representação gráfica para entender


melhor o que foi explicado. Abaixo, veremos a representação
gráfica da busca binária pelo valor 82.

Apresentando a lista:
O meio está apontando para 87. Precisamos que ele
aponte para 82. Portanto, ainda não chegamos ao final da
busca. Mais uma vez precisamos dividir o vetor (ou sublista)
para tentar localizar o elemento buscado. Veja os próximos
53
passos abaixo: Veja a seguir a saída do programa buscando o valor 82,
O cálculo para localizar o elemento central foi o seguinte: que foi buscado na representação gráfica vista anteriormente.
(início + fim) / 2 = meio
Onde: FIGURA 8.4: TELA DE SAÍDA DO PROGRAMA
• início = 8 -> que é a posição do vetor onde ele se REPRESENTADO PELA FIGURA 8.1.
encontra;
• fim = 10 -> que é a posição do vetor onde ele se
encontra;

Portanto:
(8 + 10) / 2 = 18 / 2 = 9, então 9 é o meio

Ainda não localizamos o valor buscado. Então, vamos


ver o resultado de mais uma divisão:
Fonte: criação nossa

Retomando a aula

O cálculo para localizar o elemento central foi o seguinte:


(início + fim) / 2 = meio Vamos relembrar um pouco do que vimos nesta aula?
Onde:
• início = 8 -> que é a posição do vetor onde ele se
encontra;
• fim = 8 -> que é a posição do vetor onde ele se
1 – Busca Sequencial
encontra;
Vimos que a busca sequencial testa todos os valores de
Portanto: um vetor ou lista, para encontrar um valor buscado. Se o valor
(8 + 8) / 2 = 16 / 2 = 8, então 8 é o meio. buscado estiver na última posição do vetor, então a busca
O valor buscado finalmente é igual ao elemento central pode não ser tão rápida/eficiente, mas se estiver na primeira
e a busca termina. (ou entre as primeiras) esta busca será rápida e eficiente.

Entendemos como funciona o processo de busca, mas 2 – Busca Binária


agora vamos ver a implementação de um programa que O método de busca binária, é um pouco mais complexo,
realiza essa busca. visto que ele vai dividindo o vetor em partes menores e tenta
localizar o valor dentro dessas sublistas que vão sendo criadas.
FIGURA 8.3: MÉTODO DE BUSCA BINÁRIA.
Esse processo que segue duas pequenas regras, se repete até
que um índice (aqui denominado “meio”) aponta para o valor
buscado.

Vale a pena

Vale a pena ler


Leia o capítulo 15 do livro Estruturas de dados e
Algoritmos usando C

Vale a pena acessar

• http://www.ime.usp.br/~pf/algoritmos/aulas/
bubi2.html
Fonte: criação nossa
Linguagem de Programação II 54
Autoavaliação Linguagem C – Curso Completo – Módulo 2. São
Paulo: Makron Books do Brasil, 1990.
Veja se aprendeu nesta aula, respondendo o questionário autoavaliativo. Treinamento em
Depois confira o resultado das respostas, disponível na ferramenta Linguagem C++ – Módulo 1. São Paulo: Makron
Arquivos da plataforma. Books do Brasil, 2005.
SAADE, Joel. Programando em C++. SãoPaulo:
1. A busca sequencial deve ser mais utilizada para localizar Novatec, 2003.
valores em pequenas listas. SCHILDT, Herbert. C Completo e Total. 3.ed. São
( ) Verdadeiro ( ) Falso Paulo: Makron Books, 1996.
SILVA, Osmar Quirino da. Estrutura de Dados e
2. Para buscar um valor em uma lista, usando a busca Algoritmos Usando C. Rio de Janeiro: Ciência Moder-
sequencial, é estritamente necessário que os valores dela na, 2007.
estejam ordenados
( ) Verdadeiro ( ) Falso

3. Em uma busca sequencial, mesmo quando o valor é Minhas anotações


encontrado a busca continua até chegar ao final da lista
( ) Verdadeiro ( ) Falso

4. Na busca binária, quando o valor buscado é maior do


que o meio, o início passa a valer meio +1.
( ) Verdadeiro ( ) Falso

5. Na busca binária, quando o valor buscado é menor do


que o meio, o início passa a valer meio -1.
( ) Verdadeiro ( ) Falso

6. O meio é calculado somando o início e o fim e


dividindo o resultado por 2
( ) Verdadeiro ( ) Falso

7. Na busca binária a busca termina quando o meio


aponta para o valor buscado
( ) Verdadeiro ( ) Falso

8. Para fazer buscas utilizando-se a busca binária é preciso


que a lista tenha um número par de elementos.
( ) Verdadeiro ( ) Falso

Referências

DEITEL, Harvey M.; DEITEL, Paul J. C++


Como Programar. 5. ed. SãoPaulo: Pearson Prentice
Hall, 2006.
HOLZNER, Steven. C++ Black Book. São Pau-
lo: McGraw-Hill, 2001.h t t p : / / w w w. c i n . u f p e.
br/~jndm/edados/slides/ClaudioCampe-
l o / AulaAlocacaoDinamicaEApontadores.pdf
JAMSA, Kris; KLANDER, Lars. Programando
em C/C++. São Paulo:Makron Books, 1999.
KENT, Jeft. Formação Técnica: C++ DE-
SMITIFICADO. Rio de Janeiro: Alta Books, 2005.
MIZRAHI, Victorine Viviane. Treinamento em
Linguagem C – Curso Completo – Módulo 1. São
Paulo: Makron Books do Brasil, 1990.
MIZRAHI, Victorine Viviane. Treinamento em

Você também pode gostar