Hash
II
Centro
de
Inform-ca
Universidade
Federal
de
Pernambuco
Sistemas
de
Informao
Vinicius
Cardoso
Garcia
vcg@cin.ufpe.br
Introduo
Conforme
visto
na
aula
passada
as
tabelas
hash:
Diminuem
a
quan-dade
de
endereamento
quando
comparadas
a
uma
tabela
de
endereamento
direto
Calcula
os
ndices
(ou
endereos)
a
par-r
da
funo
hash
(h)
Funes
Hash
O
que
faz
uma
funo
hash
de
boa
qualidade?
Sa-sfaz,
aproximadamente,
hiptese
do
hash
uniforme
Cada
chave
tem
igual
probabilidade
de
efetuar
o
hash
para
qualquer
das
m
posies,
no
importando
o
hash
de
qualquer
outra
chave.
Funes
Hash
Na
pr-ca
u-lizam-se:
Heurs-cas
para
denir
as
funes
hash
De
forma
geral,
as
funes
hash
supoe
que
o
universo
de
chaves
o
conjunto
de
nmeros
naturais
N.
E
a
par-r
de
uma
chave
qualquer
realizam
alguma
operao
para
represent-la
por
um
nmero
inteiro!
Mtodo
de
Diviso
Exemplo:
Suponha
uma
tabela
hash,
com
colises
resolvidas
com
encadeamento,
para
conter
aproximadamente
2000
cadeias
de
caracteres
Suponha
tambm
tolera-se
uma
pesquisa
malsucedida
com
uma
mdia
de
3
elementos
Assim,
m=701
Primo
prximo
de
2000/3
e
distante
de
qualquer
potencia
de
2.
Mtodo
da
MulJplicao
Este
mtodo
opera
em
duas
etapas:
Primeira:
Mul-plica-se
a
chave
k
por
uma
constante
A
(0
<
A
<
1)
e
extrai-se
a
parte
fracionria
de
kA.
Segunda:
Mul-plica-se
o
valor
encontrado
por
m
e
toma-se
o
piso.
Funo
Hash:
h(k)
=
m(kA
mod
1)
Quanto ao valor dee
A:
Quanto
ao
valor
d A: funcionar
c com qualquer alor
de A. Contudo, Ir
Ir funcionarom
qualquer
vvalorde
A.
Contudo,
funciona melhor com determinados valores que funciona
melhor
com
determinados
valores
que
outros. outros.
Por exemplo: um valor sugerido
Por
exemplo:
um
valor
sugerido
A!" # 5$1%&0,6180339887'
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
Hash
Universal
Dado
que
uma
tabela
hash
tenha
uma
funo
hash
xa
Assim,
um
possvel
ataque
a
esta
mquina
seria
a
escolha
das
chaves
que
geram
o
mesmo
hash!
A
nica
maneira
ecaz
de
melhorar
a
situao
escolher
uma
funo
hash
aleatoriamente
Esta
abordagem
chamada
de
hash
universal.
Ou
seja,
escolhe-se
uma
funo
hash
ao
acaso
a
par-r
de
uma
classe
de
funes
cuidadosamente
projetada
no
incio
da
aplicao.
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
Hash
Universal
Seja
H
uma
coleo
nita
de
funes
hash
que
mapeia
um
dada
universo
de
chaves
no
intervalo
{0,
1,
...,
m-1}
Esta
coleo
dita
ser
universal
se,
para
cada
para
de
chaves
k,l
H,
o
nmero
de
funes
hash
H
para
as
quais
h(k)=h(l)
no
mximo
H
Ou
seja,
as
chaces
de
coliso
no
maior
que
1/m
10
Hash
Universal
Teorema11.3
Suponha
que
uma
funo
hash
h
seja
escolhida
a
par-r
de
uma
coleo
universal
de
funes
hash
e
seja
usada
para
efetuar
o
hash
de
n
chaves
em
uma
tabela
T
de
tamanho
m,
usando
encadeamento
para
resolver
as
colises.
Se
a
chave
k
no
est
na
tabela,
esto
o
comprimento
mximo
esperado
para
nh(k)
da
lista
para
a
qual
a
chave
k
efetua
o
hash
no
mximo
.
Se
a
chave
k
est
na
tabela,
ento
o
comprimento
esperado
nh (k)
da
lista
que
contm
a
chave
k
no
mximo
1
+
.
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
11
Hash
Universal
Corolrio
11.4:
Usando-se
o
hash
universal
e
a
resoluo
de
colises
pelo
encadeamento
em
uma
tabela
com
m
posies,
demora
o
tempo
esperado
(n)
para
tratar
qualquer
sequncia
de
n
operaes
INSERT,
SEACH
e
DELETE
contendo
O(m)
operaes
INSERT.
12
Projeto
de
classe
universal
de
funes
hash
Inicialmente
escolhe-se
um
nmero
primo
p
grande
o
suciente
para
que
todas
chave
k
possvel
esteja
no
intervalo
[0,
p-1]
Seja
Z*p
=
{0,
1,
...,
p-1}
e
Zp
=
{1,
...,
p-1},
onde
p
>
m.
possvel
denir
a
funo
hash
ha,b
para
qualquer
a
Z*p
e
b
Zp
sando
a
transformao
linear:
Cada
funo
hash
ha,b(k)
mapeia
Zp
para
Zm
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
13
Endereamento
Aberto
No
endereamento
aberto,
todos
os
elementos
esto
armazenados
na
prpria
tabela
hash
Para
se
inserir
um
elemento
com
endereamento
aberto,
sondamos
a
tabela
at
encontrarmos
uma
posio
vazia.
Para
determinar
quais
as
posies
a
serem
sondadas,
estende-se
a
funo
hash:
H:
U
x{0,1,...,m-1}{0,1,...,m-1}
Assim,
para
uma
chave
k,
a
sequncia
de
sondagem
:
h(k,0),
h(k,1),
...,
h(k,
m-1)
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
14
HASH-INSERT(T,k)
1. 2. 3. 4. 5. 6. 7. 8. i
0
Repeat
jh(k,i)
if
T[j]
=
None
T[j]k
return
j
else
i
i+1
Un-l
i
=
m
Error
Hash
table
overow
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
15
HASH-SEARCH(T,k)
1. 2. 3. 4. 5. 6. 7.
i
0
Repeat
jh(k,i)
if
T[j]
=
K
return
j
i
i+1
Un-l
T[j]
=
None
or
i=m
Return
None
16
Sondagem
Linear
Dada
uma
funo
de
hash
comum
h',
referida
como
funo
hash
auxiliar,
a
sondagem
linear
:
h(k,i)=(h'(k)+i)
mod
m,
i=0,1,...,m-1
17
Sondagem
QuadrJca
A
funo
hash
da
forma:
h(k,i)
=
(h'(k)+c1i+c2i2)
mod
m
Onde
C1
e
C2
so
constantes
auxiliares
diferentes
de
zero.
18
Corolrio
11.7:
A
insero
de
um
elemento
em
uma
tabela
hash
de
endereo
aberto
com
fator
de
carga
exige
no
mximo
1/(1-)
sondagens
em
mdia,
supondo-
se
hash
uniforme
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
19
supondo-se
o
hash uniforme ee
considerando-se
supondo-se o hash
uniforme
considerando-se que
cada
chave
na
tabela
tem
igual
probabilidade
que cada chave na tabela tem igual de
probabilidade de ser pesquisada. ser
pesquisada.
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
20
AJvidades
complementares
Leitura
do
captulo
11
do
Cormen
Exerccios
1. Considera
uma
Tabela
hash
com
m=1000
e
a
funo
hash
h(k)
=
m(kA
mod
1)
para
A=(Sqrt(5)-1)/2.
Implemente
uma
funo
que
calcule
os
hash
para
uma
chave
k
2. Implemente
em
Python
uma
tabela
hash
de
endereamento
aberto
.
Seja
a
tabela
com
11
posies,
e
seja
a
funo
de
hash
primria
h'(k)=k
mod
m.
Demostre
a
insero
das
chaves
5,
28,
19,
15,
20,
33,
12,
17
e
10.
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
21