Você está na página 1de 13

Classificao e Pesquisa - Relatrio 1: Pesquisa de Dados

1. Busca
A hiptese bsica assumida no processo de busca que o conjunto de dados, dentre o
qual um determinado elemento deve ser procurado, possui tamanho fixo com N posies:
item a[N];
onde item representa uma estrutura de dados contendo um campo que atua como chave para a
pesquisa e N uma constante indicando o nmero de elementos. No nosso trabalho,
utilizamos de um Array List para criar a estrutura com a quantidade de elementos (nmeros
aleatrios) escolhida pelo usurio. Aps, convertemos a estrutura para um array inteiro de
tamanho N.

Figura 1 Converso de Array List para array inteiro

O objetivo da busca encontrar a key em alguma posio da estrutura:


a[i]= = key

Para fornecer os elementos a estrutura, utilizamos dos dados da Tabela 1. Sendo N o nmero
de nmeros gerados, low a faixa inferior de nmero a ser gerado, high a faixa superior,
seed:

N
low
high
seed
100
0
100000
1234554321
1000
0
100000
1234554321
10000
0
100000
1234554321
100000
0
100000
1234554321
Tabela 1: Parmetros para a realizao dos testes computacionais.

Atravs destes parmetros, geramos os nmeros aleatrios:

Classificao e Pesquisa - Relatrio 1: Pesquisa de Dados

Figura 2 Objetos e mtodos utilizados para a gerao e obteno dos nmeros aleatrios

Vrios mtodos e estruturas de dados podem ser empregados para se fazer buscas.
Implementamos todos eles retornando -1 caso no encontre o elemento procurado.

2. Tipos de busca
2.1. Busca linear ou sequencial
O mtodo de pesquisa mais simples que existe. Funciona da seguinte forma: a partir
do primeiro registro, pesquise sequencialmente at encontrar a chave procurada; ento pare.
A funo realizaBuscaLinear retorna o ndice do registro que contm a chave x; caso no
esteja presente o valor retornado -1. Observe que esta implementao no suporta mais de
um registro com uma mesma chave. Para aplicaes com esta caracterstica necessrio
incluir um argumento a mais na funo de pesquisa para conter o ndice a partir do qual se
quer pesquisar, e alterar a implementao de acordo.

2.1.1. Anlise
A grande vantagem desse mtodo de busca que, alm de se tratar de um algoritmo
simples, os dados que sero analisados no precisam passar por nenhum tipo de preparo
(como a ordenao, por exemplo) antes de execuo do algortimo, tornando seu uso
extremamente simples e confivel. mais eficiente quando a estrutura possui poucos
elementos.

Classificao e Pesquisa - Relatrio 1: Pesquisa de Dados

2.1.2. Testes

Figura 3 Teste de busca linear

2.2. Busca linear com sentinela


A idia bsica fazer com que o elemento procurado (x) sempre seja encontrado. Para
isso, introduz-se o elemento adicional no final da estrutura (a[]). Um registro sentinela
contendo a chave de pesquisa colocado aps a ltima posio do array. Esta tcnica garante
que a pesquisa sempre termina. Aps a chamada da funo Pesquisa, se o ndice zero,
significa que a pesquisa foi sem sucesso.

Classificao e Pesquisa - Relatrio 1: Pesquisa de Dados

Figura 4 Acrescentando sentinela e realizando busca

2.2.1. Anlise
O uso da sentinela tem como objetivo acelerar a busca, atravs da simplificao da expresso
booleana, ou seja, a sentinela proporciona a oportunidade de polpar a execuo de um
condicional.

2.2.2. Testes

Figura 5 Teste de busca linear com sentinela

Classificao e Pesquisa - Relatrio 1: Pesquisa de Dados

2.3. Busca Binria


Se no sabemos nada a respeito da ordem em que os itens aparecem no vetor, o melhor
que podemos fazer uma busca linear. Entretanto, se os itens aparecem ordenados5,
podemos usar um mtodo de busca muito mais eficiente. Esse mtodo semelhante
aquele que usamos quando procuramos uma palavra num dicionrio: primeiro abrimos o
dicionrio numa pgina aproximadamente no meio; se tivermos sorte de encontrar a
palavra nessa pgina, timo; seno, verificamos se a palavra procurada ocorre antes ou
depois da pgina em que abrimos e ento continuamos, mais ou menos do mesmo jeito,
procurando a palavra na primeira ou na segunda metade do dicionrio.
Como a cada comparao realizada, o espao de busca reduz-se aproximadamente
metade:

Figura 6 Funcionamento de uma busca binria

