Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Conceitos
estudo de como recuperar informao a partir
de uma grande massa de informao
previamente armazenada.
A informao dividida em Registros.
Cada registro possui uma chave para ser usada
na pesquisa.
Objetivo da pesquisa:
Encontrar uma ou mais ocorrncias de registros com
chaves iguais chave de pesquisa.
Pesquisa com sucesso X Pesquisa sem
sucesso.
Pesquisa em Memria Primria
Pesquisa
Conjunto de registros ou arquivos
Tabela:
associada a entidades de vida curta, criadas na
memria interna durante a execuo de um
programa.
Arquivo:
geralmente associado a entidades de vida mais
longa, armazenadas em memria externa.
Pesquisa em Memria Primria
Tipo abstrato de dados
importante considerar os algoritmos de pesquisa
como tipos abstratos de dados, com um conjunto de
operaes associado a uma estrutura de dados, de tal
forma que haja uma independncia de implementao
para as operaes.
Operaes mais comuns:
1. Inicializar a estrutura de dados.
2. Pesquisar um ou mais registros com determinada chave.
3. Inserir um novo registro.
4. Retirar um registro especfico.
5. Ordenar um arquivo para obter todos os registros em ordem de
acordo com a chave.
6. Ajuntar dois arquivos para formar um arquivo maior.
Pesquisa em Memria Primria
Dicionrio
Nome comumente utilizado para descrever
uma estrutura de dados para pesquisa.
Dicionrio um tipo abstrato de dados
com as operaes:
1. Inicializa
2. Pesquisa
3. Insere
4. Retira
Pesquisa em Memria Primria
Pesquisa sequencial
Mtodo de pesquisa mais simples:
Dado uma tabela com registros, pesquise
sequencialmente, saindo do primeiro registro,
at encontrar a chave procurada; ento pare.
Implementao usando vetor
Inicializa, Pesquisa, Insere, Remove
Pesquisa em Memria Primria
Pesquisa sequencial
Anlise
Pesquisa com sucesso:
melhor caso : = 1
pior caso : =
caso mdio : = ( + 1)/2
Pesquisa sem sucesso:
=+1
O algoritmo de pesquisa sequencial a
melhor escolha para o problema de pesquisa
em tabelas com at 25 registros.
Pesquisa em Memria Primria
Pesquisa Binria
Pesquisa em tabela pode ser mais eficiente se
os registros forem mantidos em ordem
Para saber se uma chave est presente na
tabela
1. Compare a chave com o registro que est na posio do
meio da tabela.
2. Se a chave menor ento o registro procurado est na
primeira metade da tabela
3. Se a chave maior ento o registro procurado est na
segunda metade da tabela.
4. Repita o processo at que a chave seja encontrada, ou
fique apenas um registro cuja chave diferente da
procurada, significando uma pesquisa sem sucesso.
Pesquisa em Memria Primria
Pesquisa Binria
Exemplo de pesquisa para chave
Pesquisa em Memria Primria
Pesquisa Binria
Anlise
A cada iterao do algoritmo, o tamanho da
tabela dividido ao meio.
Logo: o nmero de vezes que o tamanho da
tabela dividido ao meio cerca de log 2 .
Ressalva: o custo para manter a tabela
ordenada alto:
a cada insero na posio da tabela implica no
deslocamento dos registros a partir da posio para
as posies seguintes.
Consequentemente, a pesquisa binria no
deve ser usada em aplicaes muito dinmicas.
Hashing
Tratando colises
Com listas encadeadas
Uma das formas de resolver as colises
simplesmente construir uma lista linear
encadeada para cada endereo da tabela.
Assim, todas as chaves com mesmo
endereo so encadeadas em uma lista
linear.
Hashing
Exemplo:
Se a i-sima letra do alfabeto representada pelo nmero i;
a funo de transformao = mod utilizada para
= 7;
o resultado da insero das chaves na tabela o
seguinte:
Por exemplo, = 1 = 1, = 5 = 5 e = 19 =
5, e assim por diante.
Hashing
Anlise
Assumindo que qualquer item do conjunto tem igual
probabilidade de ser endereado para qualquer
entrada de , ento:
o comprimento esperado de cada lista encadeada /,
onde o nmero de registros na tabela e o tamanho da
tabela.
Logo as operaes Pesquisa, Insere e Retira custam
(1 + /) operaes em mdia, onde:
a constante 1 representa o tempo para encontrar a entrada na tabela
/ o tempo para percorrer a lista.
Para valores de M prximos de N, o tempo se torna
constante, isto , independente de N.
Hashing
Tratando colises
Endereamento aberto
Quando o nmero de registros a serem
armazenados na tabela puder ser
previamente estimado, ento no haver
necessidade de usar apontadores para
armazenar os registros.
No Endereamento aberto todas as chaves
so armazenadas na prpria tabela, sem o
uso de apontadores explcitos.
Hashing
= 12 = 5,
= 21 = 0,
= 14 = 0,
= 5 = 5,
= 19 = 5.
Hashing
Anlise
Hashing
Anlise
O hashing linear sofre de um mal chamado
agrupamento(clustering) (Knuth, 1973).
Este fenmeno ocorre na medida em que a tabela
comea a car cheia, pois a insero de uma nova
chave tende a ocupar uma posio na tabela que esteja
contgua a outras posies j ocupadas, o que deteriora
o tempo necessrio para novas pesquisas.
Entretanto, apesar do hashing linear ser um mtodo
relativamente pobre para resolver colises os resultados
apresentados so bons.
O melhor caso, assim como o caso mdio, O(1).
Hashing
Vantagens:
Alta ecincia no custo de pesquisa, que
O(1) para o caso mdio.
Simplicidade de implementao.
Desvantagens
Custo para recuperar os registros na
ordem lexicogrca das chaves alto,
sendo necessrio ordenar o arquivo.
Pior caso O(N).
Hashing Perfeito
Se = ( ) se e somente se = , ento no h
colises, e a funo de transformao chamada de
funo de transformao perfeita ou funo
hashing perfeita().
Se o nmero de chaves e o tamanho da tabela
so iguais (/ = 1), ento temos uma funo de
transformao perfeita mnima.
Se e ( ) ( ), ento a ordem
lexicogrca preservada. Nesse caso, temos uma
funo de transformao perfeita mnima com
ordem preservada.
Referncia Bibliografia