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 4 0 1 2 3 4 5 6

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 --------------------------------------------------------------------------------------------------------------- BALL66 6566x65=4290290 LOWELL76 7976x79=6004004 TREE84 8284x82=6888888

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 _ _ _ _ _ _ 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 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 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 = 13883 (LOWELL) a = 13883 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 1 2 3 4 5 6 7 8 9 10 abcdefgabcdefg abcdefgabcdefg 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 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, = 116281 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 – 99 382 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[0.0758 + 0.0126 + 0.0016 + 0.002 + 0] = 90 = 1000 – [607 + 303] = 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 [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.

20 Fator de carga (%)% de sinônimos 104.8 209.4 3013.6 4017.6 5021.4 6024.8 7028.1 8031.2 9034.1 10036.8 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 20 21 22 23 24 número de busca 1 1 2 2 5

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 30 31 32 33 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)0.4720.223 p(1)0.3540.335 p(2)0.1330.251 p(3)0.0330.126 p(4)0.0060.047 p(5)0.0010.014 p(6)--0.004 p(7)--0.001 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)0.4720.223 p(1)0.3540.335 p(2)0.1330.251 p(3)0.0330.126 p(4)0.0060.047 p(5)0.0010.014 p(6) --0.004 p(7) --0.001

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 4 5 6 7 8

32 chaves hash(chaves) End. real Adams55 Jones66 Morris67 Smith58 Adams Jones Morris Smith 4 5 6 7 8 Apagando-se Morris Adams Jones Smith 4 5 6 7 8 Smith está no arquivo? Adams Jones ######## Smith 4 5 6 7 8 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 = (1 + 1 + 3 + 3 + 1 + 6)/6 = 2.5 - Overflow progressivo encadeado Adams22 Bates23 Cole25 Dean Evans Flint 20 21 22 23 24 25 NMB = (1 + 1 + 2 + 2 + 1 + 3)/6 = 1.7

36 Adams20 Bates21 Cole20 Dean22 Evans24 Flint20 Chave hash(chave) - Overflow progressivo encadeado Adams22 Bates Cole Dean Evans Flint 20 21 22 23 24 25 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 20 21 22 23 24 Adams20 Bates21 Cole20 Dean21 Evans24 Flint20 Chave hash(chave) Exemplo: Cole2 Dean Flint 0 1 2 3 NMB = (1 + 1 + 2 + 2 + 1 + 3)/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 20 21 22 23 24 25 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