Caso a busca tenha que continuar, podemos proceder exatamente da mesma maneira:
verificamos o item existente no meio da metade escolhida e se ele ainda no for aquele
que procuramos, continuamos procurando no meio do quarto escolhido, depois no meio
do oitavo e assim por diante at que o item procurado seja encontrado ou que no haja
mais itens a examinar.
Como em cada passo o intervalo de busca reduz-se aproximadamente metade,
evidente que o processo de busca binria sempre termina, mesmo que
o item procurado no conste do vetor.

Classificao e Pesquisa - Relatrio 1: Pesquisa de Dados

Nesse caso, porm, o processo somente


termina quando no h mais itens a examinar, ou seja, quando o intervalo
de busca fica vazio.
No nosso caso, usamos as variveis low, middle e high:

Figura 7 Cdigo de busca binria

2.3.1. Anlise
Ao contrrio da busca linear, a busca binria somente funciona corretamente se o vetor
estiver ordenado. Isso pode ser uma desvantagem. Entretanto, medida em que o tamanho do
vetor aumenta, o nmero de comparaes feitas pelo algoritmo de busca binria tende a ser
muito menor que aquele feito pela busca linear. Ento, se o vetor muito grande, e a busca
uma operao muito requisitada, esse aumento de eficincia pode compensar o fato de termos
que ordenar o vetor antes de usar a pesquisa binria.
Para compreendermos melhor a eficincia da busca binria, vamos imaginar: quantos
itens, no mximo, so examinados pelo algoritmo cujo vetor possui 5000 itens? Seja n o
nmero de itens no vetor. Se n mpar, o item do meio divide o vetor em duas partes iguais de
tamanho (n1)/2. Se n par, o vetor dividido em uma parte com n/21 itens e outra com n/2
itens8. Sendo assim, medida em que o algoritmo executa, o nmero de itens vai reduzindo
do seguinte modo:

5000 2500 1250 625 312 156 78 39 19 9 4 2 1 0

Classificao e Pesquisa - Relatrio 1: Pesquisa de Dados

Na seqncia acima, cada reduo implica numa comparao. Logo, so realizadas


no mximo 13 comparaes.

2.3.2. Testes

Figura 8 Teste de busca binria

3. Ordenao
Ordenar corresponde ao processo de rearranjar um conjunto de objetos em uma ordem
ascendente ou descendente. O objetivo principal da ordenao facilitar a recuperao
posterior de itens do conjunto ordenado. Como exemplo da importncia desse processo,
podemos imaginar como seria difcil utilizar um catlogo telefnico se os nomes das pessoas
no estivessem listados em ordem alfabtica. A atividade de colocar as coisas em ordem est
presente na maioria das aplicaes onde os objetos armazenados tm que ser pesquisados e
recuperados, tais como dicionrios, ndices de livros, tabelas e arquivos.
Os algoritmos de ordenao constituem bons exemplos de como resolver problemas
utilizando computadores. As tcnicas de ordenao permitem apresentar um conjunto amplo
de algoritmos distintos para resolver uma mesma tarefa.

Classificao e Pesquisa - Relatrio 1: Pesquisa de Dados

Dependendo da aplicao, cada algoritmo considerado possui uma vantagem particular sobre
os outros, podendo se adequar melhor ou ao no a soluo procurada. Alm disso, os
algoritmos ilustram muitas regras bsicas para manipulao de estruturas de dados.
Os algoritmos trabalham sobre os registros de um arquivo. Apenas uma parte do
registro, chamada chave, utilizada para controlar a ordenao. Alm da chave podem existir
outros componentes em um registro, os quais no tm influncia no processo de ordenar, a
no ser pelo fato de que permanecem com a mesma chave. A escolha do tipo para a chave
arbitrria. Qualquer tipo sobre o qual exista uma regra de ordenao bem-definida pode ser
utilizado. As ordens numrica e alfabtica so as usuais.
Um mtodo de ordenao dito estvel se a ordem relativa dos itens com chaves
iguais mantm-se inalterada pelo processo de ordenao. Por exemplo, se uma lista alfabtica
de nomes de alunos de uma faculdade ordenada pelo campo nota_da_prova, ento um
mtodo estvel produz uma lista em que os alunos com a mesma nota aparecem em ordem
alfabtica.
Certos mtodos de organizao/ordenao de dados podem tornar o processo de busca
mais eficiente.

4. Tipo de Ordenaes
4.1. Seleo
A estratgia bsica desse mtodo , em cada fase, selecionar um menor item ainda no
ordenado e permut-lo com aquele que ocupa a sua posio na sequncia ordenada. Mais
precisamente, isso pode ser descrito assim: para ordenar uma seqncia (ai, ai+1, ..., na),
selecione uma valor k tal que ak = min{ ai, ai+1, ..., an}, permute os elementos ai e ak e, se
i+1<n, repita o procedimento para ordenar a subseqncia (ai+1, ..., an).

