Obliczanie przybliżonej populacji filtra Blooma

12

Biorąc pod uwagę filtr Blooma o rozmiarze N-bitów i funkcjach skrótu K, w których ustawionych jest M-bitów (gdzie M <= N) filtra.

Czy jest możliwe przybliżenie liczby elementów wstawionych do filtra Bloom?

Prosty przykład

Zastanawiam się nad poniższym przykładem, zakładając BF 100 bitów i 5 funkcji skrótu, w których ustawiono 10 bitów ...

Najlepszy scenariusz: przy założeniu, że funkcje skrótu są naprawdę idealne i wyjątkowo mapują trochę dla pewnej liczby X wartości, to po ustawieniu 10 bitów możemy powiedzieć, że do BF wstawiono tylko 2 elementy

Najgorszy scenariusz: Zakładając, że funkcje skrótu są złe i konsekwentnie odwzorowywane na ten sam bit (ale unikatowy między sobą), to możemy powiedzieć, że 10 elementów zostało wstawionych do BF

Zakres wydaje się wynosić [2,10], gdzie w przybliżeniu w tym zakresie prawdopodobnie określa się fałszywie dodatnie prawdopodobieństwo filtra - utknąłem w tym momencie.

Tander Kulip
źródło
4
Dlaczego nie zachować licznika liczby wstawionych elementów? Potrzeba tylko dodatkowych bitów , jeśli wstawiłeś elementów. O(logn)n
Joe
@Joe, chociaż to dobry pomysł, zrujnuje to naprawdę interesujące pytanie.
dan_waterworth
Wystarczy zauważyć, że w przypadku duplikatów metoda Joe'a będzie miała mały błąd, ponieważ nie zawsze możemy na pewno powiedzieć podczas dodawania elementu, czy jest już obecny (i dlatego powinniśmy zwiększyć liczbę, czy nie).
usul

Odpowiedzi:

5

Tak. Z Wikipedii :

Jeśli wstawiłeś elementy do filtra o rozmiarze za pomocą funkcji skrótu, prawdopodobieństwo, że określony bit nadal wynosi 0, wynosiink

z=(11n)ki

Możesz zmierzyć to prawdopodobieństwo jako proporcję 0 bitów w filtrze. Rozwiązywanie dla dajei

i=ln(z)kln(11n)

Użyłem tego w praktyce i dopóki twój filtr nie przekracza swojej pojemności, błąd jest generalnie mniejszy niż 0,1% dla filtrów do milionów bitów. Gdy filtr przekracza swoją pojemność, błąd oczywiście rośnie.

Jay Hacker
źródło
3

Jeśli przyjmiesz, że dla każdej funkcji skrótu dla każdego obiektu bit jest ustawiany równomiernie losowo, a masz liczyć na liczbę bitów, które zostały ustawione, powinieneś być w stanie ograniczyć prawdopodobieństwo, że liczba wstawionych obiektów była w określonym zakresie, być może przy użyciu formuły kulek i pojemników. Każdy bit jest koszem i jest ustawiany, jeśli ma w nim co najmniej 1 piłkę, każdy wstawiony obiekt rzuca piłek, gdzie jest liczbą funkcji skrótu, a jest liczbą piłek rzuconych po wstawieniu n obiektów. Biorąc pod uwagę, że kosze b mają w sobie co najmniej 1 piłkę, jakie jest prawdopodobieństwo, że wyrzucono co najmniej t piłki? Myślę, że tutaj możesz skorzystać z faktu, że: Pk n kkknknbt Ale problem z tym sformułowaniem polega na tym, że nie widzę prostego sposobu obliczenia P ( t ) lub P ( b ) , ale znalezienie wartości t, która maksymalizuje to prawdopodobieństwo, nie powinno być zbyt trudne.

P.(t kulki|b pojemniki)=P.(b pojemniki|t kulki)P.(t)/P.(b)
P.(t)P.(b)t
Joe
źródło
2

Ciekawe pytanie, spójrzmy na niektóre konkretne przypadki.

Niech będzie klucze, N O N bitów na, n t o t a l bitów całkowitego i m elementów wstawianych. Najpierw spróbujemy znaleźć funkcję P ( k , n o n , n t o t a l , m ), która jest prawdopodobieństwem wystąpienia stanu.knonntotzalmP.(k,non,ntotzal,m)

Jeśli , to P ( k , n o n , n t o t a l , m ) musi wynosić 0 , tzn. Jest to niemożliwe.km<nonP.(k,non,ntotzal,m)0

Jeśli , a następnie szukamy prawdopodobieństwo, że k m hashe spaść w tym samym wiadrze, pierwszy może oznaczać gdzie reszta powinna pójść. Chcemy więc ustalić prawdopodobieństwo, że hasze k m - 1 wpadną do określonego segmentu.non=1kmkm-1

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

