Le filtre Bloom utilise un tableau de bits de m bits, donc il y a 0 à m-1 index dans le tableau mais les fonctions de hachage que j'utilise renvoient un hachage 32 bits, donc il pourrait de 0 à (2^32) -1 étant donné que le hachage est utilisé comme indice pour le tableau de bits (filtre), il est tout à fait possible que le hachage soit supérieur à m, par conséquent la valeur ne sera pas mappée sur le tableau de bits . Dois-je prendre le mod du hash i.e hachage% m de sorte que le hachage résultant doit correspondre à un index dans le tableau de bits. Va-t-il augmenter le nombre de faux positifs (IMO ça va)?L'index du filtre et les fonctions Hash dans Bloom Filter
Répondre
Une fonction de hachage h: S -> uint
est vaguement définie comme étant celle qui présente un degré élevé d'entropie sur l'ensemble S
. Supposons que j'ai une certaine fonction de hachage h
qui a une entropie très élevée sur S
, mais pour laquelle la sortie h(x)
pour x
dans S
est toujours pair. Cette restriction signifie simplement qu'un bit de la sortie de h
est gaspillé, ce qui est seulement 1/32
des bits.
Supposons maintenant que j'ai un filtre Bloom pour lequel m
est un nombre pair. Alors h(x) % m
sera toujours un nombre pair - ce qui signifie seulement la moitié des bits du filtre Bloom seront utilisés! C'est mauvais!
Comme d'autres l'ont suggéré, en prenant simplement les premiers m
bits de h(x)
comme un index dans 2^m
bacs de filtre Bloom est une meilleure stratégie, parce que, en supposant que vous étant donné une fonction de hachage qui présente un degré élevé d'entropie sur la set S
, la fonction de hachage "premier m
bits" g(x) = h(x)[0:m-1]
devrait présenter une quantité presque proportionnelle d'entropie.
okay. si j'utilise les premiers ** n ** bits d'un hachage dans ce cas la taille du tableau de bits devrait être ** 2^n ** ie l'index maximum serait ** (2^n) -1 ** que chaque hash possible est un index valide? –
@AbdullahSaleem Pour un filtre Bloom avec des cases '2^m', vous utiliseriez les premiers bits' m' de 'h (x)', interprétés comme un entier binaire non signé, comme index dans les cases du filtre Bloom. –
c'est compris mais que se passe-t-il si la longueur du filtre Bloom n'est pas ** 2^m **. par exemple, la longueur du filtre bloom est ** 50 **. Je ne peux pas utiliser les ** 5 premiers bits ** parce que le hachage résultant serait de ** 0-31 ** et je ne peux pas utiliser d'abord ** 6 bits ** car dans ce cas le hachage résultant serait de ** 0-63 ** –
Oui, l'utilisation de mod augmente la probabilité de faux positifs. Stephan T. Lavavej avait un grand discours à ce sujet sur GoingNative 2013 (mod qui crée le biais), Voir HERE
Sa mention aussi sur (ce @btilly) a dit: il est préférable de couper simplement les bits - si le vôtre fonction de hachage C'est bon alors c'est OK.
- 1. Bloom Filter: Comment trouver des fonctions de hachage k?
- 2. Opérations bitwise MySQL, filtre bloom
- 3. Quelques questions sur l'implémentation du filtre Bloom
- 4. Comment implémenter un filtre Bloom en PHP?
- 5. Bloom Filtres - Mise en œuvre des fonctions de hachage
- 6. Pourquoi un filtre Bloom a-t-il besoin de plusieurs fonctions de hachage?
- 7. est à pleine capacité filtre de bloom après 10 minutes
- 8. Calcul du bon nombre de bits dans un filtre de bloom
- 9. Utilisation des fonctions de hachage avec des filtres Bloom
- 10. android filtre url dans "intention-filter"
- 11. Combinaison de filtres Bloom
- 12. Traitement du schéma https dans intention-filter
- 13. java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/filter/Filtre
- 14. Perl Hash de sous-fonctions
- 15. HandlerInterceptorAdapter et Zuul Filter
- 16. Hash et les chiffres
- 17. Les fonctions du mini-filtre nécessitent-elles des APC activés?
- 18. Existe-t-il de bonnes implémentations de Counting Bloom Filter en Java?
- 19. Comment filter() et get() sont implémentés dans les requêtes GAE?
- 20. SubSonic .Filter() dans le filtre de la mémoire
- 21. Envelopper le filtre et les fonctions filter_by de sqlalchemy dans une seule fonction
- 22. Kalman Filter - Boussole et Gyro
- 23. Bloom Shader Performance
- 24. Demande null dans Servlet Filter
- 25. Qu'est-ce que le filtre Filter fait vraiment?
- 26. hash fonctions générateur de famille en python
- 27. Appengine Filter et Servlet sur différents threads
- 28. Débogage DirectShow Filter
- 29. Odata Filter StartsWith du champ Integer
- 30. fonctions Filtre/grep se comportent bizarrement
Ne pas faire mod. Utilisez simplement les premiers m bits de la fonction de hachage. Les chances d'un faux positif dépendent du nombre de bits que vous utilisez, mais aussi de l'espace utilisé. Le but d'un filtre bloom est de choisir le compromis. – btilly