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.
źródło
Odpowiedzi:
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, wynosii n k
Możesz zmierzyć to prawdopodobieństwo jako proporcję 0 bitów w filtrze. Rozwiązywanie dla dajei
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.
źródło
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 kk k nk n b t
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.
źródło
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.k no n nt o t a l m P.( k , no n, nt o t a l, m )
Jeśli , to P ( k , n o n , n t o t a l , m ) musi wynosić 0 , tzn. Jest to niemożliwe.k m < no n P.( k , no n, nt o t a l, 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.no n= 1 k m k m - 1
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=2 km 2 1 ntotal(ntotal−1) 2 (2/ntotal)km więc prawdopodobieństwo, że skróty mieszczą się w maksymalnie segmentach, wynosi:2
Wiemy już prawdopodobieństwo, że wpadną do wiadra, więc odejmijmy to, aby dać prawdopodobieństwo, że wpadną dokładnie do 2 .1 2
Myślę, że możemy to teraz uogólnić.
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 ) .m O ( n2))
źródło
n choose k
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:ja ja m i - 1 m m n i - 1 m - 1 n - ( m - 1 )
Przepisanie:
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)=1 P(m,0)=0 m≠0 P(0,i)=0 i≠0 O(mi) i P(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 .i k i/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).1n P(m,i) O(nm) i O(jm) j P O(mlogn)
źródło
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: .(1−1N)Kt≈e−KtN
Zatem oczekiwanie zerowych liczb bitowych powinno wynosić:
aproksymowane obserwacjąN-MNe−KtN N−M
Wreszcie mamyt=−NKl n (1−MN)
źródło
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.
źródło