A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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.

Apresentações semelhantes


Apresentação em tema: "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."— Transcrição da apresentação:

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) Hashing está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 h(k) chave k = Adão Registros Adão endereço

3 Exemplo simples 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. NomeASCII das duasProduto Endereço primeiras letras BALL x65= LOWELL x79= TREE x82=

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 1. represente a chave numericamente 2. subdivida-a e adicione os diferentes subconjuntos 3. 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 _ _ _ _ _ _ | | | | | | | = 33820

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

7 3. Objetivo: limitar a faixa de endereço resultante ao número de endereços disponíveis. Seja s a soma obtida no passo 2 anterior 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 e n=101 endereços disponíveis: n = 101 primo !!! s = (LOWELL) a = mod 101 = 84 75/101 = 0,743 = 74% do espaço utilizado 84 LOWELL

8 int hash(char *v, int M) { int h = 0, a = 127 ; for (; *v != \0; v++) h = (a*h + *v) % M ; return ; } Números primos e função de hashing

9 Funções de Hashing abcdefgabcdefg abcdefgabcdefg abcdefgabcdefg ideal (uniforme)ruim aceitável

10 Mais exemplos de funções 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 = 341, = endereço da chave = 62

11 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 – mod 100 = 82 Conversão para a base 11:

12 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

13 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.

14 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:

15 Probabilidade de um endereço receber x = 2 registros: Probabilidade de um endereço receber x = 3 registros:

16 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)

17 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 carga D: Exemplo: do espaço utilizado no arquivo

18 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[ ] = 90 = 1000 – [ ] = 90

19 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 [1x x x x ] = 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.

20 Fator de carga (%)% de sinônimos Relação entre fator de carga e overflows

21 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. Novak Rosen Jasper Moreley YORK hash(YORK) York

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

23 Número Médio de Busca (NMB) ChaveEndereço Adams20 Bates21 Cole21 Dean22 Evans20 Exemplo:

24 ChaveEndereço Adams20 Bates21 Cole21 Dean22 Evans20 Adams Bates Cole Dean Evans número de busca

25 NMB 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 Fator de carga D NMB

26 Abordagem de colisões por buckets Buckets: conjunto de registros associado a um mesmo endereço. Green30 Hall30 Jenks32 King33 Land33 Marx33 Nutt33 chave endereço GreenHall Jenks KingLandMarks Nutt é um overflow cada endereço pode conter 3 registros

27 Densidade de armazenamento por buckets Considera o número de endereços, 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

28 p(x)Sem bucketsCom buckets (r/N=0.75)(r/N=1.5) p(0) p(1) p(2) p(3) p(4) p(5) p(6) p(7) Distribuição de Poisson para os dois tipos de arquivos p(x)Sem bucketsCom buckets (r/N=0.75)(r/N=1.5) p(0) p(1) p(2) p(3) p(4) p(5) p(6) p(7)

29 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

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

31 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 chaves hash(chaves) End. real Adams55 Jones66 Morris67 Smith58 Adams Jones Morris Smith

32 chaves hash(chaves) End. real Adams55 Jones66 Morris67 Smith58 Adams Jones Morris Smith Apagando-se Morris Adams Jones Smith Smith está no arquivo? Adams Jones ######## Smith observe que Smith não se encontra na melhor posição após a supressão

33 Hashing duplo Objetivo: diminuir o clustering de registros em torno de um mesmo endereço menor NMB 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

34 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.

35 Exemplo 1: Overflow progressivo Adams20201 Bates21211 Cole20223 Dean21233 Evans24241 Flint20256 Chave hash(chave) End. real Comprimento de busca NMB = ( )/6 = Overflow progressivo encadeado Adams22 Bates23 Cole25 Dean Evans Flint NMB = ( )/6 = 1.7

36 Adams20 Bates21 Cole20 Dean22 Evans24 Flint20 Chave hash(chave) - Overflow progressivo encadeado Adams22 Bates Cole Dean Evans Flint Exemplo 2: ?

37 Á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

38 Adams0 Bates1 Evans Adams20 Bates21 Cole20 Dean21 Evans24 Flint20 Chave hash(chave) Exemplo: Cole2 Dean Flint NMB = ( )/6 = 1.7

39 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 h(K) K AdamsColeFlint BatesDean Evans

40 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).

41 Bibliografia: -- Michael J. Folk e Bill Zoellick. File Structures, Adisson-Wesley, 1992


Carregar ppt "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."

Apresentações semelhantes


Anúncios Google