Perfect hash functions give unique "names" to arbitrary keys requiring only a few bits per key. This is an essential building block in applications like static hash tables, databases, or bioinformatics. This paper introduces the PHast approach that combines the fastest available queries, very fast construction, and good space consumption (below 2 bits per key). PHast improves bucket-placement which first hashes each key k to a bucket, and then looks for the bucket seed s such that a placement function maps pairs (s,k) in a collision-free way. PHast can use small-range hash functions with linear mapping, fixed-width encoding of seeds, and parallel construction. This is achieved using small overlapping slices of allowed values and bumping to handle unsuccessful seed assignment. A variant we called PHast+ uses additive placement, which enables bit-parallel seed searching, speeding up the construction by an order of magnitude.
Les fonctions de hachage parfait attribuent des « noms » uniques à des clés arbitraires en utilisant seulement quelques bits par clé. C'est un élément essentiel dans des applications telles que les tables de hachage statiques, les bases de données ou la bioinformatique. Cet article introduit l'approche PHast qui combine les requêtes les plus rapides disponibles, une construction très rapide et une consommation d'espace raisonnable (inférieure à 2 bits par clé). PHast améliore le placement des seaux qui hache d'abord chaque clé k dans un seau, puis recherche la graine du seau s de sorte qu'une fonction de placement mappe les paires (s,k) de manière sans collision. PHast peut utiliser des fonctions de hachage à petite plage avec mappage linéaire, codage de largeur fixe des graines et construction parallèle. Ceci est réalisé en utilisant de petites tranches chevauchantes de valeurs autorisées et un mécanisme de « bumping » pour gérer l'assignation infructueuse de graines. Une variante appelée PHast+ utilise le placement additif, qui permet la recherche de graines en parallèle au niveau des bits, accélérant la construction d'un ordre de magnitude.
Une fonction de hachage parfait (PHF) est une fonction injective qui mappe un ensemble de clés {k₁, ..., kₙ} vers {0, ..., m-1}. Lorsque m = n, on parle de fonction de hachage parfait minimal (MPHF). C'est un élément essentiel dans les applications telles que les bases de données, l'indexation de texte et la bioinformatique.
Défi d'optimisation multi-objectifs: La conception d'une MPHF fait face à un problème d'optimisation multi-objectifs impliquant la consommation d'espace, le temps de construction et le temps de requête
Limite théorique inférieure: La limite théorique inférieure d'une MPHF est log₂ e ≈ 1,44 bits par clé
Besoins pratiques: En pratique, les PHF sont couramment utilisées pour accélérer les structures de données statiques, ce qui rend les requêtes rapides essentielles
Méthodes de placement de seaux: CHD, FCH, PTHash, PHOBIC, etc. nécessitent des fonctions d'allocation de seaux non linéaires ou un codage de graines de longueur variable, affectant la vitesse des requêtes
Méthodes de division récursive: Bien que très efficaces en espace, elles ont des temps de requête plus lents et nécessitent le décodage d'informations de navigation de longueur variable
Méthodes d'empreinte digitale: Nécessitent au moins e bits par clé et les requêtes nécessitent des opérations de rang sur des vecteurs de bits
Surcharge de construction parallèle: Les constructions parallèles existantes nécessitent des étapes de requête supplémentaires pour récupérer les valeurs de décalage
Mappage linéaire des seaux: Évite l'allocation non linéaire des seaux grâce au mappage linéaire vers de petites tranches chevauchantes, permettant une construction multi-thread cache-friendly
Mécanisme de bumping: Permet l'utilisation de fonctions de hachage à petite plage et de codage de graines de largeur fixe, évitant les recherches locales complexes
Assignation heuristique de graines: Réduit la consommation d'espace en sélectionnant les graines qui occupent le moins de valeurs de fonction
Variante PHast+: Utilise une fonction de placement additif pour permettre la recherche de graines en parallèle au niveau des bits, accélérant la construction d'un ordre de magnitude
Évaluation expérimentale complète: Comparaison détaillée des performances avec les méthodes existantes
PHast évite le codage de longueur variable et la recherche locale complexe grâce au mécanisme de bumping, tout en conservant la simplicité de l'allocation linéaire de seaux.
Philosophie de conception simplifiée: Évite les mécanismes complexes grâce au bumping, incarnant le principe « moins c'est plus »
Mappage linéaire: Restaure la simplicité de l'allocation linéaire de seaux tout en résolvant ses problèmes
Optimisation en parallèle au niveau des bits: La recherche de graines en parallèle au niveau des bits de PHast+ est une innovation d'ingénierie importante
Conception cache-friendly: Le traitement séquentiel et la conception du tampon circulaire considèrent les caractéristiques des CPU modernes
Fredman & Komlós: Limite théorique inférieure des fonctions de hachage parfait
Belazzougui et al.: Travaux fondateurs sur les méthodes de placement de seaux
L'article PHast démontre que dans le domaine de l'ingénierie algorithmique, grâce à une compréhension approfondie de la nature du problème et des caractéristiques du matériel moderne, les méthodes simples, après optimisation minutieuse, peuvent atteindre ou même surpasser les performances des méthodes complexes. Cela fournit un aperçu important pour la conception de structures de données: parfois, la clé pour résoudre un problème n'est pas d'ajouter de la complexité, mais de trouver la bonne direction de simplification.