Bir çiçek filtresinin yaklaşık popülasyonunu hesaplama


12

Filtrenin M-bitlerinin (M <= N) ayarlandığı N-bit ve K hash fonksiyonları boyutlarında bir çiçek filtresi verilir.

Bloom filtresine yerleştirilen elemanların sayısına yaklaşmak mümkün mü?

Basit Örnek

10 bitlik ayarlanmış 100 bitlik ve 5 karma işlevli bir BF varsayarak, aşağıdaki örnek üzerinde mulling yapıyorum ...

En iyi durum senaryosu: Karma işlevlerinin gerçekten mükemmel olduğunu ve bazı X sayısı değerleri için biraz eşleştirildiğini varsayarsak, 10 bit verildiğinde, BF'ye yalnızca 2 öğe eklendiğini söyleyebiliriz

En kötü senaryo: Karma işlevlerinin kötü olduğu ve tutarlı olarak aynı bitle eşleştiği (ancak birbirlerinin arasında benzersiz) olduğu varsayılarak, BF'ye 10 öğenin eklendiğini söyleyebiliriz

Aralık [2,10] gibi görünüyor, bu aralıktaki yaklaşıklar muhtemelen filtrenin yanlış pozitif olasılığı ile belirlenir - Ben bu noktada takılı kaldım.


4
Neden eklenen eleman sayısının bir sayacını tutmuyorsunuz? N eleman eklediyseniz, yalnızca ek bir biti alır . O(logn)n
Joe

@Joe, bu iyi bir fikir olsa da, gerçekten ilginç bir soruyu mahvediyor.
dan_waterworth

Yinelenen kayıtlarda, Joe'nun yönteminde küçük bir hata olacağına dikkat çekeriz, çünkü zaten mevcut olup olmadığını bir öğe eklerken her zaman emin olamayız (ve dolayısıyla sayıyı artırıp artırmamalıyız).
usul

Yanıtlar:


5

Evet. Gönderen Vikipedi :

Eğer takılı varsa boyutu bir filtreye elemanları n kullanarak k hash fonksiyonları, olasılık belli Bit 0 hala edilir olduğunuink

z=(11n)ki

Sen olabilir ölçmek filtrenizde 0 bit oranı olarak bu olasılık. verir için çözmei

i=ln(z)kln(11n)

Bunu pratikte kullandım ve filtreniz kapasitesini aşmadığı sürece, milyonlarca bite kadar filtreler için hata genellikle% 0.1'den azdır. Filtre kapasitesini aştıkça, hata elbette artar.


3

Her nesne için her karma işlevi için, bir bitin rasgele bir şekilde ayarlandığını ve ayarlanan bitlerin sayısını sayarsanız, eklenen nesne sayısının olasılığını sınırlayabilmeniz gerekir. Belli bir aralıkta, belki bir top ve kutu formülasyonu kullanarak Her bit bir bölmedir ve içinde en az 1 top varsa ayarlanır, eklenen her nesne topu atar , burada k karma işlevlerinin sayısıdır ve n k , n nesne yerleştirildikten sonra atılan top sayısıdır. . Göz önüne alındığında b kutuları en azından olasılık nedir, onlara en az 1 balo t topları atıldı? Bence burada şu gerçeği kullanabilirsiniz: kknknbt Ancak bu formülasyondaki sorun P ( t ) ' yi hesaplamak için basit bir yol görmemem ya da P ( b ) , ancakbu olasılığı en üst düzeye çıkaran t'nin değerini bulmakçok zor olmamalıdır.

P(t balls|b bins)=P(b bins|t balls)P(t)/P(b)
P(t)P(b)t

2

İlginç bir soru, bazı özel durumlara bakalım.

Söz konusu olsun anahtarlar, n O , n bitler, n t o T bir L ve toplam bitleri m yerleştirilmiş elemanlar. İlk olarak , bir durumun meydana gelme olasılığı olan bir P ( k , n o n , n t o t a l , m ) fonksiyonu bulmaya çalışacağız .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)

