470 likes | 578 Views
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
E N D
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:
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 equação para determinar a posição na tabela
Conjunto de chaves associadas a seus valores de Palavra 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 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
Algoritmo 1 - Execução • Mapping • Os valores h1 e h2 formam o grafo de dependência bipartido
Algoritmo 1 - Execução • Ordering
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 • 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
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 Jan, fev, mar, abr, mai, jun, jul, ago, set, out, nov, dez h10 h11 h12 Sort
Algoritmo 2 - Exemplo (Searching) B h20 S E A R C H Tabela Hash g
Algoritmo 2 - Exemplo (Searching) B h20 S E A R C H Tabela Hash g
Algoritmo 2 - Exemplo (Searching) B h20 S E A R C H Tabela Hash g
Algoritmo 2 - Exemplo (Searching) B h20 S E A R C H Tabela Hash g
Algoritmo 2 - Exemplo(Searching) B h20 S E A R C H Tabela Hash g
Algoritmo 2 - Exemplo (Searching) B h20 S E A R C H Tabela Hash g
Algoritmo 2 - Exemplo (Searching) B h20 S E A R C H Tabela Hash g
Algoritmo 2 - Exemplo(Searching) B h20 S E A R C H Tabela Hash g
Algoritmo 2 - Exemplo (Searching) B h20 S E A R C H Tabela Hash g
Algoritmo 2 - Exemplo (Searching) B h20 S E A R C H Tabela Hash g
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: • Cada função h é uma função hash universal: H(chave) = (g(h1(chave)) + g(h2(chave))) mod n
Algoritmo 3 - Grafo Acíclico • Características • Complexidade de Tempo linear: O(n) • Espaço de Especificação: cn 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 - Assignment • Busca em Profundidade a partir de um vértice • n = 6, m = 13, c = 2,16 h(k) = (g(h1(k)) + g(h2(k))) mod n 4 4 0 0 0 5 5 5 3 1 2 2 3
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 5nbits (Alg 2) e cn log n (Alg 1) • Limite inferior 1,5 n bits • Complexidade de Tempo: O(n2)
Referências • CHEN, Q. F. (1992). An object-oriented database system for efficient information retrieval applications. PhD thesis, Department of Computer Science, Virginia Tech. • CICHELLI, R. J. Minimal Perfect Hashing Made Simple, Comm. ACM 23(1)(January 1980) 17-19. • CORMEN, T. H., LEISERSON, C. E., RIVEST, R. L., and STEIN, C. (2002). Introduction to Algorithms. MIT Press and McGraw-Hill, second edition • CZECH, Zibigniew j., HAVAS, George MAJEWSKI, Bohdan S. Fundamental Study Perfect Hashing. Theoretical Computer Science 182(1997) 1-143. • 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 • 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. • 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. • 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) 538-544. • 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). • 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 • 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. • MEHLHORN, K. Data Structures and Algorithms 1: Sorting and Searching. Springer-Verlag, Berlin - Heidelberg - New York – Tokyo, 1984. • PEARSON, P. K. Fast hashing of variable-length text strings. Communications of the ACM, 28(6):667–680, 1990. • SAGER, T. J. A new method for generating minimal perfect hashing functions. Technical report, Department of Computer Science, University of Missouri-Rolla, Mo, 1984. • SAGER, T. J. A Polynomial Time Generator for Minimal Perfect Hash Functions, Comm. ACM 28(5), pages 523-532, 1985. • 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.