Étant donné un filtre de bloom de taille N-bits et K fonctions de hachage, dont M-bits (où M <= N) du filtre sont définis.
Est-il possible d'approximer le nombre d'éléments insérés dans le filtre bloom?
Exemple simple
J'ai réfléchi à l'exemple suivant, en supposant un BF de 100 bits et 5 fonctions de hachage où 10 bits sont définis ...
Meilleur scénario: en supposant que les fonctions de hachage sont vraiment parfaites et mappent de manière unique un peu pour un certain nombre de valeurs X, alors étant donné que 10 bits ont été définis, nous pouvons dire qu'il n'y a eu que 2 éléments insérés dans le BF
Pire scénario: en supposant que les fonctions de hachage sont mauvaises et mappées de manière cohérente sur le même bit (mais uniques entre elles), alors nous pouvons dire que 10 éléments ont été insérés dans le BF
La plage semble être [2,10] où les abouts dans cette plage sont probablement déterminés par la probabilité de faux positif du filtre - je suis bloqué à ce stade.
la source
Réponses:
Oui. De Wikipédia :
Si vous avez inséré éléments dans un filtre de taille n en utilisant k fonctions de hachage, la probabilité qu'un certain bit soit toujours égal à 0 estje n k
Vous pouvez mesurer cette probabilité comme la proportion de 0 bits dans votre filtre. Résoudre pour donneje
Je l'ai utilisé dans la pratique, et tant que votre filtre ne dépasse pas sa capacité, l'erreur est généralement inférieure à 0,1% pour les filtres jusqu'à des millions de bits. Comme le filtre dépasse sa capacité, l'erreur monte bien sûr.
la source
Si vous supposez que pour chaque fonction de hachage pour chaque objet, un bit est défini uniformément au hasard et que vous comptez sur le nombre de bits qui ont été définis, vous devriez pouvoir limiter la probabilité que le nombre d'objets insérés soit dans une certaine plage, peut-être en utilisant une formulation de billes et de bacs. Chaque bit est un bac, et il est défini s'il contient au moins 1 balle, chaque objet inséré lance balles, où k est le nombre de fonctions de hachage et n k est le nombre de billes lancées après l' insertion de n objets . Étant donné que les bacs b contiennent au moins 1 balle, quelle est la probabilité qu'au moins t balles aient été lancées? Je pense que vous pouvez utiliser ici le fait que:k k n k n b t
Mais le problème avec cette formulation est que je ne vois pas de méthode simple pour calculer P ( t ) ou P ( b ) , mais trouver la valeur de t qui maximise cette probabilité ne devrait pas être trop difficile.
la source
Question intéressante, regardons quelques cas spécifiques.
Je pense que nous pouvons généraliser cela maintenant.
la source
n choose k
Supposons que les hachages soient uniformément distribués.
Réécriture:
la source
L'idée clé est d'approximer l'espérance du nombre de bits zéro.
Alors, l'attente de nombres à zéro bit devrait être:
la source
La probabilité qu'un bit particulier soit 1 après n insertions est: P = 1 - (1 - 1 / m) ^ (kn)
Soit X_i une variable aléatoire discrète qui est 1 si le bit à la ième position est 1 et 0 sinon. Soit X = X_1 + X_2 + .... + X_m. Alors, E [X] = m * P.
Si le nombre total de bits définis est S, alors: E [X] = S ce qui implique m * P = S. Ceci pourrait être résolu pour n.
la source