Wikipediaは言う:私のブルームフィルタにはいくつのハッシュ関数が必要ですか?
空のブルームフィルタは、mビットのビット列であり、0にすべてのセットはまた、各々がマップまたはのいずれかにいくつかのセット要素をハッシュし、異なるハッシュ関数が定義されたk個存在する必要がありますm個の配列位置は一様なランダム分布を持つ。
私は記事を読んだが、私は理解していないのはどのようにkが決定されるかである。テーブルサイズの関数ですか?
また、私が書いたハッシュテーブルでは、ハッシュのサイズを自動的に拡大する簡単で効果的なアルゴリズムを使用しました。基本的に、テーブルのバケツの50%以上が満たされた場合、テーブルのサイズを2倍にします。私はあなたが偽陽性を減らすためにまだブルームフィルターでこれをしたいと思うかもしれないと思う。正しい?
ありがとうございます –
対数関数の丸め/切り捨ての違いや精度のために、これらの方程式をあなたの選択した言語で実行した場合、例とまったく同じ数値が得られない場合があります。私にとっては、 'm = 2075674'と' k = 6.64'です。どちらの方法でも、両方の値を最も近い整数に切り上げ、偽陽性率は十分に近くなります。あなたの計算/丸められた 'm'と' k'の値を使って、 'p'の*実際の値を再計算する方程式を持つことは興味深いでしょう。繰り返しますが、正確な値を持つことについて心配する必要はありません。野球場は十分です。 –
計算された 'm'と' k'を与えられた 'p'の実際の値を計算する方程式を見つけました - どのような丸めがあなたの受け入れ可能な偽陽性率にどのように影響したかを比較することは興味深いです。 'e'は動的定数ではなく、数学的定数です。 'p = e ^( - (m/n)*(ln(2)^ 2))' - http://stackoverflow.com/a/24071581/2609094に感謝します。 –