Leçon
La théorie — Filtre de Bloom : absence certaine, présence probable
Un filtre de Bloom indique si un élément appartient à un ensemble, à l'aide d'un tableau de m bits et de k fonctions de hachage. Insérer un élément met à 1 les k bits désignés par ses valeurs de hachage. Une recherche vérifie ces mêmes k bits : si l'un d'eux vaut 0, l'élément est absent à coup sûr ; s'ils valent tous 1, il est probablement présent. Une réponse « probablement présent » erronée est un faux positif. Après l'insertion de n éléments, l'estimation classique du taux de faux positifs est (1 − e−kn/m)k. Cette approximation exponentielle de la formule donnée par Bloom en 1970 atteint son minimum pour k = (m/n) ln 2.
Ce que signifie chaque symbole
m- le nombre de bits du filtre
k- le nombre de fonctions de hachage, donc de bits mis à 1 par chaque mot et vérifiés à chaque recherche
n- le nombre de mots insérés
X- le nombre de bits à 1 une fois les n mots insérés
- Suppose
- Les k positions d'un mot sont obtenues par double hachage, à partir de deux valeurs : la position i vaut (h₁ + i·h₂) mod m. Ici, h₁ est la valeur de hachage FNV-1a du mot ; h₂ est une valeur issue du hachage djb2, mélangée puis rendue impaire. Comme m est une puissance de deux, les k positions d'un mot sont toujours distinctes. L'estimation classique suppose que chacune des kn positions est choisie au hasard, indépendamment des autres. Le double hachage et une petite valeur de m peuvent donc créer un écart entre l'estimation et le comportement réel du filtre. Le taux de faux positifs est mesuré sur les 10 000 chaînes de 0 à 9999 : il est exact pour ces chaînes, mais ne décrit pas tous les mots possibles.
Problème entièrement résolu
-
Combien de bits pour le filtre de césure de Bloom en 1970 ? 4 étapes
En 1970, Burton Bloom prenait l'exemple d'un programme de coupure des mots en fin de ligne, portant sur 500 000 mots. Quelques règles simples suffisent pour 450 000 d'entre eux ; les 50 000 autres doivent être recherchés dans un dictionnaire sur disque. Il proposait de conserver en mémoire centrale un filtre contenant ces 50 000 mots, en acceptant qu'un mot facile sur 16 provoque un accès inutile au disque. Combien faut-il de bits et de fonctions de hachage ? Combien de lectures sur disque reste-t-il ? Réglez ensuite cette page sur le même nombre de bits par mot et mesurez le résultat.
Ouvrez ce problème dans l'outil
-
Pour k optimal, l'estimation classique demande log₂(1/p) / ln 2 bits par mot. Avec p = 1/16, cela donne 4 / 0,6931 = 5,77 bits. Le filtre occupe donc 50 000 × 5,77 = 288 539 bits. Bloom annonçait lui-même « moins de 300 000 bits ». La valeur optimale de k est 5,77 × ln 2 = 4. Avec quatre fonctions de hachage, on s'attend à ce que la moitié des bits valent 1.
-
Chacun des 50 000 mots difficiles exige toujours une lecture sur disque, ainsi que 1 mot facile sur 16, soit 450 000 / 16 = 28 125 lectures supplémentaires. Cela fait 78 125 lectures sur disque pour 500 000 mots, soit 15,6 %. Bloom arrondissait ce nombre à 78 000, ce qui représente une économie de 84 % par rapport à une lecture sur disque pour chaque mot.
-
La longueur du mot n'intervient nulle part. Le filtre occupe 5,77 bits par mot, qu'il s'agisse de « cat » ou de « incomprehensibilities ». Bloom estimait qu'une table de hachage classique exigeait au moins 19 bits en moyenne pour représenter chaque mot. Chaque division de p par deux ajoute 1 / ln 2 = 1,44 bits par mot : pour 1 sur 64, il faudrait 6 / 0,6931 = 8,66 bits.
-
Cette page accepte au plus 64 mots, mais l'estimation dépend seulement de m/n et de k. Réglez m = 256, n = 44 (5,82 bits par mot) et k = 4. Sur les 256 bits, 122 valent 1, soit 47,7 %. Parmi les 10 000 chaînes jamais insérées, 535 donnent la réponse « probablement présent » : le taux mesuré est de 5,35 %, inférieur à l'objectif de 1/16 = 6,25 % retenu pour dimensionner le filtre. L'estimation classique pour ce filtre est de 6,11 %.
Réponse
288 539 bits et 4 fonctions de hachage, avec 78 125 lectures sur disque pour 500 000 mots. Les 44 mots de cette page, dans 256 bits, donnent un taux mesuré de 5,35 %, conforme à l'objectif. Cette mesure porte sur un seul filtre de 44 mots. La page ne permet pas de vérifier si 50 000 mots dans 288 539 bits donneraient un taux aussi proche de 1/16 : elle est limitée à 64 mots.
-
Parcours
Ce qu’une structure de données rend peu coûteux
Références (1)
- The method itself, the turning point at half the bits set in the first insight, and the hyphenation example the worked problem recomputes: Burton H. Bloom, "Space/time trade-offs in hash coding with allowable errors," Communications of the ACM 13(7), July 1970, pp. 422–426.