Sanırım bunu şimdi genelleştirebiliriz.

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

Bu formülü hesaplamaya nasıl daha uygun hale getireceğimden tam olarak emin değilim. Saf bir şekilde uygulandığında, doğrusal zamana ulaşmak için hatırlatma yoluyla önemsiz olsa da, üstel zaman yürütme süresi ile sonuçlanacaktır. O zaman sadece en olası bulma örneğidir . İçgüdüm, tek bir zirve olacağını söylüyor, bu yüzden onu çok hızlı bir şekilde bulmak mümkün olabilir, ama safça, en olası m'yi içinde kesinlikle bulabilirsiniz .mO(n2)


Formülünüzün için iptal ettiğini düşünüyorum (sabit faktörleri göz ardı ederek). Bunun maksimumunu analitik olarak hesaplayabilirsiniz: ikinci terimin ilk faktörünü genişletebilir ve hepsinden kurtulmak için sabit faktörleri kaldırabilirsiniz ve daha sonra formülünüz çok basit hale gelir. (ntotalnon)nonkm(ntotalnon1)(non1)kmn choose k
Jules

@Jules, harika, böyle bir şeyin olacağından emindim, ama anlayacak zamanım yoktu.
dan_waterworth

Bu formüle doğrudan şu şekilde de ulaşabilirsiniz: . Ardından için . P(non=x)=P(nonx)P(non<x)=P(nonx)P(nonx1)(ntotalx)(x/ntotal)kmP(nonx)
Jules

2

Karmaların eşit dağıldığını varsayın.

Let eklenen karma sayısı olabilir. Elimizdeki bu yana içine sağlamalarının kutuları biz varsa içine karmaları kutuları ve sonraki karma onlardan biri girer dışına kutuları VEYA biz varsa içine karmaları kutuları ve sonraki karma gider diğer kutularından birine,iimi1mmni1m1n(m1)

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

yeniden Yazma:

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

Ayrıca olduğunda ve ve olduğunda . Bu, P'yi hesaplamak için bir dinamik programlama algoritması verir. değerini en üst düzeye çıkaran hesaplanması size maksimum olasılık tahmini verir.P(0,0)=1P(m,0)=0m0P(0,i)=0i0O(mi)iP(m,i)

Bu çiçeklenme filtresine kez katıldığımızı ve öğe başına hash'imiz olduğunu biliyorsanız, öğe sayısı .iki/k

Hızlandırmak için birkaç şey yapabilirsiniz. faktörü , maksimum konumunu değiştirmediği için dışarıda bırakılabilir. (Asimptotik) çalışma süresini olarak azaltmak için dinamik programlama tablolarını birden fazla çağrısıyla paylaşabilirsiniz . Tek bir maksimum olduğuna inanmaya istekliyseniz, yinelemeyi üzerinde erken durdurabilir ve çalışma süresi ; burada , maksimum aldığı noktadır , hatta ikili bir arama yapabilir ve . P(m,i)O(nm)iO(jm)jPO(mlogn)1nP(m,i)O(nm)iO(jm)jPO(mlogn)


2

Anahtar fikir, sıfır bit sayısının beklentisini tahmin etmektir.

Her bit için, K hash işlevlerine sahip t ekleme işlemlerinden sonra sıfır olma olasılığı: .(11N)KteKtN

O zaman sıfır bit sayı beklentisi şöyle olmalıdır:

N-MNeKtN gözlemiyle yaklaşıkNM

Sonunda aldıkt=NKln(1MN)


1

N eklemeden sonra belirli bir bitin 1 olması olasılığı: P = 1 - (1 - 1 / m) ^ (kn)

X_i, i'th konumundaki bit 1 ve 0 ise 1 olan ayrık rasgele bir değişken olsun. X = X_1 + X_2 + .... + X_m olsun. Sonra, E [X] = m * P.

Toplam set biti sayısı S ise, o zaman: m [P] S anlamına gelen E [X] = S. Bu n için çözülebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.