Escolar Documentos
Profissional Documentos
Cultura Documentos
ICC2 12.busca PDF
ICC2 12.busca PDF
SCC-201 - Captulo 5
Mtodos de Busca [3]
2009
Joo Lus G. Rosa
c 2009 - SCC-201: V. Mtodos de Busca 1/121
Busca
Outros tipos de Busca
Hashing
Sumrio
1 Busca
Introduo
Busca Sequencial
Busca Binria
2 Outros tipos de Busca
Busca por interpolao
Busca em rvores
3 Hashing
Conceitos
Funes hash
Tipos de hashing
Sumrio
1 Busca
Introduo
Busca Sequencial
Busca Binria
2 Outros tipos de Busca
Busca por interpolao
Busca em rvores
3 Hashing
Conceitos
Funes hash
Tipos de hashing
Terminologia bsica
Terminologia bsica
Terminologia bsica
Tipos de busca
Sumrio
1 Busca
Introduo
Busca Sequencial
Busca Binria
2 Outros tipos de Busca
Busca por interpolao
Busca em rvores
3 Hashing
Conceitos
Funes hash
Tipos de hashing
Busca sequencial
Busca sequencial
Busca sequencial
Busca sequencial
Busca sequencial
Busca sequencial
Busca sequencial
Busca sequencial
Busca sequencial
A[n]=x;
for (i=0; x!=A[i]; i++);
if (i < n) return(i); /*chave encontrada*/
else return(-1); /*chave no encontrada*/
Busca sequencial
Limitaes do vetor:
Tamanho fixo:
Pode desperdiar ou faltar espao.
Alternativa:
Lista encadeada:
O que muda na busca sequencial?
Complexidade:
Se o registro for o primeiro: 1 comparao,
Se o registro procurado for o ltimo: N comparaes,
Se for igualmente provvel que o argumento aparea em
qualquer posio da tabela, em mdia: (n+1)
2 comparaes,
Se a busca for mal sucedida: N comparaes.
Logo, a busca sequencial, no pior caso, O(n).
Busca sequencial
Arranjo no ordenado:
Insero no final do arranjo,
Remoo:
Realocao dos registros acima do registro removido.
Para aumentar a eficincia:
Reordenar continuamente a tabela de modo que os
registros mais acessados sejam deslocados para o incio:
1 Mtodo mover-para-frente: sempre que uma pesquisa
obtiver xito, o registro recuperado colocado no incio da
lista,
2 Mtodo da transposio: um registro recuperado com
sucesso trocado com o registro imediatamente anterior.
Ambos se baseiam no fenmeno da recuperao
recorrente de registros.
Busca sequencial
Busca sequencial
Busca sequencial
Busca sequencial
Busca sequencial
Busca sequencial
Busca sequencial
Vantagem:
Os itens na tabela podero ser examinados
sequencialmente sem que todos os registros precisem ser
acessados:
O tempo de busca diminui consideravelmente.
Desvantagens:
A tabela tem que estar ordenada,
Exige espao adicional para armazenar a(s) tabela(s) de
ndices.
Algo mais?
Busca sequencial
Remoo:
Remove-se o elemento e rearranja-se a tabela inteira e o(s)
ndice(s),
Marca-se a posio do elemento removido, indicando que
ela pode ser ocupada por um outro elemento futuramente:
A posio da tabela fica vazia.
Busca sequencial
Insero:
Se houver espao vago na tabela, rearranjam-se os
elementos localmente,
Se no houver espao vago:
Rearranjar a tabela a partir do ponto apropriado e
reconstruir o(s) ndice(s).
Busca sequencial
512 inserido.
Busca sequencial
512 inserido.
Busca sequencial
Elementos a partir de
567 descem,
512 inserido,
ndice reconstrudo.
Busca sequencial
Elementos a partir de
567 descem,
512 inserido,
ndice reconstrudo.
Busca sequencial
Busca sequencial
Exemplo:
Divide-se o nmero de elementos da tabela pelo tamanho
do ndice desejado:
Se a tabela tem 1.000 elementos e deseja-se um ndice
primrio de 10 elementos, faz-se 1.000/10=100.
Para montar o ndice, recuperam-se da tabela os
elementos 0, 0+n/tamanho-ndice, 0+2*n/tamanho-ndice,
etc.:
O ndice primrio montado com os elementos das
posies 0, 100, 200, etc. da tabela.
Cada elemento do ndice representa n/tamanho-ndice
elementos da tabela:
Cada elemento do ndice primrio aponta para o comeo de
um grupo de 100 elementos da tabela.
Busca sequencial
Sumrio
1 Busca
Introduo
Busca Sequencial
Busca Binria
2 Outros tipos de Busca
Busca por interpolao
Busca em rvores
3 Hashing
Conceitos
Funes hash
Tipos de hashing
Busca binria
Busca binria
Busca binria
Busca binria
Busca binria
Busca binria
Busca binria
Complexidade:
O(log n), pois cada comparao reduz o nmero de
possveis candidatos por um fator de 2.
Vantagens:
Eficincia da busca,
Simplicidade da implementao.
Desvantagens:
Nem todo arranjo est ordenado,
Exige o uso de um arranjo para armazenar os dados:
Faz uso do fato de que os ndices do vetor so inteiros
consecutivos.
Insero e remoo de elementos so ineficientes:
Realocao de elementos.
Busca binria
Sumrio
1 Busca
Introduo
Busca Sequencial
Busca Binria
2 Outros tipos de Busca
Busca por interpolao
Busca em rvores
3 Hashing
Conceitos
Funes hash
Tipos de hashing
Complexidade:
O(log(log(n))) se as chaves estiverem uniformemente
distribudas:
Raramente precisar de mais comparaes.
Se as chaves no estiverem uniformemente distribudas, a
busca por interpolao pode ser to ruim quanto uma
busca sequencial.
Desvantagem:
Em situaes prticas, as chaves tendem a se aglomerar
em torno de determinados valores e no so
uniformemente distribudas:
Exemplo: h uma quantidade maior de nomes comeando
com S do que com Q.
Sumrio
1 Busca
Introduo
Busca Sequencial
Busca Binria
2 Outros tipos de Busca
Busca por interpolao
Busca em rvores
3 Hashing
Conceitos
Funes hash
Tipos de hashing
Busca em rvores
rvores:
rvores binrias:
rvores binrias de busca,
AVLs: rvores binrias de busca balanceadas.
rvores multidirecionais:
rvores B.
rvores AVL
1
O termo AVL devido a proposta de Adelson-Velskii e Landis, de 1962.
Joo Lus G. Rosa
c 2009 - SCC-201: V. Mtodos de Busca 54/121
Busca
Busca por interpolao
Outros tipos de Busca
Busca em rvores
Hashing
rvores AVL
Fator de equilbrio = He - Hd
He = altura da sub-rvore esquerda,
Hd = altura da sub-rvore direita.
rvores AVL
rvores-B
rvores-B
onde:
C1 < C2 < ... < Cj so chaves dos registros,
Ei o endereo da sub-rvore que contm os registros
com chaves compreendidas entre Ci e Ci+1 .
Exemplo de rvore-B de ordem 5: prximo slide.
rvores-B
Eficincia
Eficincia
Reflexo
Reflexo
Endereamento direto:
Vantagem: Acesso direto e, portanto, rpido:
Via indexao do arranjo.
Desvantagem: Uso ineficiente do espao de
armazenamento:
Declara-se um arranjo do tamanho da maior chave?
E se as chaves no forem contnuas? Por exemplo, {1 e
100},
Pode sobrar espao? Pode faltar?
Reflexo
Hashing:
Acesso direto, mas endereamento indireto:
Funo de mapeamento h(k ) 6= k , em geral,
Resolve uso ineficiente do espao de armazenamento.
Ideal: O(1), em mdia, independente do tamanho do
arranjo,
Hash significa (Websters New World Dictionary):
1 Fazer picadinho de carne e vegetais para cozinhar,
2 Fazer uma baguna.
Sumrio
1 Busca
Introduo
Busca Sequencial
Busca Binria
2 Outros tipos de Busca
Busca por interpolao
Busca em rvores
3 Hashing
Conceitos
Funes hash
Tipos de hashing
Sumrio
1 Busca
Introduo
Busca Sequencial
Busca Binria
2 Outros tipos de Busca
Busca por interpolao
Busca em rvores
3 Hashing
Conceitos
Funes hash
Tipos de hashing
Exemplo:
Seja B um arranjo de 7 elementos:
Insero dos nmeros 1, 5, 10, 20, 25, 24.
Exemplo:
Seja B um arranjo de 7 elementos:
Insero dos nmeros 1, 5, 10, 20, 25, 24.
1%7=1
Exemplo:
Seja B um arranjo de 7 elementos:
Insero dos nmeros 1, 5, 10, 20, 25, 24.
5%7=5
Exemplo:
Seja B um arranjo de 7 elementos:
Insero dos nmeros 1, 5, 10, 20, 25, 24.
10 % 7 = 3
Exemplo:
Seja B um arranjo de 7 elementos:
Insero dos nmeros 1, 5, 10, 20, 25, 24.
20 % 7 = 6
Exemplo:
Seja B um arranjo de 7 elementos:
Insero dos nmeros 1, 5, 10, 20, 25, 24.
25 % 7 = 4
Exemplo:
Seja B um arranjo de 7 elementos:
Insero dos nmeros 1, 5, 10, 20, 25, 24.
24 % 7 = 3
Funes hash
Funes hash
Sumrio
1 Busca
Introduo
Busca Sequencial
Busca Binria
2 Outros tipos de Busca
Busca por interpolao
Busca em rvores
3 Hashing
Conceitos
Funes hash
Tipos de hashing
Tipos de Hashing
1 Esttico:
Espao de endereamento no muda,
Fechado: Permite armazenar um conjunto de informaes
de tamanho limitado:
Tcnicas de rehash para tratamento de colises,
Overflow progressivo,
2a . funo hash.
Aberto: Permite armazenar um conjunto de informaes de
tamanho potencialmente ilimitado:
Encadeamento de elementos para tratamento de colises.
2 Dinmico:
Espao de endereamento pode aumentar.
Hashing esttico
Hashing fechado:
Uma tabela de buckets utilizada para armazenar
informaes:
Os elementos so armazenados na prpria tabela:
Normalmente conhecido como endereamento aberto.
Colises: aplicar tcnicas de rehash:
Overflow progressivo,
2a . funo hash.
Hashing esttico
Tcnicas de rehash:
Se posio h(k ) est ocupada (lembre-se de que h(k )
um ndice da tabela), aplicar funo de rehash sobre h(k ),
que deve retornar o prximo bucket livre: rh(h(k )),
Caractersticas de uma boa funo de rehash:
Cobrir o mximo de ndices entre 0 e B 1,
Evitar agrupamentos de dados.
Alm de utilizar o ndice resultante de h(k ) na funo de
rehash, pode-se usar a prpria chave k e outras funes
hash.
Hashing esttico
Overflow progressivo:
rh(h(k )) = (h(k ) + i)%B, com i variando de 1 a B 1 (i
incrementado a cada tentativa).
Hashing esttico
Overflow progressivo:
rh(h(k )) = (h(k ) + i)%B, com i variando de 1 a B 1 (i
incrementado a cada tentativa).
Hashing esttico
Hashing esttico
Hashing esttico
Hashing esttico
Overflow progressivo:
Exemplo anterior: rh(h(k )) = (h(k ) + i)%B, com
i = 1...B 1:
Chamada sondagem linear, pois todas as posies da
tabela so checadas, no pior caso.
Outro exemplo: rh(h(k )) = (h(k ) + c1 i + c2 i 2 )%B, com
i = 1...B 1 e constantes c1 e c2 :
Chamada sondagem quadrtica, considerada melhor do
que a linear, pois evita mais o agrupamento de elementos.
Hashing esttico
Overflow progressivo:
Vantagem:
Simplicidade.
Desvantagens:
1 Agrupamento de dados o
overflow progressivo
(causado por colises),
2 Com estrutura cheia )
a busca fica lenta,
hashing fechado
3 Dificulta inseres
e remoes.
Hashing esttico
Hashing esttico
Hashing esttico
Hashing esttico
Hashing esttico
Hashing aberto:
A tabela de buckets, indo de 0 a B 1, contm apenas
ponteiros para uma lista de elementos,
Quando h coliso, o sinnimo inserido no bucket como
um novo n da lista,
Busca deve percorrer a lista.
Hashing esttico
Hashing esttico
Vantagens:
A tabela pode receber mais itens mesmo quando um
bucket j foi ocupado,
Permite percorrer a tabela por ordem de valor hash.
Desvantagens:
Espao extra para as listas,
Listas longas implicam em muito tempo gasto na busca:
Se as listas estiverem ordenadas, reduz-se o tempo de
busca,
Custo extra com a ordenao.
Hashing fechado:
Depende da tcnica de rehash:
Com overflow progressivo, aps vrias inseres e
remoes, o nmero de acessos aumenta.
A tabela pode ficar cheia,
Pode haver mais espao para a tabela, pois no so
necessrios ponteiros e campos extras como no hashing
aberto.
Hashing aberto:
Depende do tamanho das listas e da funo hash:
Listas longas degradam desempenho,
Poucas colises implicam em listas pequenas.
Diviso:
h(k ) = k %m, com m tendo um tamanho primo, de
preferncia.
Multiplicao:
h(k ) = (k A%1) m, com A sendo uma constante entre 0
e 1:
(k A%1) recuperaa parte fracionria de k A,
Knuth sugere A = 512
= 0, 6180 . . .
Hash universal:
A funo hash escolhida aleatoriamente no incio de
cada execuo, de forma que minimize/evite tendncias
das chaves,
Por exemplo, h(k ) = ((A k + B)%P)%m:
P um nmero primo maior do que a maior chave k ,
A uma constante escolhida aleatoriamente de um conjunto
de constantes {0, 1, 2, ..., P 1} no incio da execuo,
B uma constante escolhida aleatoriamente de um conjunto
de constantes {1, 2, ..., P 1} no incio da execuo.
Diz-se que h representa uma coleo de funes universal.
Hashing
Hash perfeito:
Quando no h coliso:
Aplicvel em um cenrio em que o conjunto de chaves
esttico,
Exemplo de cenrio deste tipo?
Exemplo de hash perfeito:
Hashing em 2 nveis,
Uma primeira funo hash universal utilizada para
encontrar a posio na tabela, sendo que cada posio da
tabela contm uma outra tabela (ou seja, outro arranjo),
Uma segunda funao hash universal utilizada para indicar
a posio do elemento na nova tabela.
Hashing dinmico
Hashing dinmico
Hashing extensvel:
Em geral, trabalha-se com bits,
Aps h(k ) ser computada, uma segunda funo f
transforma o ndice h(k ) em uma sequncia de bits:
Os bits so utilizados para indexar de fato a chave.
Alternativamente, h e f podem ser unificadas como uma
nica funo hash final.
Funo hash computa sequncia de m bits para uma
chave k , mas apenas os i primeiro bits (i m) do incio da
sequncia so usados como endereo:
Se i o nmero de bits usados, a tabela de buckets ter 2i
entradas,
Portanto, tamanho da tabela de buckets cresce sempre
como potncia de 2.
N o nmero de ns permitidos por bucket,
Tratamento de colises: listas encadeadas, em geral.
Joo Lus G. Rosa
c 2009 - SCC-201: V. Mtodos de Busca 109/121
Busca Conceitos
Outros tipos de Busca Funes hash
Hashing Tipos de hashing
Hashing dinmico
Hashing dinmico
Hashing dinmico
Hashing dinmico
Hashing dinmico
Hashing dinmico
Hashing dinmico
Hashing dinmico
Vantagens:
Custo de acesso constante, determinado pelo tamanho de
N,
A tabela pode crescer.
Desvantagens:
Complexidade extra para gerenciar o aumento do arranjo e
a diviso das listas,
Podem existir sequncias de inseres que faam a tabela
crescer rapidamente, tendo, contudo, um nmero pequeno
de registros.
Quais so as principais desvantagens de hashing?
Os elementos da tabela no so armazenados
sequencialmente e nem sequer existe um mtodo prtico
para percorr-los em sequncia.
Busca sequencial,
Busca sequencial indexada,
Busca binria,
Busca por interpolao,
Busca em rvores:
AVLs.
Hashing.
Bibliografia I
Bibliografia II