ブルーム フィルターとハッシュ スケッチ (FM スケッチも) の違いは何ですか? また、それらの用途は何ですか?
2 に答える
ハッシュ スケッチ/Flajolet-Martin スケッチ
Flajolet, P./Martin, G. (1985): データベース アプリケーションの確率的カウント アルゴリズム。Journal of Computer and System Sciences、Vol. 31、No.2 (1985 年 9 月)、182-209 ページ。
Durand, M./Flajolet, P. (2003): Loglog Counting of Large Cardinalities, in: Springer LNCS 2832, Algorithms ESA 2003, pp. 605–617.
ハッシュ スケッチは、セット内の個別の要素の数をカウントするために使用されます。
与えられた:
- 長さ l のビット配列 B[]
- [0,1,...2^l) にマップされる (単一の) ハッシュ関数 h()
- 入力のバイナリ表現の最下位 1 ビットの位置を与える関数 r() (たとえば、000101 は 1 を返し、001000 は 4 を返します)
要素 x の挿入:
- pn := h(x) は擬似乱数を返します
- r(pn) を適用してビット配列の位置を取得し、1 に設定します
セット内の異なる要素の数:
- ビット配列の右端の 0 の位置 p を見つける
- p = log2(n)、n について解いて、セット内の個別の要素の数を取得します。結果は、最大 1.83 マグニチュード オフになる可能性があります。
利用方法:
- データマイニング、P2P/分散アプリケーション、ドキュメント頻度の推定など。
ブルームフィルター
Bloom, H. (1970): 許容可能なエラーを伴うハッシュ コーディングにおける空間/時間のトレードオフ、: Communications of the ACM、Vol. 13, No. 7 (1970 年 7 月), pp. 422-426.
ブルーム フィルターは、要素がセットのメンバーであるかどうかをテストするために使用されます。
与えられた:
- 長さ m のビット配列 B[]
- [0,...,m-1]、つまり m ビット配列の位置の 1 つにマップされる k 個の異なるハッシュ関数 h_k()
要素 x の挿入:
- すべての k に対して h_k を x (h_k(x)) に適用します。つまり、k 値を取得します。
- 配列 B の結果のビットを 1 に設定します (既に 1 に設定されている場合は、何も変更しないでください)。
y がすでにセットに含まれているかどうかを確認します。
- すべてのハッシュ関数 h_k (h_k(y)) を使用してチェックする位置 p_k を取得します。つまり、関数 h_k ごとに位置 p_k を取得します。
- 位置 p_k の 1 つが配列 B で 0 に設定されている場合、要素 y は決定的にセットに含まれていません。
- p_k で指定されたすべての位置が 1 の場合、要素 y は (!) セット内にある可能性があります
- 偽陽性率はおよそ (1 - e^(-kn/m))^k であり、偽陰性はあり得ません!
- ハッシュ関数の数を増やすことで、偽陽性率を下げることができます。ただし、同時にブルーム フィルターが遅くなります。k の最適値は k = (m/n)ln(2) です。
利用方法:
- 最初はクエリに一致しない要素を除外するためにデータベースで安価なフィルターとして使用されました
- 今日では、Google BigTable などのさまざまなアプリケーションだけでなく、IP ルックアップなどのネットワーキングでも使用されています。