h 2 - UFMG

Propaganda
Função Hash Mínima e Perfeita
César Francisco Moura Couto
David Menoti
Departamento de Ciência da Computação
Universidade Federal de Minas Gerais
Roteiro da Apresentação




Introdução
 Função Hash
 Função Hash Perfeita
 Função Hash Perfeita e Mínima
Algoritmos para geração da FHPM
Experimentos
Conclusões
Hashing

Hashing ou transformação de chave é um método de
pesquisa onde os registro armazenados em uma
tabela são diretamente endereçados a partir de uma
transformação aritmética sobre a chave de pesquisa.
Esse método é constituído de duas fases:


Computar o valor da função de transformação (função
hashing), a qual transforma a chave de pesquisa em
um endereço na tabela.
Considerando que duas ou mais chaves podem ser
transformadas em um mesmo endereço da tabela, é
necessário existir um método para lidar com colisões
Função Hashing

Uma função hashing transforma um conjunto de
chaves em um conjunto de valores inteiros com
colisões permitidas.
Função Hashing Perfeita

Quando não houver colisões a função hashing é
denominada função hashing perfeita.
Função Hashing Perfeita Mínima

Se o numero de chaves n e o tamanho da tabela m são
iguais , então a função hashing é denominada função
hashing perfeita e mínima
Algoritmos para geração FHPM

Existem várias estratégias para encontrar funções
Hashing perfeitas. A estratégia definida nos
algoritmos 1 e 2 utiliza a abordagem MOS (Mapping,
Ordering e Searching) descrita por Cichelli, 1980
Algoritmos para geração FHPM

Mapping


Consiste em transformar um conjunto de chaves de um
universo original para um novo universo
Ordering


Coloca as chaves em uma seqüência ordenada que
determina a ordem em que os valores das chaves
serão espalhados (Hashing)
O passo de Ordering deve particionar as chaves dentro
de subseqüências de chaves consecutivas. Esta
subseqüência forma um nível e as chaves de cada nível
devem ter seus valores determinados na tabela hash
Algoritmos para geração FHPM

Searching

Consiste em tentar determinar valores hash para as
chaves de cada nível. Se o passo Searching encontrar
um nível que é incapaz de acomodar, ele volta para um
nível anterior, determina novos valores para as chaves
do nível e tenta novamente determinar valores para
níveis posteriores.
Algoritmo 1 - Mapping

FOX, HEATH, CHEN, DAOUD [7]


Considerando que chaves são strings de caracteres, no
passo de Mapping um conjunto de triplas é obtido para
servir como identificador da chave.
A técnica para construir esse conjunto de triplas
consiste essencialmente em obter um numero
randômico (mod n) para cada chave, fazendo o uso de
todas as informações na chave para dar o máximo de
discriminação
Algoritmo 1 - Mapping

Três tabelas de números randômicos são criadas,
uma para cada função h0, h1 e h2 ,onde cada tabela
contém um número randômico para cada caractere
de cada posição i na chave. Então as triplas são
computadas usando as seguintes formulas:
y
h0 (k )  ( table0i (k i )) mod n
i 1
y
h1 (k )  ( table1i (k i )) mod r
i 1
y
h2 (k )  ( table2i (k i )) mod r  r
i 1
Algoritmo 1 - Mapping



Os valores de h1 e h2 são usados para construir um grafo
bipartido chamado de grafo de dependência
A metade dos vértices do grafo de dependência
correspondem aos valores de h1. A outra metade
correspondem aos valores de h2
Uma chave k corresponde a uma aresta nomeada por k
entre os vértices nomeados por h1(k) e h2(k)
Algoritmo 1 - Ordering


O passo de Ordering ordena os vértices do grafo bipartido e a
partir desse vértices, níveis são criados
Cada nível representa um conjunto de arestas
Algoritmo 1 - Searching


O passo de Searching obtém os níveis produzidos no
passo de Ordering e tenta determinar os valores hash
para as chaves
Esse passo utiliza a seguinte
determinar a posição na tabela
equação
h(k )  h0 (k )  g (hx (k ))  g (hy (k ))
para
Algoritmo 1 - Execução

Mapping

A ilustração do algoritmo utiliza um conjunto de seis
chaves. A seis palavras com os seus valores de h0 , h1
e h2 são
h0 , h1 , h2
Conjunto de chaves
de
h0 associadas a seus valores
h1
h2
valor
valor
valor
Asgard
2
0
5
Ash
3
0
5
Ashanti
0
2
3
Ashcroft
3
1
5
Ashe
5
1
3
Asher
1
1
3
Palavra
Algoritmo 1 - Execução

Mapping

