Escolar Documentos
Profissional Documentos
Cultura Documentos
Histria
Os estudos sobre tabela hash surgiram independentemente em
vrios momentos e locais.
Teste Linear;
Teste Quadrtico e
Hashing Duplo.
Teste Linear
uma estratgia simples:
Sendo A a tabela onde se quer inserir o dado
Se ao tentar-se inserir o item na posio A[i] (porque h(k)=i), essa
j estiver ocupada ento tenta de novo na posio:
h1(k) = (i+1) % N, onde N o nro de entradas na Tabela Hash
Se essa posio tambm estiver ocupada, ento tenta-se na
posio:
h2(k) = (i+2) % N,
Exemplo
0
1
13 2
3
26 4
5 5
37 6
16 7
8
9
10
11
Exemplo 2
Suponha que queiramos inserir, nesta ordem, os caracteres da
palavra CHAVES utilizando o mtodo de resoluo de
colises Teste Linear;
O nmero de entradas (N) da Tabela Hash em questo 7;
Digamos que a funo hash o nmero do caractere na tabela
ASC.
Chave C H A V E S
K=ord(Chave) 67 72 65 86 69 83
Exemplo 2
Exemplo
h(k) = i % 7
h(k) = (i+1) % 7
Chave K = ord (chave) i0 = h(k) i1 = h(k) i2 = h(k) i3 = h(k)
C 67 4 - - -
H 72 2 - - -
A 65 2 3 - -
V 86 2 3 4 5
E 69 6 - - -
S 83 6 0 - -
Exemplo 2
Resultado final
Chave K = ord (chave) i0 = h(k) i1 = h(k) i2 = h(k) i3 = h(k)
C 67 4 - - -
H 72 2 - - -
A 65 2 3 - -
V 86 2 3 4 5
E 69 6 - - -
S 83 6 0 - -
0 1 2 3 4 5 6
S H A C V E
Teste Quadrtica Sondagem
Quadrtica
Utiliza uma funo hash auxiliar.
A sondagem quadrtica no garante que se encontre sempre
uma posio livre para um dado elemento.
Quando o tamanho da tabela primo, e se usa sondagem
quadrtica, sempre possvel inserir um elemento se a tabela no
estiver preenchida a mais de 50%
Desempenho aproxima-se do caso ideal sem agregao
A gerao de posies alternativas na sondagem quadrtica
pode ser realizada com apenas uma multiplicao : Hi= ( Hi-1 +
2i 1 ) mod TableSize
Exemplo Sondagem Quadrtica
hash(x) = x % 10
H(x) = ( hash(x) + i2 ) % 10
i a quantidade de sondagem
Exemplo: 58
H(x) = ( hash(x) + i2 ) % 10
H(x) = ( 8 + 02 ) % 10 = 8 //Ocupado
H(x) = ( 8 + 12 ) % 10 = 9 //Ocupado
H(x) = ( 8 + 22 ) % 10 = 2 //Livre
Hash Duplo
Um dos melhores mtodos disponveis para endereamento
aberto
h(35) = 35 mod 10
H(35) = 5
Exemplo Hash Duplo
A insero, em seguida, do valor 65 ser calculada da seguinte
maneira:
h(65) = 65 mod 10
h(65) = 5
rh(5,65) = (5 + 3) mod 10 = 8