E N D
1. Tabelas Hash Prof. Thales Castro
2. Motivao
3. Motivao
4. Funes Hashing Os registros com as chaves so armazenados nessa tabela, e endereados a partir de uma funo de transformao sobre a chave de pesquisa
A essa funo d-se o nome de Funo HASHING
Seja M o tamanho da tabela:
A funo de hashing mapeia as chaves de entrada em inteiros dentro do intervalo [1..M]
Formalmente:
A funo de hashing h(kj) ? [1,M] recebe uma chave kj ? {k0,..,km} e retorna um nmero i, que o ndice do subconjunto mi ? [1,M] onde o elemento que possui essa chave vai ser manipulado
5. Funes Hashing Mtodo pelo qual:
As chaves de pesquisa so transformadas em endereos para a tabela (funo de transformao);
Obtm-se valor do endereo da chave na tabela HASH
Tal funo deve ser fcil de se computar e fazer uma distribuio equiprovvel das chaves na tabela
Existem vrias funes Hashing, dentre as quais:
Resto da Diviso
Meio do Quadrado
Mtodo da Dobra
Mtodo da Multiplicao
Hashing Universal
6. Resto da Diviso Forma mais simples e mais utilizada
Nesse tipo de funo, a chave interpretada como um valor numrico que dividido por um valor
O endereo de um elemento na tabela dado simplesmente pelo resto da diviso da sua chave por M (Fh(x) = x mod M), onde M o tamanho da tabela e x um inteiro correspondendo chave
0 <= F(x) <= M
7. Resto da Diviso
Ex: M=1001 e a seqncia de chaves: 1030, 839, 10054 e 2030
Chave Endereo
1030 29
10054 53
839 838
2030 29
8. Resto da Diviso Desvantagens Funo extremamente dependente do valor de M escolhido
M deve ser um nmero primo
Valores recomendveis de M devem ser >20
9. Funes Hash Seja qual for a funo, na prtica existem sinnimos chaves distintas que resultam em um mesmo valor de hashing.
Quando duas ou mais chaves sinnimas so mapeadas para a mesma posio da tabela, diz-se que ocorre uma coliso.
10. Tratamento de Colises Algumas solues conhecidas
11. Tabelas Hash- Colises Qualquer que seja a funo de transformao, existe a possibilidade de colises, que devem ser resolvidas, mesmo que se obtenha uma distribuio de registros de forma uniforme;
Tais colises devem ser corrigidas de alguma forma;
O ideal seria uma funo HASH tal que, dada uma chave 1 <= I <= 26, a probabilidade da funo me retornar a chave x seja PROB(Fh(x)= I) = 1/26, ou seja, no tenha colises, mas tal funo difcil, se no impossvel
12. Resto da Diviso - Coliso No exemplo dado, M=1001 e a seqncia de chaves: 1030, 839, 10054 e 2031
Chave Endereo
1030 29
10054 53
839 838
2030 29
13. Tratamento de Colises Alguns dos algoritmos de Tratamento de Colises so:
Endereamento Fechado
Endereamento Aberto
Hashing Linear
Hashing Duplo
14. Endereamento Fechado Tambm chamado de Overflow Progressivo Encadeado
Algoritmo: usar uma lista encadeada para cada endereo da tabela
Vantagem: s sinnimos so acessados em uma busca. Processo simples.
Desvantagens:
necessrio um campo extra para os ponteiros de ligao.
Tratamento especial das chaves: as que esto com endereo base e as que esto encadeadas
15. Endereamento Fechado
16. Endereamento Fechado
17. Endereamento Fechado
18. Endereamento Fechado
19. Endereamento Fechado
20. Hashing Linear Tambm conhecido como Overflow Progressivo
Consiste em procurar a prxima posio vazia depois do endereo-base da chave
Vantagem: simplicidade
Desvantagem: se ocorrerem muitas colises, pode ocorrer um clustering (agrupamento) de chaves em uma certa rea. Isso pode fazer com que sejam necessrios muitos acessos para recuperar um certo registro. O problema vai ser agravado se a densidade de ocupao para o arquivo for alta
21. Hashing Linear
22. Hashing Linear - Implementao
23. Hashing Linear - Implementao
24. Hashing Linear
25. Hashing Duplo Tambm chamado de re-hash
Ao invs de incrementar a posio de 1, uma funo hash auxiliar utilizada para calcular o incremento. Esta funo tambm leva em conta o valor da chave.
Vantagem: tende a espalhar melhor as chaves pelos endereos.
Desvantagem: os endereos podem estar muito distantes um do outro (o princpio da localidade violado), provocando seekings adicionais
26. Hashing Duplo
27. Hashing Duplo - Implementao
28. Hashing Duplo - Implementao
29. Endereamento Aberto Remoo
30. Endereamento Aberto: Remoo
31. Tabelas HASH Dinmica
32. Endereamento Aberto Expanso
33. Endereamento Aberto Expanso
34. Endereamento Aberto Expanso
35. Quando no usar Hashing?
36. FIM