Os valores h1 e h2 formam o grafo de dependência
bipartido
Algoritmo 1 - Execução

Ordering
Algoritmo 1 - Execução

Os resultados do passo de Ordering são os vertices
ordenados 1, 5, 3, 0 e 2 obtidos na ordenação de
quatro níveis
Níveis na Ordenação
Nível
Tamanho do
Nível
Chaves no Nível
1
1
Ashcroft
2
2
Ashe, Asher
3
2
Asgard, Ash
4
1
Ashanti
Algoritmo 1 - Execução

Searching
Algoritmo 2 - Buckets

FOX, CHEN, HEATH [6]:




MPHF até 3.8 milhões de chaves em 6 horas.
Resultado experimental: O(n) ???
Pouco espaço para representar a MPHF obtida: 2.5
bits/chave.
CZECH, HAVAS e MAJEWSKI [4]: O(nn/2n) ???
Algoritmo 2 - Buckets

Mapping
Algoritmo 2 - Buckets

Ordering e
Searching
Algoritmo 2 - Exemplo (Searching)
C
b  cn /(log n  1), 2  c  4, usando c  3 temos :
Jan, fev, mar, abr,
mai, jun, jul, ago, set,
out, nov, dez
b 8
h10
0
1
jan
2
3
4
5
fev
jun
dez
6
mar
mai
set
nov
h11
7
8
abr
jul
Ago
9
10
1
2
mar
mai
set
nov
jan
fev
jun
dez
3
4
5
6
abr
jul
ago
Out
p2  0.3b
p1  7
p2 3
11
Out
h12
0
p1  0.6n
7
Sort
0
1
2
3
4
5
mar
mai
set
nov
fev
jun
dez
abr
jul
jan
ago
out
6
7
Algoritmo 2 - Exemplo (Searching)
h20 : C  0, , n  1
hpm(c)  (h20 (c)  g ( Bi )) mod n
0
1
2
3
4
5
mar
mai
set
nov
fev
jun
dez
abr
jul
jan
ago
out
6
B
7
h20
0
1
2
3
4
5
11
0
3
2
1
4
2
8
7
10
8
0
6
S
E
A
R
C
H
g ( Bi )  ( x  u ) mod n, sendo x um indice vazio
Tabela Hash
e u um membro de Bi a ser alinhado com x
g
0
1
1
2
3
4
5
0
1
11
0
2
3
4
2
3
5
6
7
7
8
9
10
11
Algoritmo 2 - Exemplo (Searching)
h20 : C  0, , n  1
hpm(c)  (h20 (c)  g ( Bi )) mod n
0
1
2
3
4
5
mar
mai
set
nov
fev
jun
dez
abr
jul
jan
ago
out
6
B
7
h20
0
1
2
3
4
5
11
0
3
2
1
4
2
8
7
10
8
0
6
S
E
A
R
C
H
g ( Bi )  ( x  u ) mod n, sendo x um indice vazio
Tabela Hash
e u um membro de Bi a ser alinhado com x
g
0
1
1
1
2
3
4
5
0
1
11
0
2
3
4
2
3
5
6
7
7
8
9
10
11
Algoritmo 2 - Exemplo (Searching)
h20 : C  0, , n  1
hpm(c)  (h20 (c)  g ( Bi )) mod n
0
1
2
3
4
5
mar
mai
set
nov
fev
jun
dez
abr
jul
jan
ago
out
6
B
7
h20
0
1
2
3
4
5
11
0
3
2
1
4
2
8
7
10
8
0
6
S
E
A
R
C
H
g ( Bi )  ( x  u ) mod n, sendo x um indice vazio
Tabela Hash
e u um membro de Bi a ser alinhado com x
g
0
1
1
4
2
3
4
5
0
1
11
0
2
3
4
2
3
5
1
6
2
7
7
8
4
9
10
11
Algoritmo 2 - Exemplo (Searching)
h20 : C  0, , n  1
hpm(c)  (h20 (c)  g ( Bi )) mod n
0
1
2
3
4
5
mar
mai
set
nov
fev
jun
dez
abr
jul
jan
ago
out
6
B
7
h20
0
1
2
3
4
5
11
0
3
2
1
4
2
8
7
10
8
0
6
S
E
A
R
C
H
g ( Bi )  ( x  u ) mod n, sendo x um indice vazio
Tabela Hash
e u um membro de Bi a ser alinhado com x
g
0
1
2
1
4
6
3
4
5
0
1
11
0
2
3
4
2
3
5
1
6
2
7
7
8
4
9
10
11
Algoritmo 2 - Exemplo (Searching)
h20 : C  0, , n  1
hpm(c)  (h20 (c)  g ( Bi )) mod n
0
1
2
3
4
5
mar
mai
set
nov
fev
jun
dez
abr
jul
jan
ago
out
6
B
7
h20
0
1
2
3
4
5
11
0
3
2
1
4
2
8
7
10
8
0
6
S
E
A
R
C
H
g ( Bi )  ( x  u ) mod n, sendo x um indice vazio
Tabela Hash
e u um membro de Bi a ser alinhado com x
g
0
1
2
1
4
11
3
4
5
0
1
11
0
2
3
4
2
3
5
1
6
2
7
7
8
4
9
10
11
Algoritmo 2 - Exemplo (Searching)
h20 : C  0, , n  1
hpm(c)  (h20 (c)  g ( Bi )) mod n
0
1
2
3
4
5
mar
mai
set
nov
fev
jun
dez
abr
jul
jan
ago
out
6
B
7
h20
0
1
2
3
4
5
11
0
3
2
1
4
2
8
7
10
8
0
6
S
E
A
R
C
H
g ( Bi )  ( x  u ) mod n, sendo x um indice vazio
Tabela Hash
e u um membro de Bi a ser alinhado com x
g
0
1
1
4
2
1
3
4
5
0
1
11
0
2
3
4
2
3
5
1
6
2
7
7
8
4
9
10
11
Algoritmo 2 - Exemplo (Searching)
h20 : C  0, , n  1
hpm(c)  (h20 (c)  g ( Bi )) mod n
0
1
2
3
4
5
mar
mai
set
nov
fev
jun
dez
abr
jul
jan
ago
out
6
B
7
h20
0
1
2
3
4
5
11
0
3
2
1
4
2
8
7
10
8
0
6
S
E
A
R
C
H
g ( Bi )  ( x  u ) mod n, sendo x um indice vazio
Tabela Hash
e u um membro de Bi a ser alinhado com x
g
0
1
1
4
2
2
3
4
5
0
1
11
0
2
3
4
2
3
5
1
6
2
7
7
8
4
9
10
7
8
11
Algoritmo 2 - Exemplo (Searching)
h20 : C  0, , n  1
hpm(c)  (h20 (c)  g ( Bi )) mod n
0
1
2
3
4
5
mar
mai
set
nov
fev
jun
dez
abr
jul
jan
ago
out
6
B
7
h20
0
1
2
3
4
5
11
0
3
2
1
4
2
8
7
10
8
0
6
S
E
A
R
C
H
g ( Bi )  ( x  u ) mod n, sendo x um indice vazio
Tabela Hash
e u um membro de Bi a ser alinhado com x
g
0
1
1
4
2
2
3
4
4
5
0
1
2
3
4
11
0
10
2
3
5
1
6
2
7
7
8
4
9
10
7
8
11
Algoritmo 2 - Exemplo (Searching)
h20 : C  0, , n  1
hpm(c)  (h20 (c)  g ( Bi )) mod n
0
1
2
3
4
5
mar
mai
set
nov
fev
jun
dez
abr
jul
jan
ago
out
6
B
7
h20
0
1
2
3
4
5
11
0
3
2
1
4
2
8
7
10
8
0
6
S
E
A
R
C
H
g ( Bi )  ( x  u ) mod n, sendo x um indice vazio
Tabela Hash
e u um membro de Bi a ser alinhado com x
g
0
1
1
4
2
2
3
4
4
11
5
0
1
2
3
4
11
0
10
2
3
5
1
6
2
7
8
7
8
4
9
10
7
8
11
Algoritmo 2 - Exemplo (Searching)
h20 : C  0, , n  1
hpm(c)  (h20 (c)  g ( Bi )) mod n
0
1
2
3
4
5
mar
mai
set
nov
fev
jun
dez
abr
jul
jan
ago
out
6
B
7
h20
0
1
2
3
4
5
11
0
3
2
1
4
2
8
7
10
8
0
6
S
E
A
R
C
H
g ( Bi )  ( x  u ) mod n, sendo x um indice vazio
Tabela Hash
e u um membro de Bi a ser alinhado com x
g
0
1
1
4
2
2
3
4
5
4
11
11
0
1
2
3
4
11
0
10
2
3
5
1
6
2
7
8
7
8
4
9
10
7
8
11
0
Algoritmo 3 - Grafo Acíclico

