You are on page 1of 2

Hash Linear

Esquema Geral : rodada k


cesto b

Hash Linear

cesto Next
a ser dividido
m = nmero de cestos
da rodada k
cestos existentes
no inicio da rodada k

Cesto b + m
Imagens dos cestos divididos

Hash Linear exemplo


com h(k)= k mod 4

Hash Linear





Insero de 43*

Assim como o Hash Extensvel, o Hash Linear


ideal para inseres e supresses;
Vantagem sobre extensvel
Lida muito bem com colises
Oferece muita flexibilidade

h1

h0

000

00

32* 44* 36*

001

01

9*

010

10

14* 18* 10* 30*

011

11

31* 35* 7*

00
2

Hash Linear
Parmetros e Contadores

43*

44* 36*
Pginas Primrias

h1

h0

000

00

Nivel = 0 , N = 4 = 22

h0(18) = 2 (10)

32*
Next = 1

Inicializado com 0

N0 = N

Nm = N*2m

Somente o cesto Next dividido.

11*

Inicializado com 0

Nm = nmero de cestos na rodada m

Esta informao no
armazenada !

25* 5*

Busca de 18*

Next = cesto que deve ser dividido, se necessrio




h0(43) = 3 (11)

Hash Linear - exemplo

Nivel = indica a rodada atual




Next = 0

Next = 1

Cadeias de overflow podem tornar o hash linear


inferior em desempenho se comparado ao hash
extensivel

Nivel = 0 , N = 4 = 22

001

01

9*

25* 5*

010

10

14* 18* 10* 30*

011

11

31* 35* 7*

100

00

11*

2 > Next
cesto 2 no foi
dividido ainda

43*

Usa-se pginas de overflow para os outros cestos, se ficarem


cheios.
Aps diviso, Next incrementado.
3

44* 36*
6

Hash Linear - exemplo

Hash Linear - exemplo

Incremento de Nvel

Busca de 32* e 44*


Nivel = 1
h1
000

h0

Nivel = 0 , N = 4 = 22

00

h0(32) = 00

01

9*

0 < Next

010

10

14* 18* 10* 30*

011

11

31* 35* 7*

100

00

43*

11*

h1(32) = 000

44* 36*

h1(44) = 100

Bucket 0 + 4

Hash Linear - exemplo

Insero de 37*
h0(37) = 01
000

00

32*

001

01

9*

010

10

14* 18* 10* 30*

011

11

31* 35* 7*

100

00

Next = 1
25* 5*

37*

11*

43*

44* 36*
8

Hash Linear - exemplo

Insero de 29*
00

32*

001

01

9*

h0(50) = 10
25*

h0(29) = 01

32*
Next =1

001

01

9*

25* 5*

010

10

14* 18* 10* 30*

011

11

31* 35* 7*

100

00

44* 36*

101

01

5*

37*

11*

010

10

66* 18* 10* 34*

011

11

43*
7* 11*
31* 35* 11*

100

00

44* 36*

101

01

5*

h1(50) = 010
50*
Next =3

25* 5*
cesto 0 j foi
dividido

000

00

h0(44) = 00

32*
Next = 1

001

Next =0
000

Next =2

43*

37* 29*
9

43*

37* 29*

110

10

14* 30* 22*

111

11

31* 7*

10

You might also like