Bloom filtre karmaları: daha mı büyük mü?


15

Bir Bloom filtresini uygularken, geleneksel yaklaşım birden fazla bağımsız hash fonksiyonu gerektirir. Kirsch ve Mitzenmacher aslında sadece iki taneye ihtiyacınız olduğunu ve gerisini bunların doğrusal kombinasyonları olarak üretebileceğini gösterdi.

Benim sorum şu: iki karma fonksiyon ile iki kez entropi olan bir fonksiyon arasındaki fark nedir?

Bu, karma işlevlerinizin çıktısıyla gerçekte ne yaptığınıza bakmaktan gelir: 64 bitlik karma değerinizi alıp bit vektörünüzün boyutuna ölçeklendirirsiniz, ki bu muhtemelen 2'den önemli ölçüde daha küçüktür 64 . Bu açıkça bir entropi kaybeden dönüşümdür (nadir durumlarda karma boyutunuz ve filtre kapasiteniz tam olarak çakışır). 2'den az benim filtreyi etti varsayarsak 32 girdileri, iki 32 bit hash bölmeyi benim 64 bit hash değeri beni durdurmak ve bu doğrusal kombinasyonlarını alarak ne? Yoksa bir PRNG tohumlamak için mi kullanıyorsunuz?

Başka bir deyişle, standart yanlış pozitif oranın geçerli olmasını sağlamak için bir Bloom filtresine eklediğim her öğe hakkında ne kadar bilgiye ihtiyacım var? Veya daha genel olarak, öğeleri ne kadar iyi ayırt edebildiğim (bunları tanımlamak için kaç bit kullandığım) ile Bloom filtrenin nasıl performans gösterdiği arasındaki ilişki nedir?

Bir filtre boyutu m için bit veya yanlış pozitif olasılıklı n element saklamak için 2 ( lg ( - n ln p ) - 2 lg ( ln 2 ) ) bit ile uzaklaşabileceğimden eminim p ....2lg(m)m2(lg(-nlnp)-2lg(ln2))np

Yanıtlar:


16

Karma işlevlerini "üretilen rastgele bitler" olarak düşünme hakkınız vardır. Eğer 64 bit karma üreten bir karma fonksiyonunuz varsa, 4 16-bit karma (bölünerek) gibi davranabilirsiniz.

2lg(m)


5
Cstheory'e hoş geldiniz, Michael :)
Suresh Venkat
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.