Maison >développement back-end >C++ >Pourquoi `boost::hash_combine` utilise-t-il un « nombre magique » ?

Pourquoi `boost::hash_combine` utilise-t-il un « nombre magique » ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-16 16:56:03321parcourir

Why Does `boost::hash_combine` Use a

Démystifier le nombre magique dans boost::hash_combine

La fonction de modèle boost::hash_combine combine une graine de hachage avec un objet pour générer un valeur de hachage. Bien que le processus soit déterministe, l'utilisation d'une constante magique a soulevé des questions quant à son objectif.

Raison d'être de la constante

La constante magique, 0x9e3779b9, est dérivée de l'inverse du nombre d'or. Ce nombre a été choisi car il fournit 32 bits aléatoires où chaque bit a une probabilité égale d'être 0 ou 1. L'inclusion de cette constante introduit le caractère aléatoire et permet de répartir uniformément les valeurs de hachage, empêchant ainsi le regroupement dans les tables de hachage.

Shifted Seed

En plus de la constante magique, la fonction hash_combine intègre également des versions décalées de l'ancienne graine. Cela garantit que même si la valeur de hachage de l'objet a une plage limitée, les différences entre les valeurs se propagent rapidement sur tous les bits.

En combinant la constante magique et la graine décalée, la fonction hash_combine crée une fonction de hachage plus efficace qui minimise collisions et améliore les performances des tables de hachage.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn