ブルームフィルターハッシュ:もっと多い?


15

ブルームフィルターの実装では、従来のアプローチでは複数の独立したハッシュ関数が必要です。 KirschとMitzenmacherは、実際には2つしか必要とせず、残りを線形結合として生成できることを示しました。

私の質問は、2つのハッシュ関数と2倍のエントロピーを持つハッシュ関数の違いは何ですか?

これは、ハッシュ関数の出力で実際に何をするかを見ることに由来します。(たとえば)64ビットのハッシュ値を取得して、ビットベクトルのサイズにスケーリングします。64。これは明らかにエントロピーを失う変換です(まれに、ハッシュサイズとフィルター容量が完全に一致する場合を除きます)。フィルターのエントリが2 32未満であると仮定して、64ビットハッシュ値を2つの32ビットハッシュに分割し、それらの線形結合を取得するのを止めるものは何ですか?またはそれを使用してPRNGをシードしますか?

言い換えれば、標準の偽陽性率を確実に保持するために、ブルームフィルターに挿入する各要素について、実際にどれだけの情報を知る必要がありますか?またはより一般的には、要素をどれだけうまく区別できるか(それらを記述するために使用するビット数)とブルームフィルターのパフォーマンスとの関係は何ですか?

確かに、フィルタサイズがmの場合、ビット、または同等に2 lg n ln p2 lg ln 2 ビットでn個の要素を偽陽性の確率で格納できるようですp ....2lgmm2lgnlnp2lgln2np

回答:


16

ハッシュ関数を「ランダムビット生成」の観点から考えるのは正しいことです。したがって、64ビットハッシュを生成するハッシュ関数がある場合、4つの16ビットハッシュ(分割による)などとして扱うことができます。

2lgm


5
cstheoryへようこそ、マイケル:)
Suresh Venkat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.