Escolar Documentos
Profissional Documentos
Cultura Documentos
Roteiro
• Tabelas Hash
– Definição e Aplicações
– Funções Hashing
– Tratamento de Colisões
– Endereçamento Aberto
– Endereçamento Fechado
2
Unidade 01
ARMAZENAMENTO EM MAPAS
3
Armazenamento em Mapas
• Mapas
– permite o armazenamento de dados por meio da
relação entre valores e chaves
coluna de
valores
Nome Telefone
coluna de Ana 5523-2345
chaves Carlos 4325-8888
José 3455-2234
Paulo 3432-7665
Roberto 5646-6644
4
Armazenamento em Mapas
• Mapas
– Os mapas podem ser considerados como Tabelas
– Para adicionar novas informações, ou novos pares,
ao mapa utilizamos:
Mapa[“Flávio”] =
“4563-2233”
5
Armazenamento em Mapas
• Mapas
– Assim, temos:
Nome Telefone
Ana 5523-2345
Carlos 4325-8888
Flávio 4563-2233
José 3455-2234
Paulo 3432-7665
Roberto 5646-6644
6
Armazenamento em Mapas
• Mapas
– Os valores são recuperados por meio das chaves
Saída (resultado):
4325-8888
7
Armazenamento em Mapas
• Mapas
– Esses mapas são, em geral, implementados por
meio de Listas
– Uma Lista (ou Tabela) guarda os índices das
posições dos valores
8
Armazenamento em Mapas
• Mapas
Nome pos
Ana 3
Carlos 6
Idx Telefone
Flávio 5
1 3455-2234
José 1
2 5646-6644
Paulo 4
3 5523-2345
Roberto 2
4 3432-7665
5 4563-2233
6 4325-8888
9
Armazenamento em Mapas
• Problemas
– Como mapear chaves em valores?
– Como recuperar informações em tempo constante
O(1) ?
10
Unidade 01
TABELAS HASH
11
Tabelas Hash
• Objetivo
– realizar operações de inserção, remoção e busca
em tempo constante
• Função Hash
– é uma função que calcula (ou descobre) a posição
de um valor na tabela a partir da sua chave
12
Tabelas Hash
• Função Hash (características)
– ser simples de calcular rápidez
– assegurar que elementos distintos possuam
índices distintos
• função injetora: cada posição corresponde a uma
única chave
– gerar uma distribuição equilibrada para os
elementos dentro da tabela
• os valores não pode ficar aglomerados em
determinadas partes da tabela
Tabelas Hash
• Funções Hash
– criar uma função Hash nem sempre é uma tarefa
simples
– uma boa função Hash é aquela em que toda
entrada da tabela de valores possui a mesma
probabilidade de ser atingida pela função
Tabelas Hash
• Método da Divisão
– utiliza o tamanho da tabela como função de
espalhamento
– exemplo:
• suponha que os elementos da tabela são números
inteiros
• a função hash h(x) pode ser definida:
h(x) = x % tamanhotabela
Tabelas Hash
• Método da Divisão
– Principal problema:
• elementos distintos podem receber o mesmo índice na
tabela de valores, por exemplo:
– h(100) = 100 % 100 posição 0
– h(200) = 200 % 100 posição 0
– h(300) = 300 % 100 posição 0 colisões no
armazenamento dos
– h(400) = 400 % 100 posição 0 valores
– h(500) = 500 % 100 posição 0
22
Tabelas Hash
• Endereçamento Aberto
– Para inserir um novo elemento, a tabela é
examinada sucessivamente até encontrar uma
posição vazia
– Caso a posição esteja ocupada a função é aplicada
novamente
– Um ponto importante é que a tabela não é
percorrida completamente pois depende do
elemento inserido
23
Tabelas Hash
• Endereçamento Aberto
– Estratégias para definição da função Hash
• Espalhamento Linear
• Espalhamento Quadrático
• Espalhamento Duplo
24
Tabelas Hash
• Endereçamento Aberto
– Espalhamento Linear (Rehash linear)
• A posição da tabela para o elemento x é calculada como
se segue:
25
Tabelas Hash
• Endereçamento Aberto
– Espalhamento Linear (Rehash linear)
• Exemplo
– Considere a inserção dos caracteres ‘C’, ‘H’, ‘A’, ‘V’, ‘E’ e ‘S’
nessa ordem utilizando uma tabela com 7 posições
26
Tabelas Hash
• Exemplo:
– representação dos elementos por meio dos valores
da tabela ASCII
Elemento ASCII
C 67
H 72
A 65
V 86
E 69
S 83
27
Tabelas Hash
• Exemplo:
– Inserção do elemento ‘C’ = 67
• i = 0 nenhuma colisão
• h(67) = (67+i) % 7 Tabela Hash
• h(67) = 4 0
1
2
3
4 C
5
6
28
Tabelas Hash
• Exemplo:
– Inserção do elemento ‘H’ = 72
• i = 0 nenhuma colisão
• h(72) = (72+0) % 7 Tabela Hash
• h(72) = 2 0
1
2 H
3
4 C
5
6
29
Tabelas Hash
• Exemplo:
– Inserção do elemento ‘A’ = 65
• i = 0 nenhuma colisão
• h(65) = (65+0) % 7 Tabela Hash
• h(65) = 2 colisão 0
•i=1 1
• h(65) = (65+1) % 7 2 H
• h(65) = 3 3 A
4 C
5
6
30
Tabelas Hash
• Exemplo:
– Inserção do elemento ‘V’ = 86
• i = 0 nenhuma colisão
• h(86) = (86+0) % 7 Tabela Hash
• h(86) = 2 colisão 0
• h(86) = (86+1) % 7 1
i=1
• h(86) = 3 colisão 2 H
• h(86) = (86+2) % 7 3 A
i=2
• h(86) = 4 colisão 4 C
• h(86) = (86+3) % 7 5 V
i=3
• h(86) = 5
6
31
Tabelas Hash
• Exemplo:
– Inserção do elemento ‘E’ = 69
• i = 0 nenhuma colisão
• h(69) = (69+0) % 7 Tabela Hash
• h(69) = 6 0
1
2 H
3 A
4 C
5 V
6 E
32
Tabelas Hash
• Exemplo:
– Inserção do elemento ‘S’ = 83
• i = 0 nenhuma colisão
• h(83) = (83+0) % 7 Tabela Hash
• h(83) = 6 colisão 0 S
•i=1 1
• h(83) = (83+1) % 7 2 H
• h(83) = 0 3 A
4 C
5 V
6 E
33
Tabelas Hash
• Endereçamento Aberto
– Espalhamento Quadrático (Rehash quadrático)
• A posição da tabela para o elemento x é calculada como
se segue:
h(x) = h’(x)+c1i+c2i % tamanhotabela
34
Tabelas Hash
• Endereçamento Aberto
– Espalhamento Duplo (Rehash duplo)
• A posição da tabela para o elemento x é calculada como
se segue:
h(x) = h1(x)+ih2(x) % tamanhotabela
35
FIM
36