40
Hashing nte, técnicas de hashing permitem acesso dinâmico aos dados (inserçã ) numa complexidade que independe do número N de registros do arquiv Hashing estático para arquivos que não variam de tamanho Função de hashing unção que gera um endereço aleatório a partir de uma dada chave. uas chaves podem definir dois endereços idênticos COLISÃO

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

Embed Size (px)

Citation preview

Page 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

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

Page 2: 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

h(k)h(k)

chavek = Adão

Registros

Adãoendereço 4

0

1

2

3

4

5

6

Page 3: 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

Exemplo simples

• 75 registros de nomes de pessoas devem ser armazenados num espaçode 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çoprimeiras letras

---------------------------------------------------------------------------------------------------------------BALL 66 65 66x65=4290 290LOWELL 76 79 76x79=6004 004TREE 84 82 84x82=6888 888

Page 4: 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

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 formaque 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 aonúmero de registros a serem armazenados (perda de espaço!!)

• associar mais de um registro a um único endereço (buckets)

Page 5: 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

Exemplo de um algoritmo de hashing

1. represente a chave numericamente2. subdivida-a e adicione os diferentes subconjuntos3. 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

Page 6: 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

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 = 1644816448 + 7676 = 24128; 24128 mod 19937 = 41874187+ 3232 = 7419; 7419 mod 19937 = 74197419 + 3232 = 10651; 10651 mod 19937 = 1065110651 + 3232 = 13883; 13883 mod 19937 = 13883

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

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 noarquivo. O endereço resultante, a, pode ser dado por:

a = s mod nque 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 utilizado84 LOWELL

Page 8: 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

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

Page 9: 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

Funções de Hashing

abcdefg

12345678910

abcdefg

abcdefg

12345678910

12345678910

ideal (uniforme) ruim aceitável

Page 10: 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

Mais exemplos de funções

• “Mid-square”: transforma a chave num grande número decimal, eleva-oao quadrado e extrai dígitos do meio desta representação, proporcional aonúmero de casas decimais do maior endereço disponível

Ex.: endereços entre 0-99 chave = 341, 2chave = 116281

endereço da chave = 62

Page 11: 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

• Transformação de base: converte a representação numérica decimal dachave para outra base; calcula o mod deste resultado com o máximo ende-reço disponível.

Ex.: Endereços entre 0 – 99

453 chave10

382chave11 382 mod 100 = 82

)3( 0113

)8( 31141

)2( 4111453

resto

resto

resto

Conversão para a base 11:

Page 12: 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

Análise da distribuição dos registros no arquivo

• Calcula as diversas probabilidades de distribuição dos registros nos endereçosdisponíveis

• Baseia-se na distribuição de Poisson

!

)/()(

)/(

x

eNrxp

Nrx

Função de Poisson

Page 13: 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

!

)/()(

)/(

x

eNrxp

Nrx

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.

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

Exemplo:

N = 1000 endereços disponíveis r = 1000 registros a serem armazenados

colisões) de adeprobabilid (grande 1N

r

• Probabilidade de um dado endereço receber x = 0 registro:

%79,363679,0!0

1)0(

10

e

p

• Probabilidade de um endereço receber x = 1 registro:

%79,363679,0!1

1)1(

11

e

p

Page 15: 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

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

%4,18184,0!2

1)2(

12

e

p

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

%1,6061,0!3

1)3(

13

e

p

Page 16: 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

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:

)(xpN

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)

Page 17: 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

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:

N

rD

sdisponívei endereços de número

registros de número

Exemplo:

%505.01000

500

N

rdo espaço utilizado no arquivo

Page 18: 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

Questões:

1- Para este fator de carga, quantos endereços ficarão sem registrosassociados?

