Calcul de la population approximative d'un filtre de floraison

12

É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.

Tander Kulip
la source
4
Pourquoi ne pas garder un compteur du nombre d'éléments insérés? Il ne prend que bits supplémentaires , si vous avez inséré n éléments. O(logn)n
Joe
@Joe, bien que ce soit une bonne idée, cela gâche une question vraiment intéressante.
dan_waterworth
Juste en notant qu'avec les doublons, la méthode de Joe aura une petite erreur car nous ne pouvons pas toujours dire avec certitude lors de l'ajout d'un élément s'il est déjà présent (et donc devrions-nous incrémenter le nombre ou non).
usul

Réponses:

5

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 estink

z=(11n)ki

Vous pouvez mesurer cette probabilité comme la proportion de 0 bits dans votre filtre. Résoudre pour donnei

i=ln(z)kln(11n)

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.

Jay Hacker
la source
3

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: kknknbt 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.

P(t balls|b bins)=P(b bins|t balls)P(t)/P(b)
P(t)P(b)t
Joe
la source
2

Question intéressante, regardons quelques cas spécifiques.

knonntotalmP(k,non,ntotal,m)

km<nonP(k,non,ntotal,m)0

non=1kmkm1

P(k,1,ntotal,m)=(1/ntotal)(km1)

non=2km21ntotal(ntotal1)2(2/ntotal)km2

ntotal(ntotal1)(2/ntotal)km

12

P(k,2,ntotal,m)=ntotal(ntotal1)(2/ntotal)km(1/ntotal)(km1)

Je pense que nous pouvons généraliser cela maintenant.

P(k,non,ntotal,m)=(ntotalnon)(non/ntotal)kmi=1i<nonP(k,i,ntotal,m)

mO(n2)

dan_waterworth
la source
(ntotalnon)nonkm(ntotalnon1)(non1)kmn choose k
@Jules, super, j'étais sûr que quelque chose comme ça arriverait, mais je n'ai pas eu le temps de le comprendre.
dan_waterworth
P(non=x)=P(nonx)P(non<x)=P(nonx)P(nonx1)(ntotalx)(x/ntotal)kmP(nonx)
2

Supposons que les hachages soient uniformément distribués.

iimi1mmni1m1n(m1)

P(m,i)=P(m,i1)(m/n)+P(m1,i1)(n(m1))/n

Réécriture:

P(m,i)=1n(mP(m,i1)+(nm+1)P(m1,i1))

P(0,0)=1P(m,0)=0m0P(0,i)=0i0O(mi)iP(m,i) vous donne l'estimation du maximum de vraisemblance.

iki/k

1nP(m,i)O(nm)iO(jm)jPO(mlogn)

Jules
la source
2

L'idée clé est d'approximer l'espérance du nombre de bits zéro.

(11N)KteKtN

Alors, l'attente de nombres à zéro bit devrait être:

NeKtNNM

t=NKln(1MN)

Yanghong Zhong
la source
1

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.

Nikhil
la source