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

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

Hashing Hashing estático

Apresentações semelhantes


Apresentação em tema: "Hashing Hashing estático"— Transcrição da apresentação:

1 Hashing Hashing estático
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 chave k = Adão Registros Adão h(k) h(k) 1 2 3 endereço 4 4 5 6

3 75 registros de nomes de pessoas devem ser armazenados num espaço
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. Nome ASCII das duas Produto 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
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 _ _ _ _ _ _ 2. | | | | | | | =

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; mod = 16448 = 24128; mod = 4187 = 7419; 7419 mod = 7419 = 10651; mod = 10651 = 13883; mod = 13883

7 arquivo. O endereço resultante, a, pode ser dado por: a = s mod n
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 =  primo !!! s = (LOWELL) a = mod = 84 75/101 = 0,743 = 74% do espaço utilizado 84 LOWELL

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

9 Funções de Hashing 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

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

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

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:

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 =  r/N = 1 Podemos estimar o número de endereços com: x = 0 registro: x p(0) = 367,  endereço sem registros x = 1 registro: x p(1) = 367,  nenhuma colisão x = 2 registros: x p(2) = 183,  183,9 registros com um sinônimo x = 3 registros: X p(3) = 61,  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? = 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 10 4.8 20 9.4 30 13.6 40 17.6 50
Relação entre fator de carga e overflows Fator de carga (%) % de sinônimos 10 4.8 20 9.4 30 13.6 40 17.6 50 21.4 60 24.8 70 28.1 80 31.2 90 34.1 100 36.8

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 York hash(YORK)

22 Jello Procurando um registro que não existe: Blue . hash(Blue)
área vázia  Blue não existe no arquivo Blue . hash(Blue) Jello 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)
Exemplo: Chave Endereço Adams 20 Bates 21 Cole Dean 22 Evans

24 Adams Bates Cole Dean Evans Chave Endereço Adams 20 Bates 21 Cole Dean
22 Evans número de busca Adams Bates Cole Dean Evans 20 1 1 21 22 2 2 23 5 24

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

26 Abordagem de colisões por buckets
Buckets: conjunto de registros associado 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 Green Hall Jenks King Land Marks 30 31 32 Nutt é um overflow 33

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 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) p(1) p(2) p(3) p(4) p(5) p(6) p(7) p(x) Sem buckets Com 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 Overflow de registros em função de diferentes tamanhos de buckets
e fator de carga Tamanho do bucket Fator de carga Porcentagem de overflows

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 Adams Jones Morris Smith 4 chaves hash(chaves) End. real Adams 5 5 Jones 6 6 Morris 6 7 Smith 5 8 5 6 7 8

32 observe que Smith não se encontra na melhor posição após a supressão
Apagando-se Morris Adams Jones Morris Smith 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 Adams Jones Smith 4 5 Adams Jones ######## Smith 4 6 5 7 6 8 7 Smith está no arquivo? 8

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
Chave hash(chave) End. real Comprimento de busca Adams Bates Cole Dean Evans Flint NMB = ( )/6 = 2.5 - Overflow progressivo encadeado 20 Adams 22 Bates 23 Cole 25 Dean -1 Evans Flint 21 22 23 24 25 NMB = ( )/6 = 1.7

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

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 Exemplo: Adams 20 Bates 21 Cole 20 Dean 21 Evans 24 Flint 20
Chave hash(chave) Adams 20 Bates 21 Cole 20 Dean 21 Evans 24 Flint 20 Adams Bates 1 Evans -1 20 Cole 2 Dean -1 Flint 21 1 22 2 23 3 24 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 Adams Cole Flint -1 20 21 Bates Dean -1 K 22 h(K) 23 Evans -1 24 25

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 Hashing estático"

Apresentações semelhantes


Anúncios Google