ブルームフィルターの実装では、従来のアプローチでは複数の独立したハッシュ関数が必要です。 KirschとMitzenmacherは、実際には2つしか必要とせず、残りを線形結合として生成できることを示しました。
私の質問は、2つのハッシュ関数と2倍のエントロピーを持つハッシュ関数の違いは何ですか?
これは、ハッシュ関数の出力で実際に何をするかを見ることに由来します。(たとえば)64ビットのハッシュ値を取得して、ビットベクトルのサイズにスケーリングします。64。これは明らかにエントロピーを失う変換です(まれに、ハッシュサイズとフィルター容量が完全に一致する場合を除きます)。フィルターのエントリが2 32未満であると仮定して、64ビットハッシュ値を2つの32ビットハッシュに分割し、それらの線形結合を取得するのを止めるものは何ですか?またはそれを使用してPRNGをシードしますか?
言い換えれば、標準の偽陽性率を確実に保持するために、ブルームフィルターに挿入する各要素について、実際にどれだけの情報を知る必要がありますか?またはより一般的には、要素をどれだけうまく区別できるか(それらを記述するために使用するビット数)とブルームフィルターのパフォーマンスとの関係は何ですか?
確かに、フィルタサイズがmの場合、ビット、または同等に2 (lg (− n ln p)− 2 lg (ln 2 ))ビットでn個の要素を偽陽性の確率で格納できるようですp ....