Escolar Documentos
Profissional Documentos
Cultura Documentos
Pesquisa de Dados
- Seqencial
- Binria
http://www.bolinhabolinha.com
Onde Estamos
Ementa
Pesquisa de Dados
Seqencial
Binria
Mtodos de ordenao
seleo e troca
distribuio
insero
Intercalao
rvores
Pesquisa
Binria
AVL
Patrcia
B-Tree
Tabelas hash
Esttica e Dinmica
Introduo
Uma operao fundamental nas tarefas
computacionais a BUSCA
encontrar uma determinada informao em um grande
conjunto de informaes armazenadas
Introduo
Podemos ter duas situaes
chaves nicas
um elemento aparece uma nica vez na estrutura
chaves duplicadas
o mesmo elemento aparece vrias vezes
ou, eliminamos a duplicao e colocamos um apontador
para o conjunto de registros iguais
ou, trabalhamos com todos os registros, um de cada vez
Busca seqncial
mtodo mais simples de busca
armazenamento simples: vetor ou lista
procura por elemento em uma estrutura de dados,
um a um, isto : sequencialmente
Pseudo-cdigo
Para cada item da lista
Verifique se o elemento que voc est procurando
corresponde ao elemento atual
Se for, retorne a posio que achou
Seno, continue procurando at chegar no fim da lista
Se chegou ao final da lista e no encontrou o elemento,
ele no existe, ento retorne -1
Busca seqencial em C
static int buscaElemento(int vet[ ], int elemento_a_procurar){
int elemento_a_procurar = 5;
int vet[5] = {5,2,8,7,11};
int i;
for(i=0;i<vet.length;i++)
{
if (vet[i]==elemento_a_procurar)
{
return i;
}
}
return -1;
}
Analisando o desempenho
Melhor caso
o item a ser procurado est na primeira posio
O(1)
Pior caso
o item a ser procurado no est na lista, ou esta
na ltima posio
varre o vetor inteiro
n/2 passos
O(n)
Caso mdio
procuro em metade dos elementos do vetor
O(n/2)
Exerccios
a-) Crie uma classe em java chamada
BuscaSeq e implemente os seguintes
mtodos (utilize vetor):
inicializaComNumerosRandomicos
buscaElemento
adicioneElemento
removaElemento
mostrarVetor
Qual a complexidade das operaes ?
Exerccios
c-) Quero implementar um novo mtodo chamado
inverteVetor, como ficaria o cdigo em Java. Qual a
complexidade ?
d-) Qual a complexidade do mtodo que remove o primeiro
elemento de um vetor nos seguintes casos:
1 caso somente preenchendo com NULO
2 caso fazendo um deslocamento de todos os elementos restantes
43
65
32
65
32
33
33
65
32
33
65
32
33
43
Busca binria
Paradigma diviso-e-conquista
dividir o nmero de registros em duas partes
determinar em que parte o item a ser procurado
deve estar
concentrar a pesquisa nesta parte
Restrio
a lista de elementos deve estar ordenada
Exemplo
lista de telefones ordenados por nmero
abro a lista no meio,
se o telefone for menor, olho na primeira metade da lista
se maior, olho na segunda metade
Busca binria
Procura em uma lista A de n elementos
inteiros, pelo elemento e
while not acabou and achou == false do
begin
compute meio of list
if e == meio item then achou = true
else if e < meio item procure metade abaixo
else if e > meio item procure metade acima
end
Busca binria em C
int vet[5] = {7,3,4,9,1,11,43,23,77,98};
int chave=4;
int limiteInf = 0;
int numeroComparacoes = 0;
int limiteSup = vet.length -1;
int posicaoAtual;
while(true)
{
numeroComparacoes++;
posicaoAtual = (limiteInf + limiteSup ) / 2;
if(vet[posicaoAtual]==chave)
{
System.out.println("Percorreu "+numeroComparacoes+" vezes");
return posicaoAtual;
}
else
if(limiteInf > limiteSup)
{
System.out.println("Percorreu "+numeroComparacoes+" vezes");
return -1;
}
else
{
if(vet[posicaoAtual] < chave)
limiteInf = posicaoAtual + 1;
else
limiteSup = posicaoAtual - 1;
} // fim else
} // fim while
Eficincia
Qual a eficincia do Algoritmo de busca binria ?
Para n = 8 posies, o pior caso quando precisando
chegar na posio 1 ou 8.
A cada diviso, desprezamos toda a poro maior ou
menor que a chave.
com n comparaes
chegamos posio
n/2
n/4
n/2k
Analisando o desempenho
Busca
complexidade logartmica O(log2n)
Insero demorada
devemos manter o conjunto de dados ordenado
elementos grandes, so inseridos na ltima posio.
leva n passos. O(n)
Eliminao
os elementos devem ser movidos para completar o
buraco vazio
buscar(log2n) + remover(1) + preencher espao vazio (n)
= O(n)
Exerccios
a-) Complete a tabela
Algoritmo
Complexidade
(notao O)
Busca seqencial
Busca binria
Insero em vetor desordenado
Insero em vetor ordenado
Remoo em vetor desordenado
Remoo em vetor ordenado
b-) Voc concorda com a frase Vetores ordenados so
extremamente teis quando as buscas so mais freqentes
que as operaes de remoo e insero., justifique.
Exerccios
c-) Que tipo de algortimo de busca voc implementaria para
cada caso abaixo, justifique:
procura de uma letra em um vetor que contenha o alfabeto
procura por um determinado nmero em um vetor
3,7,6,4,3,2,3,5,6,78,8,9,54,3,23
busca sequencial
busca binria com ordenao O(n)
busca binria com ordenao O(log2n)
busca binria com ordenao O(n2)
Exerccio
f-) Um cracker quer invadir um conta bancria, que no
possui mecanismo de bloqueio, isto , no trava aps n
tentativas erradas de digitao da senha.
Se a senha tivesse apenas um algarismo nmerico
implemente o algoritmo
qual a complexidade deste algoritmo ?
que tipo de busca essa?
possvel melhorar esta busca? como ?
Bibliografia
Livro texto
Complementar