Figura 9 Ordenao da sequncia (46, 55, 59, 14, 38, 27) usando seleo. k o ndice
do menor elemento enquanto i percorre o vetor. Fase marca as trocas.

Classificao e Pesquisa - Relatrio 1: Pesquisa de Dados

10

Inicialmente, o item a1 assumido como o mnimo (k=1). Ento a1 comparado aos demais
itens da seqncia at que a4 encontrado. Como a4 < a1, o item a4 passa a ser o mnimo
(k=4) e o processo continua analogamente.

4.1.1. Anlise
Analisando a ordenao por Seleo (Selection Sort), constatamos que ela realiza o
mesmo nmero de comparaes que a ordenao Bolha (Bubble Sort).
Logo, a sua complexidade de tempo ser a mesma. Entretanto, como o nmero de elementos
a ordenar diminui de um item a cada troca feita, temos que o nmero
mximo de trocas na ssort() n1; um nmero consideravelmente
menor do que aquele encontrado para a rotina bsort(). Podemos dizer que o
nmero de trocas na bsort() n2 (n ao quadrado), enquanto na ssort() n.

4.1.2. Teste

Figura 10 Teste de ordenao de 100 mil elementos por Seleo

Classificao e Pesquisa - Relatrio 1: Pesquisa de Dados

11

4.2. Bubble Sort


Talvez seja a estratgia mais simples para ordenar um vetor. Trata-se de comparar
pares de itens consecutivos e permut-los, caso estejam fora de ordem. Se o vetor for
assim processado, sistematicamente, da esquerda para a direita, um item mximo ser
deslocado para sua ltima posio.

Figura 11 Demonstrao da ordenao por bubble sort

medida em que o vetor vai sendo processado, cada nmero vai sendo deslocado para
a direita, at que seja encontrado outro maior. Evidentemente, no final do processo, um
valor mximo estar na ltima posio do vetor.
Em cada fase desse mtodo, um item de maior valor deslocado para sua posio
definitiva no vetor ordenado. Ento, se um vetor tem n itens, aps a primeira fase haver
n1 itens a ordenar. Usando a mesma estratgia, aps a segunda fase, teremos n2 itens,
depois n3 e assim sucessivamente at que reste um nico item.
Se considerarmos os nmeros maiores como mais pesados e os menores como mais
leves, veremos que, durante a ordenao por esse mtodo, os nmeros mais pesados
"descem" rapidamente para o "fundo" do vetor, enquanto que os nmeros mais leves
"sobem" lentamente para a "superfcie". Os nmeros pesados descem como pedras e os
leves sobem como bolhas de ar. Por isto, esse mtodo ser conhecido como mtodo da
bolha ou bubble sort.

Classificao e Pesquisa - Relatrio 1: Pesquisa de Dados

12

4.2.1. Anlise
Embora seja um dos mtodos de ordenao menos eficientes que existem, o mtodo da
bolha geralmente o primeiro algoritmo de ordenao que todo mundo aprende. A sua
popularidade deve-se, principalmente, sua simplicidade e facilidade de codificao.
Mtodos mais eficientes, em geral, so tambm mais complicados de entender e de
codificar.

Figura 12 Fazes da ordenao por bubble sort

Classificao e Pesquisa - Relatrio 1: Pesquisa de Dados

4.2.2. Teste

Figura 13 Teste de ordenao de 100 mil elementos por bubble sort

13

Classificao e Pesquisa - Relatrio 1: Pesquisa de Dados

14

REFERNCIAS

BARANAUSKAS, Jos Augusto. USP. Disponvel em:


http://dcm.ffclrp.usp.br/~augusto/teaching/icii/Buscas-em-VetoresApresentacao.pdf. Acesso em: 04 de setembro de 2012.

ZIVIANI, Nivio. Projeto de algoritmos: com implementaes em


Pascal e C - Revista e Ampliada. 2 ed. So Paulo: Pioneira Thomson
Learning, 2005.

ZIVIANI, Nivio. Projeto de algoritmos: com implementaes em


Pascal e C. 4 ed. So Paulo: Pioneira Thomson Learning, 1999.

SILVA, Rodrigo. Prof. Rodrigo Silva. Disponvel em


http://profrodrigosilva.wordpress.com/2010/08/12/algoritmo-selectionsort-ordenacao-por-selecao-java/. Acesso em: 04 de setembro de 2012.

LAGO, Silvio. USP. Disponvel em http://www.ime.usp.br/~slago/slagoordena-busca.pdf. Acesso em: 04 de setembro de 2012.

Você também pode gostar