Tính toán dân số gần đúng của bộ lọc nở


12

Cho một bộ lọc nở của các hàm N-bit và hàm băm có kích thước, trong đó các bit M (trong đó M <= N) của bộ lọc được đặt.

Có thể tính gần đúng số lượng phần tử được chèn vào bộ lọc nở không?

Ví dụ đơn giản

Tôi đã nghiên cứu kỹ về ví dụ sau, giả sử BF là 100 bit và 5 hàm băm trong đó 10 bit được đặt ...

Kịch bản trường hợp tốt nhất: Giả sử các hàm băm thực sự hoàn hảo và ánh xạ duy nhất một chút cho một số giá trị X, sau đó đã đưa ra 10 bit, chúng ta có thể nói rằng chỉ có 2 phần tử được chèn vào BF

Trường hợp xấu nhất: Giả sử các hàm băm là xấu và ánh xạ nhất quán đến cùng một bit (nhưng là duy nhất lẫn nhau), thì chúng ta có thể nói 10 phần tử đã được chèn vào BF

Phạm vi dường như là [2,10] trong đó độ trễ trong phạm vi này có thể được xác định bởi xác suất bộ lọc dương tính giả - tôi bị kẹt tại thời điểm này.


4
Tại sao không giữ một bộ đếm số lượng phần tử được chèn? Nó chỉ mất thêm một bit , nếu bạn chèn phần tử. nO(logn)n
Joe

@Joe, trong khi đó là một ý tưởng tốt, nó làm hỏng một câu hỏi thực sự thú vị.
dan_waterworth

Chỉ cần lưu ý rằng với các bản sao, phương pháp của Joe sẽ có một số lỗi nhỏ vì chúng ta không thể luôn chắc chắn khi thêm một phần tử cho dù nó đã có mặt (và do đó chúng ta có nên tăng số đếm hay không).
usul

Câu trả lời:


5

Đúng. Từ Wikipedia :

Nếu bạn đã chèn phần tử vào bộ lọc có kích thước bằng cách sử dụng hàm băm , xác suất một bit nhất định vẫn là 0 làink

z=(11n)ki

Bạn có thể đo xác suất này là tỷ lệ 0 bit trong bộ lọc của mình. Giải quyết cho mang đến choi

i=ln(z)kln(11n)

Tôi đã sử dụng điều này trong thực tế và miễn là bộ lọc của bạn không vượt quá khả năng của nó, lỗi thường nhỏ hơn 0,1% đối với các bộ lọc lên đến hàng triệu bit. Khi bộ lọc vượt quá khả năng của nó, lỗi tất nhiên sẽ tăng lên.


3

Nếu bạn giả sử rằng đối với mỗi hàm băm cho từng đối tượng, một bit được đặt thống nhất ngẫu nhiên và bạn có số đếm về số bit đã được đặt, bạn sẽ có thể ràng buộc xác suất số lượng đối tượng được chèn vào trong một phạm vi nhất định, có thể sử dụng một công thức bóng và thùng. Mỗi bit là một thùng và nó được đặt nếu nó có ít nhất 1 quả bóng trong đó, mỗi đối tượng được ném vào quả bóng , trong đó là số hàm băm và là số quả bóng được ném sau khi đối tượng được chèn. Cho rằng các thùng có ít nhất 1 quả bóng trong đó, xác suất để ít nhất quả bóng được ném là gì? Tôi nghĩ ở đây bạn có thể sử dụng thực tế rằng: k n k n b t P ( t  bóng | b  thùng ) = P ( b  thùng | t  bóng ) P ( t ) / P ( b )kknknbt

P(t balls|b bins)=P(b bins|t balls)P(t)/P(b)
Nhưng vấn đề với công thức đó là tôi không thấy một cách đơn giản để tính hoặc , nhưng việc tìm giá trị của để tối đa hóa xác suất đó không nên quá khó.P ( b ) tP(t)P(b)t

2

Câu hỏi thú vị, hãy xem xét một số trường hợp cụ thể.

Để có khóa, n o n bit trên, n t o t a l bit trong tổng số và m phần tử được chèn. Trước tiên chúng ta sẽ cố gắng tìm một hàm P ( k , n o n , n t o t a l , m ) là xác suất của trạng thái xảy ra.knonntotalmP(k,non,ntotal,m)

