ブルームフィルターのおおよその母集団の計算


12

サイズNビットのブルームフィルターとK個のハッシュ関数があり、そのうちMビット(M <= N)のフィルターが設定されているとします。

ブルームフィルターに挿入された要素の数を概算することはできますか?

簡単な例

100ビットのBFと、10ビットが設定されている5つのハッシュ関数を想定して、次の例を熟考しています...

ベストケースのシナリオ:ハッシュ関数が本当に完璧で、X個の値にビットを一意にマッピングし、10ビットが設定されていると仮定すると、BFに挿入された要素は2つだけであると言えます。

最悪の場合のシナリオ:ハッシュ関数が不良であり、常に同じビットにマップされていると仮定すると(相互に一意である場合)、BFに10個の要素が挿入されたと言えます

範囲は[2,10]のようです。この範囲の約は、おそらくフィルターの偽陽性確率によって決定されます-私はこの時点で立ち往生しています。


4
挿入された要素の数のカウンターを保持しないのはなぜですか?n個の要素を挿入した場合、追加のビットのみが必要です。O(logn)n
ジョー

@Joe、それは良い考えですが、本当に興味深い質問を台無しにします。
dan_waterworth

重複があることに注意してください。Joeのメソッドには、要素を追加するときに、要素が既に存在するかどうかを常に確認できないため(したがって、カウントをインクリメントする必要があるため)、小さなエラーが発生します。
-usul

回答:


5

はい。ウィキペディアから:

k個のハッシュ関数を使用して、サイズnのフィルターに要素を挿入した場合、特定のビットがまだ0である確率はink

z=(11n)ki

この確率は、フィルターの0ビットの割合として測定できます。解くいますi

i=ln(z)kln(11n)

実際にこれを使用しましたが、フィルターがその容量を超えない限り、最大数百万ビットのフィルターのエラーは通常0.1%未満です。フィルターがその容量を超えると、もちろんエラーが上がります。


3

各オブジェクトの各ハッシュ関数について、ビットがランダムに均一に設定され、設定されたビット数にカウントがあると仮定すると、挿入されたオブジェクト数が発生する確率を制限できるはずです。特定の範囲内で、おそらくボールとビンの処方を使用します。各ビットはビンであり、少なくとも1つのボールがある場合に設定され、挿入された各オブジェクトはボールをスローします。ここで、kはハッシュ関数の数、n kn個のオブジェクトが挿入された後にスローされるボールの数です。ことを考えると、Bビンがそれらに少なくとも1個のボールを持って、少なくとも確率何トンのボールが投げられましたの?ここでは、次の事実を使用できると思います。 kknknbt しかし、その製剤の問題は、私が計算する簡単な方法が表示されないということである P トンをまたは P b )が、その確率を最大化する tの値を見つけることは難しくありません。

P(t balls|b bins)=P(b bins|t balls)P(t)/P(b)
P(t)P(b)t

2

興味深い質問、いくつかの特定のケースを見てみましょう。

そこであるとするキー、N 、O 、N上のビット、N T O 、T Lの合計とのビットM挿入要素。最初に、状態が発生する確率である関数P k n o nn t o t a lm を見つけようとします。knonntotalmP(k,non,ntotal,m)

場合、次にP K N oは、NN T O 、T 、LMがでなければならない0、すなわち、それは不可能です。km<nonP(k,non,ntotal,m)0

場合、k m ハッシュが同じバケットに入る可能性を探しています。最初のハッシュは他のハッシュがどこに行くべきかをマークできます。そのため、k m 1ハッシュが特定のバケットに入る確率を見つけたいと思います。non=1kmkm1

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

それは本当に簡単なケースです。場合、k m2つの異なるバケットに着地し、それぞれに少なくとも1つのバケットが落ちる確率を求めます。あるN T O 、T LN T O 、T L - 1 バケットの組と、任意の特定におけるハッシュランド確率2がある2 / N T O 、T Lのk Mはnon=2km21ntotal(ntotal1)2(2/ntotal)kmそのため、ハッシュが最大バケットに入る確率は次のとおりです。2

ntotal(ntotal1)(2/ntotal)km

それらがバケットに収まる確率はすでにわかっているので、それらを減算して、正確に2に収まる確率を求めます。12

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)

この式をより計算しやすくする方法が正確にはわかりません。単純に実装された場合、実行時間は指数関数的になりますが、メモ化を介して線形時間を達成するのは簡単です。その場合、最も可能性の高いを見つけるだけです。私の本能によれば、単一のピークが存在するため、非常に迅速に検出できる可能性がありますが、単純にO n 2で最も可能性の高いmを見つけることができます。mO(n2)


あなたの式は(定数因子を無視)。この最大値を分析的に計算できます。2番目の項の最初の因子を展開し、定数因子を削除してすべてを削除すると、式は非常に簡単になります。(ntotalnon)nonkm(ntotalnon1)(non1)kmn choose k
ジュール

@Jules、素晴らしい、私はそのようなことが起こると確信していましたが、それを理解する時間がありませんでした。
dan_waterworth

また、次のように直接その式に到達することができる:。次に、プラグイン n t o t a lP(non=x)=P(nonx)P(non<x)=P(nonx)P(nonx1)用のPNONX(ntotalx)(x/ntotal)kmP(nonx)
ジュール

2

ハッシュが均一に分散されていると仮定します。

ましょう挿入ハッシュの数です。我々が持っているので、私はにハッシュメートルの私たちが持っている場合は、ビンI - 1つのにハッシュをm個のビンと次のハッシュは、それらの一つに入るメートルのうちn個のビンか、我々は持っている場合は、私- 1つのにハッシュメートル- 1つのビンを、次のハッシュを行きます他のn m 1 ビンの1つに入れると、次のようになります。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 M 0 = 0場合、M 0P 0 iが= 0場合、I 0。これにより、Pを計算するためのO m i 動的プログラミングアルゴリズムが得られます。P m i を最大化するiの計算P(0,0)=1P(m,0)=0m0P(0,i)=0i0O(mi)iP(m,i) 最尤推定値を提供します。

このブルームフィルターに回ハッシュし、アイテムごとにk個のハッシュがあることがわかっている場合、アイテムの数はi / kです。iki/k

スピードアップするために、いくつかのことができます。1の係数は最大位置を変更しないため、省略できます。動的プログラミングテーブルをPmi)の複数の呼び出しと共有して、(漸近的な)実行時間をOnmに短縮できます。単一の最大値があると考えている場合は、iの反復を早期に停止し、実行時間Ojmを取得できます。ここで、jPが最大値をとるポイントですOmlogn1nP(m,i)O(nm)iO(jm)jPO(mlogn)


2

重要な考え方は、ゼロビットの数の期待値を概算することです。

各ビットについて、K個のハッシュ関数を使用したt挿入後にゼロになる可能性は次のとおりです:(11N)KteKtN

次に、ゼロのビット数の期待値は次のとおりです。

は観測値NMで近似NeKtNNM

最後に、t = Nを得ました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.