Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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.
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.
2.1.2. Testes
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
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.
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:
2.3.2. Testes
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.
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.
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
11
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.
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.
4.2.2. Teste
13
14
REFERNCIAS