Documente Academic
Documente Profesional
Documente Cultură
Hash
I
Centro
de
Inform-ca
Universidade
Federal
de
Pernambuco
Sistemas
de
Informao
Vinicius
Cardoso
Garcia
vcg@cin.ufpe.br
Tabelas
Hash
O
que
melhor,
um
arranjo
ou
uma
lista
encadeada?
Tabelas
Hash
O
que
melhor,
um
arranjo
ou
uma
lista
encadeada?
Um
arranjo
melhor
se
voc
souber
quantos
objetos
sero
armazenados
,
j
que
assim
poderemos
acessar
qualquer
elemento
do
arranjo
em
uma
performance
O(1)
Tabelas
Hash
O
que
melhor,
um
arranjo
ou
uma
lista
encadeada?
Um
arranjo
melhor
se
voc
souber
quantos
objetos
sero
armazenados
,
j
que
assim
poderemos
acessar
qualquer
elemento
do
arranjo
em
uma
performance
O(1)
Porm,
uma
lista
encadeada
melhor
se
voc
-ver
que
mudar
o
nmero
de
elementos
armazenados
de
forma
dinmica
e
de
maneira
signica-va,
ou
se
exis-r
relaes
complexas
entre
os
elementos
(indicando
o
comportamento
de
vizinhos,
por
exemplo)
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
Tabelas
Hash
E
ento
o
que
fazer?
Combinar
a
vantagem
dos
dois!
0
1 2 3
4
025-612-0001
981-101-0002
451-229-0004
Tabelas
Hash
Seria
-mo
se
os
arranjos
pudessem
ser
denidos
com
tamanho
innito
sem
penalizaes
Assim,
todo
elemento
teria
um
lugar
reservado
no
arranjo
46256288
46256289
46256290
Elem.
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
Tabelas
Hash
Ento
ns
foramos
o
arranjo
innitas
vezes.
Em
outras
palavras,
o
nmero
de
espaos
para
armazenar
elementos
pequeno,
mas
cada
espao
pode
comportar
muitos
elementos
Elem.
Elem.
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
Tabelas
Hash
Ento,
como
ns
podemos
manter
todos
os
elementos
pertencendo
ao
mesmo
espao
de
armazenamento?
Elem.
Elem.
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
Tabelas
Hash
Ento,
como
ns
podemos
manter
todos
os
elementos
pertencendo
ao
mesmo
espao
de
armazenamento?
Resposta:
Lista
Encadeada
Elem.
Elem.
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
Tabelas
Hash
Como
localizamos
os
elementos?
Elem.
Elem.
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
10
Tabelas
Hash
Como
localizamos
os
elementos?
U-lizando
uma
funo
hash
para
localizar
o
elemento
no
arranjo
Elem.
Elem.
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
11
Tabelas
Hash
Como
localizamos
os
elementos?
U-lizando
uma
funo
hash
para
localizar
o
elemento
no
arranjo
Seguimos
pela
lista
encadeada
para
encontrar
o
elemento
Elem.
Elem.
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
12
Tabelas
Hash
Como
localizamos
os
elementos?
U-lizando
uma
funo
hash
para
localizar
o
elemento
no
arranjo
Seguimos
pela
lista
encadeada
para
encontrar
o
elemento
Elem.
Elem.
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
13
Tabelas
Hash
Como
localizamos
os
elementos?
U-lizando
uma
funo
hash
para
localizar
o
elemento
no
arranjo
Seguimos
pela
lista
encadeada
para
encontrar
o
elemento
Elem.
Elem.
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
14
Tabelas
Hash
Como
localizamos
os
elementos?
U-lizando
uma
funo
hash
para
localizar
o
elemento
no
arranjo
Seguimos
pela
lista
encadeada
para
encontrar
o
elemento
Elem.
Elem.
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
15
Tabelas
Hash
Muitas
aplicaes
exigem
de
forma
dinmica
apenas
as
operaes
de
dicionrio:
Inserir
(insert)
Pesquisar
(search)
Deletar
(delete)
Uma tabela hash uma estrutura de dados eciente para implementar dicionrios!
16
17
Suponha
que
uma
dada
aplicao
necessite
de
um
conjunto
dinmico
onde
cada
elemento
tenha
uma
chave
denida
a
par-r
do
universo
U={0,1,...,m-1}
Onde
m
no
muito
grande,
e
no
h
dois
elementos
com
a
mesma
chave
18
19
20
Operaes
de
um
Dicionrio
DIRECT-ADDRESS-SEARCH(T,k)
return
T[k]
DIRECT-ADDRESS-INSERT(T,k)
T[chave[k]]
x
DIRECT-ADDRESS-DELETE(T,k)
T[chave[k]]
None
Observe
que
todas
estas
operaes
so
rpidas:
necessrio
apenas
tempo
O(1)
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
21
Tabelas
Hash
Qual
a
diculdade
do
endereamento
direto?
Se
o
universo
U
muito
grande,
o
armazenamento
de
uma
tabela
T
de
tamanho
|U|
pode
ser
impra-cvel!
Alm
do
que
a
quan-dade
de
chaves
reais
u-lizadas
pode
ser
muito
menor
que
|U|
implicando
que
a
maior
parte
de
T
seria
desperdiada.
Para
este
caso,
uma
tabela
hash
exige
muito
menos
espao
de
endereamento
do
que
uma
tabele
de
endereamento
direto!
Os
requisitos
de
armazenamento
so
(|k|)
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
22
Tabela Hash
Tabela Hash
Em
uma
tabela
hash,
um
elemento
com
chave
! Em uma tabela hash,a
posio
h(k)
k
armazenado
n um elemento com chave k
armazenado na posio ,
que
u-lizada
para
Ou
seja,
funo
hash
h h(k) " Ou calcular
a
posio
do
elemento
a
par-r
da
chave
seja, funo hash h, que utilizada para calcular a posio do elemento a partir da chave k. k.
! Funo Hash Funo
Hash
"
Mapeamento do Universo U de chaves nas posies Mapeamento do Universo U de chaves nas da tabela hash T[0..m-1]
23
Tabelas Hash
Tabelas
Hash
T
0
h(k1)
Universo U
K (Chaves Reais) k1 k4 k2 k5
h(k4)
h(k2)=h(k5)
! dito que um dito que um elemento com chave k ecom chave elemento fetua o hash efetua posio h(k) k para a o hash para a posio h(k) dito tambm que h(k) ! v dito tambm que o alor hash da chave k. h(k) o valor hash da chave k.
m-1
24
Exemplo
de
Hashing
Suponha
que
1.
O
espao
de
chaves
so
os
nmeros
inteiros
de
quatro
dgitos,
e
2.
Deseja-se
traduz-los
no
conjunto
{0,
1,
...,
7}.
25
Exemplo
de
Hashing
Se
o
conjunto
de
dados
for
cons-tudo
pelos
anos:
1055,
1492,
1776,
1812,
1918
e
1945,
a
hash
func+on
f
(x)
=
(5
x)
mod
8
gerar
o
seguinte
mapeamento:
Ex:
f
(1055)
=
(5
1055)
mod
8
=
5275
mod
8
=
3
26
Coliso
No
exemplo
anterior
dizemos
que
entre
as
chaves
1492
e
1812
ocorreu
uma
coliso,
isto
estas
duas
chaves
geraram
o
mesmo
hash
code,
ou
seja,
foram
mapeadas
no
mesmo
ndice.
ndice:
0
1
2
3
4
5
6
7
Chave:
1776
2002
1055
1492
1945
1918
1812
27
Colises
A
melhor
soluo
evitar
as
colises!
Contudo,
|U|
>
m
avendo
uma
chance
muito
grande
para
haver
colises!
Assim,
temos
que
desenvolver
tcnicas
para
poder
tratar
as
colises.
28
None None
k5
Universo U
K (Chaves Reais) k1 k4 k2 k5
k4
k2
None
29
CHAINED-HASH-SEARH(T,k)
Procura
por
um
elemento
com
a
chave
k
na
lista
T[h(k)]
CHAINED-HASH-DELETE(T,k)
Elimina
o
elemento
x
da
lista
T[h(chave[x])]
30
31
32
"
"
e,
e,
n j# E 'n j (#
n ) Fator de Carga m
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
33
34
Teorema
11.2
Em
uma
tabela
hash
na
qual
as
colises
so
resolvidas
por
encadeamento,
uma
pesquisa
bem-
sucedida
demora
o
tempo
(1+),
na
mdia,
sob
a
hiptese
de
hash
uniforme
simples.
Algoritmos
e
Estrutura
de
Dados
Tabelas
Hash
2011
Vinicius
Cardoso
Garcia
35
36
Advidades
complementares
Leitura
do
Captulo
11
do
Cormen
Desao:
Prove
os
teoremas
11.1
e
11.2
Implemente
em
Java
uma
tabela
hash
com
colises
resolvidas
por
encadeamento.
Seja
a
tabela
com
9
posies,
e
seja
a
funes
de
hash
h(k)=k
mod
9.
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
37