Hashing
This presentation is the property of its rightful owner.
Sponsored Links
1 / 39

Hashing PowerPoint PPT Presentation


  • 119 Views
  • Uploaded on
  • Presentation posted in: General

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.

Download Presentation

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


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)

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


Hashing

chave

k = Adão

h(k)

0

h(k)

1

2

3

endereço 4

4

5

6


Hashing

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.

NomeASCII das duasProduto Endereço

priemeiras letras

---------------------------------------------------------------------------------------------------------------

BALL66 6566x65=4290290

LOWELL76 7976x79=6004004

TREE84 8284x82=6888888


Hashing

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)


Hashing

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


Hashing

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


Hashing

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


Hashing

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


Hashing

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


Hashing

  • 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


Hashing

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


Hashing

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.


Hashing

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:


Hashing

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

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


Hashing

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)


Hashing

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


Hashing

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


Hashing

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.


Hashing

Relação entre fator de carga e overflows


Hashing

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)


Hashing

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!


Hashing

Comprimento Médio de Busca (CMB)

Exemplo:


Hashing

comprimento da busca

1

20

1

21

2

22

2

23

5

24


Hashing

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


Hashing

Abordagem de colisões por buckets

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

chave

endereço

Green30

Hall30

Jenks32

King33

Land33

Marx33

Nutt33

cada endereço pode conter 3 registros

30

31

32

Nutt é um

overflow

33


Hashing

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


Hashing

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

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


Hashing

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


Hashing

Overflow de registros em função de diferentes tamanhos de buckets

e fator de carga

Tamanho do bucket

Fator de

carga

Porcentagem de overflows


Hashing

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

chaveshash(chaves) End. real

Adams55

Jones66

Morris67

Smith58

5

6

7

8


Hashing

Apagando-se Morris

4

chaveshash(chaves) End. real

Adams55

Jones66

Morris67

Smith58

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


Hashing

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


Hashing

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.


Hashing

Exemplo 1: Overflow progressivo

Chave hash(chave) End. real Comprimento de busca

Adams20201

Bates21211

Cole20223

Dean21233

Evans24241

Flint20256

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


Hashing

Exemplo 2:

Chave hash(chave)

Adams20

Bates21

Cole20

Dean22

Evans24

Flint20

- Overflow progressivo encadeado

20

21

22

23

24

25


Hashing

Á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


Hashing

Exemplo:

Chave hash(chave)

Adams20

Bates21

Cole20

Dean21

Evans24

Flint20

20

0

21

1

22

2

23

3

24


Hashing

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


Hashing

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


  • Login