607607.01000!0

)5.0(1000)0(

5.00

e

pN

2- Quantos endereços devem receber exatamente 1 registro?

303303.01000!1

)5.0(1000)1(

5.01

e

pN

3- Quantos endereços devem receber um registro mais um ou maissinônimos?

] ...)5()4()3()2([ ppppN0

= 1000[0.0758 + 0.0126 + 0.0016 + 0.002 + 0] = 90= 1000 – [607 + 303] = 90

Page 19: 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

4- Considerando-se apenas um registro/endereço, quantos overflows ocorrem no arquivo?

p(2) 1 overflowp(3) 2 overflowp(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?

%4,21214,0500

107

Conclusão: Para um fator de carga igual a 50%, e cada endereço comum único registro, podemos obter 21% de todos os registros originandocolisões no arquivo.

Page 20: 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

Fator de carga (%) % de sinônimos10 4.820 9.430 13.640 17.650 21.460 24.870 28.180 31.290 34.1

100 36.8

Relação entre fator de carga e overflows

Page 21: 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

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.

NovakRosen

Jasper

Moreley

YORK

hash(YORK)

York

Page 22: 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

Procurando um registro que não existe:

Jello

.

.

.hash(Blue)

Blue

área vázia Blue não existeno arquivo

Se arquivo cheio, a busca sequencial retorna ao ponto de partida (ciclo completo) a busca se torna inviável!

Page 23: 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úmero Médio de Busca (NMB)

registros de totalnúmero

busca de totalnúmeroNMB

Chave Endereço

Adams 20

Bates 21

Cole 21

Dean 22

Evans 20

Exemplo:

Page 24: 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

Chave Endereço

Adams 20

Bates 21

Cole 21

Dean 22

Evans 20

Adams

Bates

Cole

Dean

Evans

20

21

22

23

24

número de busca

1

1

2

2

5

2.25

52211

NMB

Page 25: 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

NMB versus fator de carga para uma função de hashing com um registro porendereço e overflow progressivo empregado no caso de colisões

Fator de carga D

NMB

Page 26: 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

Abordagem de colisões por buckets

• Buckets: conjunto de registros associado a um mesmo endereço.

Green 30Hall 30Jenks 32King 33Land 33Marx 33Nutt 33

chave endereço

Green Hall

Jenks

King Land Marks

30

31

32

33Nutt é umoverflow

cada endereço pode conter 3 registros

Page 27: 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

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 dosbuckets):

bN

rDB

Ex.:

r = 750N = 1000b = 1 750/1000 = 75%

r = 750N = 500b = 2 750/1000 = 75%

r/N = 0.75 r/N = 1.5

Page 28: 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

p(x) Sem buckets Com buckets(r/N=0.75) (r/N=1.5)

p(0) 0.472 0.223p(1) 0.354 0.335p(2) 0.133 0.251p(3) 0.033 0.126p(4) 0.006 0.047p(5) 0.001 0.014p(6) -- 0.004p(7) -- 0.001

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.223p(1) 0.354 0.335p(2) 0.133 0.251p(3) 0.033 0.126p(4) 0.006 0.047p(5) 0.001 0.014p(6) -- 0.004p(7) -- 0.001

Page 29: 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

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

Page 30: 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

Fator decarga

Tamanho do bucket

Porcentagem de overflows

Overflow de registros em função de diferentes tamanhos de bucketse fator de carga

Page 31: 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

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

Adams 5 5Jones 6 6Morris 6 7Smith 5 8

Adams

Jones

Morris

Smith

4

5

6

7

8

Page 32: 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

chaves hash(chaves) End. real

Adams 5 5Jones 6 6Morris 6 7Smith 5 8

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

Page 33: 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

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.

Page 34: 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

Exemplo 1: Overflow progressivo

Adams 20 20 1Bates 21 21 1Cole 20 22 3Dean 21 23 3Evans 24 24 1Flint 20 25 6

Chave hash(chave) End. real Comprimento de busca

NMB = (1 + 1 + 3 + 3 + 1 + 6)/6 = 2.5

- Overflow progressivo encadeadoAdams 22

Bates 23

Cole 25

Dean -1

Evans -1

Flint -1

20

21

22

23

24

25

NMB = (1 + 1 + 2 + 2 + 1 + 3)/6 = 1.7

Page 35: 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

Adams 20 Bates 21 Cole 20 Dean 22 Evans 24 Flint 20

Chave hash(chave)

- Overflow progressivo encadeadoAdams 22

Bates -1

Cole

Dean -1

Evans -1

Flint -1

20

21

22

23

24

25

Exemplo 2:

?

Page 36: 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

Á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 tempode seek

Page 37: 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

Adams 0

Bates 1

Evans -1

20

21

22

23

24

Adams 20 Bates 21 Cole 20 Dean 21 Evans 24 Flint 20

Chave hash(chave)

Exemplo:

Cole 2

Dean -1

Flint -1

0

1

2

3

NMB = (1 + 1 + 2 + 2 + 1 + 3)/6 = 1.7

Page 38: 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

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

Adams Cole Flint -1

Bates Dean -1

Evans -1

Page 39: 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

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

Page 40: 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

Bibliografia:

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