Menghitung perkiraan populasi filter mekar

12

Diberikan filter mekar ukuran N-bit dan fungsi hash K, di mana M-bit (di mana M <= N) dari filter diatur.

Apakah mungkin untuk memperkirakan jumlah elemen yang dimasukkan ke filter bloom?

Contoh sederhana

Saya telah merenungkan contoh berikut, dengan asumsi BF 100-bit dan 5 fungsi hash di mana 10-bit diatur ...

Skenario kasus terbaik: Dengan asumsi fungsi hash benar-benar sempurna dan secara unik memetakan sedikit untuk beberapa nilai X, kemudian diberikan 10-bit yang telah ditetapkan kita dapat mengatakan bahwa hanya ada 2 elemen yang dimasukkan ke dalam BF

Skenario kasus terburuk: Dengan asumsi fungsi hash buruk dan konsisten memetakan ke bit yang sama (namun unik satu sama lain), maka kita dapat mengatakan 10 elemen telah dimasukkan ke dalam BF

Kisaran tampaknya [2,10] di mana sekitar dalam kisaran ini mungkin ditentukan oleh probabilitas positif-palsu dari filter - Saya terjebak pada titik ini.

Tander Kulip
sumber
4
Mengapa tidak menyimpan penghitung jumlah elemen yang dimasukkan? Hanya membutuhkan bit , jika Anda memasukkan elemen. nO(logn)n
Joe
@ Jo, meskipun itu ide yang bagus, itu memang merusak pertanyaan yang sangat menarik.
dan_waterworth
Hanya mencatat bahwa dengan duplikat, metode Joe akan memiliki beberapa kesalahan kecil karena kita tidak selalu bisa memastikan kapan menambahkan elemen apakah sudah ada (dan karenanya kita harus menambah hitungan atau tidak).
usul

Jawaban:

5

Iya. Dari Wikipedia :

Jika Anda telah memasukkan elemen ke dalam filter ukuran menggunakan fungsi hash , probabilitas bahwa bit tertentu masih 0 adalahn kink

z=(11n)ki

Anda dapat mengukur probabilitas ini sebagai proporsi 0 bit dalam filter Anda. Memecahkan untuk berikani

i=ln(z)kln(11n)

Saya telah menggunakan ini dalam praktiknya, dan selama filter Anda tidak melebihi kapasitasnya, kesalahan umumnya kurang dari 0,1% untuk filter hingga jutaan bit. Ketika filter melebihi kapasitasnya, kesalahan tentu saja naik.

Jay Hacker
sumber
3

Jika Anda berasumsi bahwa untuk setiap fungsi hash untuk setiap objek, bit diatur secara seragam secara acak, dan Anda memiliki jumlah jumlah bit yang telah ditetapkan, Anda harus dapat mengikat probabilitas bahwa jumlah objek yang dimasukkan adalah dalam kisaran tertentu, mungkin menggunakan formulasi bola dan tempat sampah. Setiap bit adalah sebuah nampan, dan itu diatur jika memiliki setidaknya 1 bola di dalamnya, setiap objek yang dimasukkan melempar bola , di mana k adalah jumlah fungsi hash, dan n k adalah jumlah bola yang dilemparkan setelah n objek dimasukkan . Mengingat bahwa b bins memiliki setidaknya 1 bola di dalamnya, berapakah probabilitas bahwa setidaknya t bola dilemparkan? Saya pikir di sini Anda dapat menggunakan fakta bahwa: kknknbt Tetapi masalah dengan rumusan itu adalah bahwa saya tidak melihat cara langsung untuk menghitung P ( t ) atau P ( b ) , tetapi menemukan nilai t yang memaksimalkan probabilitas itu seharusnya tidak terlalu sulit.

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

Pertanyaan yang menarik, mari kita lihat beberapa kasus tertentu.

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)

Saya pikir kita bisa menggeneralisasi ini sekarang.

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

mO(n2)

dan_waterworth
sumber
(ntotalnon)nonkm(ntotalnon1)(non1)kmn choose k
@ Jules, bagus, saya yakin sesuatu seperti itu akan terjadi, tetapi tidak punya waktu untuk mencari tahu.
dan_waterworth
P(non=x)=P(nonx)P(non<x)=P(nonx)P(nonx1)(ntotalx)(x/ntotal)kmP(nonx)
2

Misalkan hash didistribusikan secara seragam.

iimi1mmni1m1n(m1)

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

Menulis ulang:

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) memberi Anda perkiraan kemungkinan maksimum.

iki/k

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

Jules
sumber
2

Ide kuncinya adalah memperkirakan perkiraan jumlah bit nol.

(11N)KteKtN

Maka harapan angka nol bit harus:

NeKtNNM

t=NKln(1MN)

Yanghong Zhong
sumber
1

Probabilitas bahwa bit tertentu adalah 1 setelah n penyisipan adalah: P = 1 - (1 - 1 / m) ^ (kn)

Biarkan X_i menjadi variabel acak diskrit yaitu 1 jika bit pada posisi ke-1 adalah 1 dan 0 sebaliknya. Biarkan X = X_1 + X_2 + .... + X_m. Kemudian, E [X] = m * P.

Jika jumlah total set bit adalah S, maka: E [X] = S yang menyiratkan m * P = S. Ini bisa diselesaikan untuk n.

Nikhil
sumber