To naprawdę proste przypadki. Jeśli wówczas znaleźć prawdopodobieństwo k m skróty ziemi w 2 różnych wiadra i co najmniej jeden mieści się w każdej z nich. Istnieje n t o t l ( n t o t L - 1 ) par wiadra i prawdopodobieństwo, że skróty ziemi w indywidualnych 2 jest ( 2 / n t o t l ) k mnon=2km21ntotal(ntotal1)2(2/ntotal)kmwięc prawdopodobieństwo, że skróty mieszczą się w maksymalnie segmentach, wynosi:2

ntotal(ntotal1)(2/ntotal)km

Wiemy już prawdopodobieństwo, że wpadną do wiadra, więc odejmijmy to, aby dać prawdopodobieństwo, że wpadną dokładnie do 2 .12

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

Myślę, że możemy to teraz uogólnić.

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

Nie jestem do końca pewien, jak uczynić tę formułę bardziej podatną na obliczenia. Zaimplementowane naiwnie, spowodowałoby to czas wykonania wykładniczego czasu, choć jest trywialne, poprzez zapamiętywanie, aby osiągnąć czas liniowy. To tylko przypadek znalezienia najbardziej prawdopodobnego . Mój instynkt mówi, że będzie jeden pik, więc może być możliwe znalezienie go bardzo szybko, ale naiwnie zdecydowanie można znaleźć m w O ( n 2 ) .mO(n2))

dan_waterworth
źródło
Myślę, że twoja formuła anuluje się do (ignorując czynniki stałe). Możesz obliczyć maksimum tego analitycznie: rozwiń pierwszy czynnik drugiego terminu i usuń stałe czynniki, aby się ich pozbyć, a wtedy twoja formuła stanie się bardzo prosta. (ntotzalnon)nonkm-(ntotzalnon-1)(non-1)kmn choose k
Jules
@Jules, świetnie, byłem pewien, że coś takiego się wydarzy, ale nie miałem czasu, aby to rozgryźć.
dan_waterworth
Możesz również dojść do tej formuły bezpośrednio w następujący sposób: . Następnie podłącz ( n t o t a lP(non=x)=P(nonx)P(non<x)=P(nonx)P(nonx1)dlaP(nonx). (ntotalx)(x/ntotal)kmP(nonx)
Jules
2

Załóżmy, że skróty są równomiernie rozmieszczone.

Pozwól być liczba wstawionych skrótów. Ponieważ mamy i hashe w m binach, jeśli mamy i - 1 hashe w m binsach, a następny hash przechodzi do jednego z tych m spośród n bin LUB jeśli mamy i - 1 hashe w m - 1 binach, a następny hash idzie w jednym z innych n - ( m - 1 ) pojemników mamy:jajamja-1mmnja-1m-1n-(m-1)

P.(m,ja)=P.(m,ja-1)(m/n)+P.(m-1,ja-1)(n-(m-1))/n

Przepisanie:

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

Mamy również i P ( m , 0 ) = 0, gdy m 0 i P ( 0 , i ) = 0, gdy i 0 . Daje to algorytm programowania dynamicznego O ( m i ) do obliczania P. Obliczanie i, które maksymalizuje P ( m , i )P(0,0)=1P(m,0)=0m0P(0,i)=0i0O(mi)iP(m,i) daje oszacowanie maksymalnego prawdopodobieństwa.

Jeśli wiemy, że mamy zakodowane w ten filtr kwitną razy i mamy k hashe za przedmiot, wówczas liczba elementów jest I / k .iki/k

Aby to przyspieszyć, możesz zrobić kilka rzeczy. Współczynnik można pominąć, ponieważ nie zmienia położenia maksimum. Możesz udostępniać tabele programowania dynamicznego z wieloma wywołaniami doP(m,i),aby skrócić (asymptotyczny) czas działania doO(nm). Jeśli jesteś skłonny uwierzyć, że istnieje tylko jedno maksimum, można zatrzymać iteracji nadIwcześnie i uzyskać czas pracyO(jm), gdziejjest punkt, w którymPbierze na maksimum, a nawet zrobić wyszukiwania binarnego i getO(mlogn).1nP(m,i)O(nm)iO(jm)jPO(mlogn)

Jules
źródło
2

Kluczową ideą jest przybliżenie oczekiwanej liczby bitów zerowych.

Dla każdego bitu możliwość wyzerowania po t wstawieniu za pomocą funkcji skrótu K wynosi: .(11N)KteKtN

Zatem oczekiwanie zerowych liczb bitowych powinno wynosić:

aproksymowane obserwacjąN-MNeKtNNM

Wreszcie mamy t=NK.ln(1-M.N.)

Yanghong Zhong
źródło
1

Prawdopodobieństwo, że dany bit ma wartość 1 po n wstawieniu, wynosi: P = 1 - (1 - 1 / m) ^ (kn)

Niech X_i będzie dyskretną zmienną losową, która wynosi 1, jeśli bit na i-tej pozycji wynosi 1, a w przeciwnym razie 0. Niech X = X_1 + X_2 + .... + X_m. Następnie E [X] = m * P.

Jeśli całkowita liczba ustawionych bitów to S, to: E [X] = S, co oznacza m * P = S. Można to rozwiązać dla n.

Nikhil
źródło