Hash de filtres Bloom: plus ou plus gros?

15

Dans l'implémentation d'un filtre Bloom, l'approche traditionnelle nécessite plusieurs fonctions de hachage indépendantes. Kirsch et Mitzenmacher ont montré que vous n'en avez besoin que de deux et que vous pouvez générer le reste sous forme de combinaisons linéaires.

Ma question est: quelle est vraiment la différence entre deux fonctions de hachage et une avec deux fois l'entropie?

Cela vient de ce que vous faites réellement avec la sortie de vos fonctions de hachage: vous allez prendre votre (disons) valeur de hachage 64 bits et la mettre à l'échelle à la taille de votre vecteur de bits, qui est probablement beaucoup plus petite que 2 64 . Il s'agit clairement d'une transformation perdant l'entropie (sauf dans les rares cas où votre taille de hachage et votre capacité de filtre coïncident exactement). En supposant que mon filtre a moins de 2 32 entrées, qu'est-ce qui m'empêche de diviser ma valeur de hachage 64 bits en deux hachages 32 bits et d'en prendre des combinaisons linéaires? Ou l'utiliser pour semer un PRNG?

En d'autres termes, combien d'informations dois-je réellement connaître sur chaque élément que j'insère dans un filtre Bloom pour garantir le taux de faux positifs standard? Ou plus généralement, quelle est la relation entre la façon dont je peux distinguer les éléments (combien de bits j'utilise pour les décrire) et la performance de mon filtre Bloom?

Il semble que je puisse m'en tirer avec bits pour une taille de filtre de , ou de manière équivalente bits à stocker éléments à probabilité faussement positive ....2lg(m)m2(lg(-nlnp)-2lg(ln2))np

Jay Hacker
la source

Réponses:

16

Vous avez raison de penser aux fonctions de hachage en termes de "bits aléatoires produits". Donc, si vous avez une fonction de hachage qui produit un hachage de 64 bits, vous pouvez la traiter comme 4 hachages de 16 bits (par fractionnement), etc.

Pour le schéma décrit ci-dessus (qui devrait être attribué à Dillinger et Manolios; Kirsch / Mitzenmacher vient de l'analyser), cela signifie que vous avez raison; si vous avez une seule fonction de hachage avec bits, ça devrait aller.2lg(m)

Michael Mtizenmacher
la source
5
Bienvenue dans cstheory, Michael :)
Suresh Venkat