1 / 39

Hashing

Hashing. Teoricamente, técnicas de hashing permitem acesso dinâmico aos dados (inserção/remoção/ recuperação) numa complexidade que independe do número N de registros do arquivo  O(1). Hashing estático. - para arquivos que não variam de tamanho. Função de hashing.

Télécharger la présentation

Hashing

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Hashing • Teoricamente, técnicas de hashing permitem acesso dinâmico aos dados (inserção/remoção/ recuperação) numa complexidade que independe do número N de registros do arquivo  O(1) Hashingestático - para arquivos que não variam de tamanho Função de hashing • Função que gera um endereço aleatório a partir de uma dada chave. • Duas chaves podem definir dois endereços idênticos  COLISÃO

  2. chave k = Adão h(k) 0 h(k) 1 2 3 endereço 4 4 5 6

  3. Exemplosimples • 75 registros de nomes de pessoas devem ser armazenados num espaço • de memória disponível para 1000 destes registros função: transforme os dois primeiros caracteres dos nomes em inteiros, relativos a sua posição na tabela ASCII, multiplique estes valores e utilize os três dígitos menos significativos como endereço. Nome ASCII das duas Produto Endereço priemeiras letras --------------------------------------------------------------------------------------------------------------- BALL 66 65 66x65=4290 290 LOWELL 76 79 76x79=6004 004 TREE 84 82 84x82=6888 888

  4. Colisões • Funções de hashing devem gerar poucas colisões Algumas ideias: • distribuir o máximo possível os registros a serem armazenados, no arquivo, de tal forma • que dois ou mais registros não sejam atribuídos a um mesmo endereço. • considerar uma grande quantidade de espaço disponível (memória)em relação ao • número de registros a serem armazenados (perda de espaço!!) • associar mais de um registro a um único endereço (buckets)

  5. Exemplo de um algoritmo de hashing represente a chave numericamente subdivida-a e adicione os diferentes subconjuntos divida o resultado por um número primo (distribuição mais aleatória do resto) e use o resto da divisão como endereço. Para LOWELL: 1. L O W E L L _ _ _ _ _ _ 76 79 87 69 76 76 32 32 32 32 32 32 2. | 76 79 | 87 69 | 76 76 | 32 32 | 32 32 | 32 32 | 7679 + 8769 + 7676 + 3232 + 3232 + 3232 = 33820

  6. Para limitar o resultado a um valor máximo, x, e inserir mais aleatoriedade, podemos utilizar o operador mod: Ex.: x = 19937  número primo  distribuição mais aleatória do resto da divisão • Assim: • 7679 + 8769 = 16448; 16448 mod 19937 = 16448 • 16448 + 7676 = 24128; 24128 mod 19937 = 4187 • + 3232 = 7419; 7419 mod 19937 = 7419 • 7419 + 3232 = 10651; 10651 mod 19937 = 10651 • 10651 + 3232 = 13883; 13883 mod 19937 = 13883

  7. 3. Objetivo: limitar a faixa de endereço resultante ao número de endereços disponíveis. Seja sa soma obtida no passo 2 anteiror e n o número de endereços disponíveis no arquivo. O endereço resultante, a, pode ser dado por: a = s mod n que gera um valor entre 0 e n-1 Assim: arquivo com 75 registros en=101endereços disponíveis: n = 101  primo !!! s = 13883 (LOWELL) 75/101 = 0,743 = 74% do espaço utilizado a = 13883 mod 101 = 84 LOWELL 84

  8. FunçõesdeHashing aceitável ideal (uniforme) ruim 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 a b c d e f g a b c d e f g a b c d e f g

  9. Exemplos de funções - Menos aleatória • explora o modelo de definição das chaves: e.g., baseado na informação • temporal (data de criação dos registros (dia, mês,ano) • divisão de chaves por um número primo - Mais aleatória • “mid-square”: transforma a chave num grande número decimal, eleva-o • ao quadrado e extrai dígitos do meio desta representação, proporcional ao • número de casas decimais do maior endereço disponível Ex.: endereços entre 0-99 chave = 342, = 116964 endereço da chave = 69

  10. transformação de base: converte a representação numérica decimal da • chave para outra base; calcula o mod deste resultado com o máximo ende- • reço disponível. Ex.: Endereços entre 0 – 99 Conversão para a base 11:  382 mod 100 = 82

  11. Análise da distribuição dos registros no arquivo • Calcula as diversas probabilidades de distribuição dos registros nos endereços • disponíveis • Baseia-se na distribuição de Poisson Função de Poisson

  12. Função de Poisson N = número de endereços disponíveis r = número total de registros a serem armazenados x = número de registros atribuídos a um dado endereço p(x) = probabilidade de a um dado endereço serem atribuídos x registros com uma função de hashing sobre r registros.

  13. Exemplo: N = 1000 endereços disponíveis r = 1000 registros a serem armazenados  • Probabilidade de um dado endereço receber x = 0 registro: • Probabilidade de um endereço receber x = 1 registro:

  14. Probabilidade de um endereço receber x = 2 registros: • Probabilidade de um endereço receber x = 3 registros:

  15. Predições de colisão Pela teoria das probabilidades, temos que, para N endereços disponíveis, o número de endereços do arquivo contendo x registros é dado por: Assim, para N = r = 1000  r/N = 1 Podemos estimar o número de endereços com: • x = 0 registro: 1000 x p(0) = 367,9  endereço sem registros • x = 1 registro: 1000 x p(1) = 367,9  nenhuma colisão • x = 2 registros: 1000 x p(2) = 183,9  183,9 registros com um sinônimo • x = 3 registros: 1000 X p(3) = 61,3  61,3 registros com 2 sinônimos (2 x 61,3 = 122,6 overflows)

  16. Problema: Reduzir o número de colisões e tratar os casos de overflow !! • - Redução do número de colisões • boa função de hashing • uso de endereços extras - Fator de carda D: Exemplo: do espaço do arquivo utilizado

  17. Questões: 1- Para este fator de carga, quantos endereços ficarão sem registros associados? 2- Quantos endereços devem receber exatamente 1 registro? 3- Quantos endereços devem receber um registro mais um ou mais sinônimos? 0 = 1000[0.0758 + 0.0126 + 0.0016 + 0.002 + 0] = 90 = 1000 – [607 + 303] = 90

  18. 4- Considerando-se apenas um registro/endereço, quantos overflows ocorrem no arquivo? p(2)  1 overflow p(3)  2 overflow p(4)  3 overflows . . . Nx1xp(2) + Nx2xp(3) + Nx3xp(4) + Nx4xp(5) + … = 1000 x [1x0.0758 + 2x0.0126 + 3x.0016 + 4x0.0002 + 0] = 107 overflows 5- Qual a porcentagem de overflows? Conclusão: Para um fator de carga igual a 50%, e cada endereço com um único registro, podemos obter 21% de todos os registros originando colisões no arquivo.

  19. Relação entre fator de carga e overflows

  20. Redução de colisões por overflow progressivo • Em casos de overflows, a lista de endereços é percorrida sequen- • cialmente, até que uma área livre seja encontrada. Esta área repre- • senta o endereço destino do registro. York hash(YORK)

  21. Procurando um registro que não existe: área vázia  Blue não existe no arquivo Blue . . . hash(Blue) Se arquivo cheio, a busca sequencial retorna ao ponto de partida (ciclo completo)  a busca se torna inviável!

  22. Comprimento Médio de Busca (CMB) Exemplo:

  23. comprimento da busca 1 20 1 21 2 22 2 23 5 24

  24. CMB versus fator de carga para uma função de hashing com um registro por endereço e overflow progressivo empregado no caso de colisões CMB Fator de carga D

  25. Abordagem de colisões por buckets • Buckets: conjunto de registros associados a um mesmo endereço. chave endereço Green 30 Hall 30 Jenks 32 King 33 Land 33 Marx 33 Nutt 33 cada endereço pode conter 3 registros 30 31 32 Nutt é um overflow 33

  26. Densidade de armazenamento por buckets • Considera o número de endereços (buckets), N, e o número de registros, • b, possíveis de serem armazenados em cada endereço (tamanho dos • buckets): Ex.: r = 750 N = 1000 b = 1  750/1000 = 75% r = 750 N = 500 b = 2  750/1000 = 75% r/N = 0.75 r/n = 1.5

  27. Distribuição de Poisson para os dois tipos de arquivos p(x) Sem buckets Com buckets (r/N=0.75) (r/N=1.5) p(0) 0.472 0.223 p(1) 0.354 0.335 p(2) 0.133 0.251 p(3) 0.033 0.126 p(4) 0.006 0.047 p(5) 0.001 0.014 p(6) -- 0.004 p(7) -- 0.001 p(x) Sem buckets Com buckets (r/N=0.75) (r/N=1.5) p(0) 0.472 0.223 p(1) 0.354 0.335 p(2) 0.133 0.251 p(3) 0.033 0.126 p(4) 0.006 0.047 p(5) 0.001 0.014 p(6) -- 0.004 p(7) -- 0.001

  28. Comparação de performance: • Para o caso de b=1, r/N=0.75 e N = 1000, o número de overflows é: • 1000 x [1xp(2) + 2xp(3) + 3xp(4) + 4xp(5) + 0 ] = 222 registros de overflow •  222/750 = 29,6% de overflows • Para o caso de b = 2, r/N = 1.5 e N = 500, o número de overflows é: • 500 x [ 1xp(3) + 2xp(4) + 3xp(5) + 4xp(6) + 0 ] = 140 registros de overflow •  140/750 = 18,7% de overflows

  29. Overflow de registros em função de diferentes tamanhos de buckets e fator de carga Tamanho do bucket Fator de carga Porcentagem de overflows

  30. Supressão de registros • a supressão não deve comprometer novas buscas. • o espaço liberado deve poder ser reutilizado, por exemplo, no caso • de um overflow progressivo 4 chaves hash(chaves) End. real Adams 5 5 Jones 6 6 Morris 6 7 Smith 5 8 5 6 7 8

  31. Apagando-se Morris 4 chaves hash(chaves) End. real Adams 5 5 Jones 6 6 Morris 6 7 Smith 5 8 5 6 7 8 observe que Smith não se encontra na melhor posição após a supressão 4 5 4 6 5 7 6 8 7 Smith está no arquivo? 8

  32. Hashing duplo Objetivo: diminuir o clustering de registros em torno de um mesmo endereço  menor CMB Ideia: “espalhar”aleatoriamente os registros de overflow. Método: Em casos de colisões, considere uma segunda função de hashing cujo resultado será adicionado ao primeiro endereço do registro; repita este procedimento até encontrar uma posição disponível. desvantagem: falta de localidade  maior número de seeks eventualmente

  33. Overflow progressivo encadeado • Os sinônimos são encadeados a partir de apontadores •  cada endereço contém um apontador para o próximo registro de • mesmo endereço - vantagem: apenas os sinônimos são acessados numa determinada busca. - desvantagem: temos campo de apontadores a mais; é preciso garantir a busca correta aos sinônimos a partir do primeiro registro.

  34. Exemplo 1: Overflow progressivo Chave hash(chave) End. real Comprimento de busca Adams 20 20 1 Bates 21 21 1 Cole 20 22 3 Dean 21 23 3 Evans 24 24 1 Flint 20 25 6 CMB = (1 + 1 + 3 + 3 + 1 + 6)/6 = 2.5 - Overflow progressivo encadeado 20 21 22 23 24 25 CMB = (1 + 1 + 2 + 2 + 1 + 3)/6 = 1.7

  35. Exemplo 2: Chave hash(chave) Adams 20 Bates 21 Cole 20 Dean 22 Evans 24 Flint 20 - Overflow progressivo encadeado 20 21 22 23 24 25

  36. Área separada de overflow • Objetivo: evitar que registros de overflow ocupem endereços errados. • Assim: • - área principal de dados contém registros com endereços “corretos”. • - área de overflow contém registros de overflows. • Vantagens: os endereços da área principal de dados ficam livres para as novas adições de registros; o espaço no arquivo de overflow é alocado quando necessário; o processamento é simplificado • Desvantagem: se overflow encontra-se em outro cilindro no disco  maior tempo • de seek

  37. Exemplo: Chave hash(chave) Adams 20 Bates 21 Cole 20 Dean 21 Evans 24 Flint 20 20 0 21 1 22 2 23 3 24

  38. Tabela de Índices • ideia: definir uma função de hashing que consulte um arquivo (tabela) • de índices apontando para registros. - Vantagem: a consulta aos índices se dá num único passo. - Desvantagem: necessita de um acesso a mais na estrutura de hashing Adams Cole Flint -1 20 -1 21 Bates Dean K 22 h(K) 23 -1 Evans 24 25

  39. Análise da frequência de aparição dos dados • Baseia-se na frequência de ocorrência das chaves para decidir • quais devem ser armazenadas inicialmente no arquivo (aquelas de • maior fdp).

More Related