Nếu , thì P ( k , n o n , n t o t a l , m ) phải là 0 , tức là không thể áp dụng được.km<nonP(k,non,ntotal,m)0

Nếu , thì chúng ta đang tìm xác suất để k m băm rơi vào cùng một nhóm, cái đầu tiên có thể đánh dấu nơi những người khác nên đi. Vì vậy, chúng tôi muốn tìm xác suất để k m - 1 băm rơi vào một nhóm cụ thể.non=1kmkm1

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

Đó là những trường hợp thực sự đơn giản hơn. Nếu thì chúng ta muốn tìm xác suất k m băm hạ cánh trong 2 thùng khác nhau và ít nhất 1 lần rơi trong mỗi thùng . Có n t o t một l ( n t o t một l - 1 ) cặp xô và xác suất mà băm đất trong bất kỳ cụ thể 2( 2 / n t o t một l ) k mnon=2km21ntotal(ntotal1)2(2/ntotal)kmvì vậy xác suất để các giá trị băm rơi vào tối đa nhóm là:2

ntotal(ntotal1)(2/ntotal)km

Chúng ta đã biết xác suất rằng chúng sẽ rơi vào thùng, vì vậy hãy trừ đi để đưa ra xác suất rằng chúng sẽ rơi vào đúng 2 .12

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

Tôi nghĩ rằng chúng ta có thể khái quát điều này ngay bây giờ.

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

Tôi không chắc chắn làm thế nào để làm cho công thức này dễ dàng hơn để tính toán. Được thực hiện một cách chắc chắn, nó sẽ dẫn đến thời gian thực hiện theo cấp số nhân, mặc dù nó không quan trọng, thông qua việc ghi nhớ, để đạt được thời gian tuyến tính. Đó chỉ là một trường hợp tìm thấy nhiều khả năng . Bản năng của tôi nói rằng sẽ có một đỉnh duy nhất để có thể tìm thấy nó rất nhanh, nhưng ngây thơ, bạn chắc chắn có thể tìm thấy nhiều nhất có thể là m trong O ( n 2 ) .mO(n2)


Tôi nghĩ rằng công thức của bạn hủy bỏ (bỏ qua các yếu tố không đổi). Bạn có thể tính toán tối đa của phân tích này: mở rộng yếu tố đầu tiên của thuật ngữ thứ hai và loại bỏ các yếu tố không đổi để loại bỏ tất cả, và sau đó công thức của bạn trở nên rất đơn giản. (ntotalnon)nonkm(ntotalnon1)(non1)kmn choose k
Jules

@Jules, tuyệt vời, tôi chắc chắn điều gì đó sẽ xảy ra, nhưng không có thời gian để tìm ra nó.
dan_waterworth

Bạn cũng có thể đến công thức đó trực tiếp theo cách sau: . Sau đó cắm vào ( n t o t a lP(non=x)=P(nonx)P(non<x)=P(nonx)P(nonx1)vớiP(nonx). (ntotalx)(x/ntotal)kmP(nonx)
Jules

2

Giả sử rằng băm được phân phối đồng đều.

Đặt là số băm được chèn. Kể từ khi chúng tôi có i băm vào m thùng nếu chúng ta có i - 1 băm vào m thùng và băm tiếp theo đi vào một trong những m ra khỏi n thùng HOẶC nếu chúng ta có i - 1 băm vào m - 1 thùng và băm tiếp theo đi vào một trong các thùng n - ( m - 1 ) khác , chúng ta có:iimi1mmni1m1n(m1)

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

Viết lại:

P(m,Tôi)= =1n(mP(m,Tôi-1)+(n-m+1)P(m-1,Tôi-1))

P(0,0)=1P(m,0)=0m0P(0,i)=0i0O(mi)iP(m,i) cung cấp cho bạn ước tính khả năng tối đa.

iki/k

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


2

Ý tưởng chính là ước tính số lượng bit không.

(11N)KteKtN

Sau đó, kỳ vọng của số bit 0 sẽ là:

NeKtNNM

t=NKln(1MN)


1

Xác suất mà một bit cụ thể là 1 sau n lần chèn là: P = 1 - (1 - 1 / m) ^ (kn)

Let X_i be a discrete random variable which is 1 if the bit at i'th position is 1 and 0 otherwise. Let X = X_1 + X_2 + .... + X_m. Then, E[X] = m * P.

If total number of set bits are S, then: E[X] = S which implies m * P = S. This could be solved for n.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.