블룸 필터의 대략적인 모집단 계산


12

크기 N 비트의 블룸 필터와 필터의 M 비트 (여기서 M <= N)가 설정된 K 해시 함수가 제공됩니다.

블룸 필터에 삽입 된 요소 수를 근사 할 수 있습니까?

간단한 예

100 비트의 BF와 10 비트가 설정된 5 개의 해시 함수를 가정하고 다음 예제를 숙고했습니다 ...

모범 사례 시나리오 : 해시 함수가 완벽하고 일부 X 값의 비트를 고유하게 매핑한다고 가정하면 10 비트가 설정되면 BF에 2 개의 요소 만 삽입되었다고 말할 수 있습니다

최악의 시나리오 : 해시 함수가 나쁘고 일관되게 동일한 비트에 서로 매핑되어 있다고 가정하면 10 개의 요소가 BF에 삽입되었다고 말할 수 있습니다.

범위는 [2,10]으로 보이며이 범위의 정보는 필터의 오 탐지 확률에 의해 결정됩니다.이 시점에서 멈춰 있습니다.


4
삽입 된 요소 수의 카운터를 유지하지 않는 이유는 무엇입니까? 요소 를 삽입 한 경우 추가 비트 만 필요합니다 . nO(logn)n
Joe

@Joe, 그것이 좋은 생각이지만, 정말 흥미로운 질문을 망칩니다.
dan_waterworth

중복을 사용하여 Joe의 방법은 요소가 이미 존재하는지 여부를 항상 확인할 수 없기 때문에 약간의 오류가 발생합니다 (따라서 카운트를 증가시켜야하는지 여부).
usul

답변:


5

예. 에서 위키 백과 :

해시 함수를 사용하여 크기 의 필터에 요소를 삽입 한 경우 특정 비트가 여전히 0 일 확률은N Kink

z=(11n)ki

이 확률을 필터에서 0 비트의 비율로 측정 할 수 있습니다 . 주는 해결i

i=ln(z)kln(11n)

실제로 이것을 사용했으며 필터가 용량을 초과하지 않는 한 오류는 일반적으로 수백만 비트까지의 필터에 대해 0.1 % 미만입니다. 필터가 용량을 초과하면 물론 오류가 발생합니다.


3

각 객체에 대한 각 해시 함수에 대해 비트가 무작위로 균일하게 설정되고 설정된 비트 수를 세는 경우 삽입 된 객체 수가 특정 범위 내에서, 아마도 공 및 통 제형을 사용하는 것. 각 비트는 빈 (bin)이며, 최소 1 개의 볼이있는 경우 설정되며, 삽입 된 각 오브젝트는 볼을 던지며 , 여기서 는 해시 함수의 수이고, 는 오브젝트가 삽입 된 후 발생한 볼의 수입니다 . 빈에 적어도 1 개의 공이 있다고 가정하면 , 적어도 개의 공이 던져 질 확률은 얼마입니까? 나는 여기서 당신이 다음과 같은 사실을 사용할 수 있다고 생각합니다. k n k n b t P ( t  공 | b  빈 ) = P ( b  빈 | t  공 ) P ( t ) / P ( b ) P ( t ) P ( b ) tkknknbt

P(t balls|b bins)=P(b bins|t balls)P(t)/P(b)
그러나 그 공식의 문제 또는 를 계산하는 간단한 방법 은 보이지 않지만 확률을 극대화하는 값을 찾는 것이 너무 어렵지 않아야한다는 것입니다.P(t)P(b)t

2

흥미로운 질문은 몇 가지 구체적인 사례를 살펴 보겠습니다.

있으라 키 에 비트 합계와 비트 삽입 소자. 먼저 상태가 발생할 확률 인 함수 를 찾으려고합니다 .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

우리는 이미 버킷에 떨어질 확률을 알고 있으므로 정확히 빠질 확률을 뺍니다 .212

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