CZECH, HAVAS, MAJEWSKI [5]


Método elegante baseado na geração de grafos
aleatórios.
O objetivo do algoritmo é obter uma função g que
faça com que a função abaixo seja uma função
hash perfeita mínima:
H(chave) = (g(h1(chave)) + g(h2(chave))) mod n

Cada função h é uma função hash universal:
n


h i   Chave[i ]  Pesos[i ]  mod m
1

Algoritmo 3 - Grafo Acíclico


Características
 Complexidade de Tempo linear: O(n)
 Espaço de Especificação: c n log n
 Ordem preservada: Limite inferior da Classe
O algoritmo consiste de dois passos:
 Mapping – Obtenção do grafo acíclico
 Assignment – Obtenção da função g.
Algoritmo 3 - Mapping
m  cn
c  2.09
Algoritmo 3 - Assignment


Busca em Profundidade a partir de um vértice
n = 6, m = 13, c = 2,16
4
4
0
0
5
5
0
5
3
3
1
2
h(k) = (g(h1(k)) + g(h2(k))) mod n
2
Resultados - Algoritmo 1
Resultados - Algoritmo 2
Resultados - Algoritmo 3
Resultados - Comparação
Conclusões

Algoritmo 3






Mais rápido
Ordem lexicográfica das chaves
Espaço de especificação: (cn log n) bits
Limite inferior n log n \bits
Complexidade de Tempo: O(n)
Algoritmos 1 e 2




