Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Hash Tables
“Tabelas de Espalhamento”
Estruturas de Dados
Prof. Vilson Heck Junior
Hash Table
• Como Estrutura de Dados:
– Serve para organizar e armazenar dados
de forma a agilizar o processo de
pesquisa;
– Pode ser programada de diversas
formas, sendo a mais comum com o uso
de array e listas dinâmicas.
Tabela Hash
• Usos mais comuns:
– Indexação de grandes volumes de 
informação;
– Classificação por categorias;
– Softwares per-to-per (BitTorrent);
– Entre outros.
Tabela Hash
• São elementos compositores:
– Função Hash (Função de 
espalhamento);
– Chaves de Pesquisa;
– Índices Hash;
– Array de informações ou de listas de 
informações.
Função Hash
• Responsável pelo “espalhamento”
(distribuição) dos dados, através da geração
do índice do elemento com base em uma
determinada chave e operação matemática;
• O desempenho da tabela, como um todo, é
completamente dependente do
planejamento desta função;
• Quanto menos colisões ocorrerem, melhor é
a função Hash escolhida, e melhor o
desempenho da tabela como um todo.
Função Hash
• Exemplo de Função Hash (1):
– Supondo que queremos dividir todos os
nomes de pessoas em um determinado
cadastro pela primeira letra (maiúscula)
do nome:
public int FuncaoHash(String chave) {
return chave.toUpperCase().charAt(0) – 65;
}
Função Hash
• Exemplo de Função Hash (2):
– Supondo que queremos dividir todos os
CPFs de pessoas em um determinado
cadastro de 100 em 100 registros:
public int FuncaoHash(long chave) {
return (int)(chave % 100);
}
Chave Hash
• É o valor que será utilizado pela
fórmula Hash para o espalhamento
dos dados;
• Como no exemplo anterior, a chave
utilizada como parâmetro da função,
nada mais é do que uma string
contendo o nome que se pretende
espalhar separando pela primeira
letra do nome.
Índice Hash
• Índice é o valor que é retornado pela
função Hash;
• É um número que representa a
posição no array de dados aonde a
informação deverá ser inserida.
Array de Informações
• É um array que pode armazenar
diretamente os valores, para cada
uma das posições resultantes da
função Hash, ou armazenar
referências para as listas de dados
associadas a uma determinada
posição fornecida pela Função Hash.
Exemplo
• Distribuindo números de X em X:
– Imagine que temos um banco de dados
de uma instituição bancária.
– Neste banco de dados, definimos como
chave para uma tabela Hash o número
da conta-corrente do cliente.
– Queremos então dividir, através da
tabela Hash, as contas bancarias dos
clientes em 6 grupos.
Exemplo
• Distribuindo números de X em X:
– Este banco de dados esta sempre
crescendo;
– Por isso não podemos definir limiares
fixos separando grupos de contas. Uma
das soluções, seria, separar os números
das contas, inclusive as futuras novas,
de X em X números.
– Como isto? Segue a demonstração:
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = __
L = 06
R = __
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 99
L = 06
R = __
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99 E = 99
L = 06
R = 03
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 99
L = 06
R = 03
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 99
L = 06
R = 03
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = __
L = 06
R = __
05
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 05
L = 06
R = __
05
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 05
L = 06
R = 05
05
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 05
L = 06
R = 0505
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 05
L = 06
R = 05
05
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = __
L = 06
R = __
05
11
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 11
L = 06
R = __
05
11
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 11
L = 06
R = 05
05
11
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 11
L = 06
R = 05
05
11
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 11
L = 06
R = 05
05
11
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 11
L = 06
R = 05
05
11
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 11
L = 06
R = 05
05
11
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = __
L = 06
R = __
05
11
06
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 06
L = 06
R = __
05
11
06
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 05
L = 06
R = 00
05
11
06
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 05
L = 06
R = 00
05
11
06
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 05
L = 06
R = 00
05
11
06
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = __
L = 06
R = __
05
11
06
20
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 20
L = 06
R = __
05
11
06
20
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 20
L = 06
R = 02
05
11
06
20
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 20
L = 06
R= 02
05
11
06
20
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 20
L = 06
R = 02
05
11
06 20
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = __
L = 06
R = __
05
11
06 20
35
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 35
L = 06
R = __
05
11
06 20
35
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 35
L = 06
R = 05
05
11
06 20
35
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 35
L = 06
R = 05
05
11
06 20
35
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 35
L = 06
R = 05
05
11
06 20
35
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 35
L = 06
R = 05
05
11
06 20
35
Colunas
Ponteiros
Índices
Função Hash
0 1 2 3 4 5
Dados
R = E % L
E
R
L (Largura; Colunas)
Entrada
Saíd
a
99
E = 35
L = 06
R = 05
05
11
06 20
35
Exercícios
1. Crie uma função Hash que separa números de CPF de 200 em 200
elementos;
2. Com a função h(k) = k % 11, desenhe o resultado de uma Hash Table
para os dados: 82, 31, 28, 4, 45, 27, 59, 79, 35;
3. Com a função hash abaixo, desenhe o resultado de uma Hash Table com
os seguintes valores:
– 80, 35, 29, 33, 19, 18, 40, 10, 6, 21;
public static int funcaoHash(int valor) {
if (valor % 2 == 0) {
return 0;
} else if (valor % 3 == 0) {
return 1;
}
return 2;
}
Trabalho Hash Table
• Uma empresa precisa de um programa de
computador que efetue o cadastro de compradores.
Os compradores deverão ser alocados e
recuperados rapidamente da memória. Crie o
programa para esta empresa, alocando os
“Compradores” em uma hash table.
– Use sua criatividade para escolher os
componentes que irá utilizar para construir a
Hash Table;
– A chave hash deverá ser composta pelo NOME
do comprador;
– Cada comprador tem os seguintes dados:
• Nome;
• CPF;
• RG;
• Telefone.

Mais conteúdos dessa disciplina