지금 일반화 할 수 있다고 생각합니다.

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

이 수식을 계산하기에 더 잘 만드는 방법을 정확히 모르겠습니다. 순진하게 구현하면 선형 시간을 달성하기 위해 메모를 통해 사소한 것이지만 지수 시간 실행 시간이 발생합니다. 그런 다음 가장 가능성이 높은 을 찾는 경우입니다 . 내 본능에 따르면 단일 피크가 있으므로 매우 빨리 찾을 수 있지만 순진하게도 에서 가장 가능성이 높은 m을 찾을 수 있습니다 .mO(n2)


수식이 (상수 요인 무시). 이 최대 값을 분석적으로 계산할 수 있습니다. 두 번째 항의 첫 번째 요소를 확장하고 상수를 제거하여 모든를 제거하면 수식이 매우 간단 해집니다. (ntotalnon)nonkm(ntotalnon1)(non1)kmn choose k
Jules

@ Jules, 좋아요, 그런 일이 일어날 것이라고 확신했지만 그것을 알아낼 시간이 없었습니다.
dan_waterworth

당신은 또한 다음과 같은 방법으로 직접 그 공식에 도달 할 수 입니다. 그런 다음 에 을 연결하십시오 . P(non=x)=P(nonx)P(non<x)=P(nonx)P(nonx1)(ntotalx)(x/ntotal)kmP(nonx)
Jules

2

해시가 균일하게 분산되어 있다고 가정합니다.

하자 삽입 해시의 숫자. 우리가 이후 에 해시 빈들 우리는이 경우 에 해시 빈들, 다음 해시 그 중 하나로 진행 에서 빈들 OR 우리가있는 경우 에 해시를 빈과 다음 해시 간다 다른 빈 중 하나에 다음 이 있습니다.iimi1mmni1m1n(m1)

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

재 작성 :

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

우리는 또한이 및 때 및 경우 . 이는 P를 계산하기위한 동적 프로그래밍 알고리즘을 제공합니다. 를 최대화 하는 를 계산 하면 최대 가능성 추정치가 제공됩니다.P(0,0)=1P(m,0)=0m0P(0,i)=0i0O(mi)iP(m,i)

이 블룸 필터에 번 해시하고 항목 당 해시가있는 경우 항목 수는 입니다.iki/k

속도를 높이려면 몇 가지 작업을 수행 할 수 있습니다. 요소 는 최대 위치를 변경하지 않으므로 생략 할 수 있습니다. 를 여러 번 호출하여 동적 프로그래밍 테이블을 공유하여 (점근) 실행 시간을 로 줄일 수 있습니다. 단일 최대 값이 있다고 생각한다면 통해 반복을 일찍 중단하고 실행 시간을 얻을 수 있습니다 여기서 는 가 최대 값을 차지하는 지점 이거나 이진 검색을 수행하고 얻습니다. . P(m,i)O(nm)iO(jm)jPO(mlogn)1nP(m,i)O(nm)iO(jm)jPO(mlogn)


2

핵심 아이디어는 제로 비트 수에 대한 기대치를 근사화하는 것입니다.

비트마다, K 해시 함수 t 삽입 후에 제로가되는 가능성은 : .(11N)KteKtN

그런 다음 0 비트 숫자의 기대 값은 다음과 같아야합니다.

N-MNeKtN관측치에 의해 근사 된NM

마지막으로t=NKln(1MN)


1

n 삽입 후 특정 비트가 1 일 확률은 다음과 같습니다. P = 1-(1-1 / m) ^ (kn)

X_i는 i 번째 위치의 비트가 1이면 1이고, 그렇지 않으면 0 인 이산 랜덤 변수입니다. X = X_1 + X_2 + .... + X_m으로 둡니다. 그런 다음 E [X] = m * P.

세트 비트의 총 개수가 S이면, E [X] = S는 m * P = S를 의미한다. 이것은 n에 대해 해결 될 수있다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.