Não preserva a ordem lexicográfica das chaves
Espaço de especificação inferior a
5n bits (Alg 2) e cn log n (Alg 1)
Limite inferior 1,5 n bits
Complexidade de Tempo: O(n2)
Referências
1.
CHEN, Q. F. (1992). An object-oriented database system for
efficient information retrieval applications. PhD thesis,
Department of Computer Science, Virginia Tech.
2.
CICHELLI, R. J. Minimal Perfect Hashing Made Simple, Comm. ACM
23(1)(January 1980) 17-19.
3.
CORMEN, T. H., LEISERSON, C. E., RIVEST, R. L., and STEIN, C.
(2002). Introduction to Algorithms. MIT Press and McGraw-Hill,
second edition
4.
CZECH, Zibigniew j., HAVAS, George MAJEWSKI, Bohdan S.
Fundamental Study Perfect Hashing. Theoretical Computer Science
182(1997) 1-143.
5.
CZECH, Zibigniew j., HAVAS, George MAJEWSKI, Bohdan S. An Optimal
algorithm for generating minimal perfect hash functions.
Information Processing Letters 43(1992) 257-264.
Referências
6.
FOX, Edward A., CHEN, Qi Fan, HEATH, Lenwood S. A Faster
Algorithm for Constructing Minimal Perfect Hash Functions. In:
Proc. 15 th Ann. Internat. ACM SIGIR Conf. On Research and
Development in Information Retrieval – SIGIR’92 (Copenhagen,
Denmark, june 1992) 266-273.
7.
FOX, Edward A., HEATH, Lenwood S, CHEN, Qi Fan, DAOUD, Amjad M.
Practical Minimal Perfect Hash Functions for Large Databases,
Comm. ACM 35(1) (January 1992) 105-121.
8.
FREDMAN, M. R., KOMLÓS, J., SZEMERÉDI, E. Storing a sparse table
with O(1) Worst Case Access Time, J. ACM 31(3) (July 1984) 538544.
9.
HAVAS, G. and MAJEWSKI, B. S. Optimal algorithms for minimal
perfect hashing. Technical Report 234, The University of
Queensland, Key Centre for Software Technology, (1992).
10.
MAJEWSKI, Bohdan S., WORMALD, Nicholas C., HAVAS, George, CZECH,
Zibigniew j. A Family of Perfect Hashing Methods. The Computer
Journal, v.39, N.6, 1996.
Referências
11.
MEHLHORN, K. On the program size of perfect and universal hash
functions. In Proceedings of the 23rd IEEE Symposium on
Foundations of Computer Science (FOCS’82), pages 170–175, 1982.
12.
MEHLHORN, K. Data Structures and Algorithms 1: Sorting and
Searching. Springer-Verlag, Berlin - Heidelberg - New York –
Tokyo, 1984.
13.
PEARSON, P. K. Fast hashing of variable-length text strings.
Communications of the ACM, 28(6):667–680, 1990.
14.
SAGER, T. J. A new method for generating minimal perfect hashing
functions. Technical report, Department of Computer Science,
University of Missouri-Rolla, Mo, 1984.
15.
SAGER, T. J. A Polynomial Time Generator for Minimal Perfect Hash
Functions, Comm. ACM 28(5), pages 523-532, 1985.
16.
ZIVIANI, N. Projeto de Algoritmos com implementações em Pascal e
C. Pioneira Thomson Learnig, São Paulo - SP - Brasil, 2a. edição
revisada e ampliada, 2004.
Agradecimentos
Dúvidas e Perguntas
?
Download