[解決済み] ブルームフィルターを使用するメリットは何ですか?
質問
ブルームフィルタについて読んでいるのですが、馬鹿馬鹿しいとしか思えません。 ブルーム・フィルターで達成できることはすべて、より少ないスペースで、より効率的に、複数のハッシュ関数ではなく単一のハッシュ関数を使用して達成できる、あるいはそのように思われます。 なぜブルームフィルターを使用するのでしょうか、そしてどのように役立つのでしょうか?
どのように解決するのか?
から ウィキペディア :
<ブロッククオートブルームフィルタは、他のデータ構造よりも空間的に 他のデータ構造より優れています。 のような集合を表現するための 自己調整型バイナリ探索木 トライ,ハッシュテーブル,あるいは単純な配列や やエントリのリンクリストなど,集合を表現するための他のデータ構造よりも空間的に有利です.ほとんどの場合 これらのほとんどは、少なくともデータ項目そのものを格納する必要があります。 データ項目そのものを格納する必要があります。 小さな整数の場合は 小さな整数のような小さなビット数から のような任意の数のビットを必要とします。 文字列のような任意のビット数を必要とします(トライは例外です。 トライは例外で、同じ接頭辞を持つ要素間でストレージを共有することができます。 のような任意のビット数を必要とします(トライは例外で,同じ接頭辞を持つ要素間でストレージを共有することができます).リンクされた 構造体では,ポインタのための線形空間オーバーヘッドが追加されます. 空間オーバーヘッドが発生します.ブルーム フィルタが1%の誤差で最適な 一方、誤差1%でkの値が最適なブルームフィルタは 要素あたり約9.6ビットを必要とします。 要素のサイズに関係なく で済む。この優位性は この利点は、配列から受け継いだコンパクトさ この利点は、配列から受け継いだコンパクトさと 確率的な性質がある。もし1%の誤検出率 誤検出率が1%では高すぎると思われる場合、その都度 1要素あたり約4.8ビットを追加するたびに を追加するたびに、10 倍に減少します。
私にはかなり明確です。
ブルーム・フィルターは要素そのものを保存するわけではない、これが重要なポイントです。要素が存在するかどうかをテストするためにブルームフィルタを使用するのではなく、要素が確かに存在するかどうかをテストするために使用するのです。 ではなく が存在するかどうかをテストするために使用します。これにより、セット内に存在しない要素のために余分な作業(それらを調べるためのディスクIOなど)をする必要がなくなります。
そして、ハッシュ テーブルのようなもの (大規模なデータ セットでは部分的にディスクになる可能性があります) よりも、はるかに少ないスペースですべてが行われます。ブルーム フィルターを使用することもできますが を併用することができます。 をハッシュ テーブルのような構造と組み合わせて使用することもできますが、要素が存在する可能性があることが確認されれば、ブルーム フィルターを使用することもできます。
というわけで、使用パターンの例としては、以下のようなものがあります。
ディスク上に大量のデータがある場合、どのようなエラー境界(例えば1%)が必要かを決定し、その境界で m . そして、最適な k が決定される(記事中の式から)。このディスクバインドされたデータから一度だけフィルタを投入するのです。
これでRAM上にフィルターができました。ある要素を処理する必要があるとき、その要素がデータセットに存在する可能性があるかどうかを確認するためにフィルタに問い合わせをします。存在しない場合、余分な作業は行われません。ディスクの読み出しなどもありません。(ハッシュやツリーなどであれば必要ですが)。
そうでなければ、フィルターが「はい、入っています」と言った場合、それが間違っている可能性が1%あるので、それを見つけるために必要な作業をします。99% の確率で、それは本当に になります。 99% の確率で、本当にそこにあるのですから、その作業は無駄ではありません。
関連
-
[解決済み] 構造的再帰と生成的再帰はどのように違うのですか?
-
[解決済み] Bogosort (a.k.a Monkey Sort)よりも悪いソートアルゴリズムはあるのか?[クローズド]
-
[解決済み] k-meansの時間計算量はどの程度ですか?
-
[解決済み] 線形時間でのソート?[クローズド]
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] O(log n)とは具体的にどのような意味ですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] ゲーム「2048」の最適なアルゴリズムとは?
-
[解決済み] 末尾再帰とは何ですか?
-
[解決済み] 簡単な面接問題が難しくなった:1~100の数字が与えられたとき、ちょうどk個の数字が欠けていることを見つけなさい。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] NPとco-NPの違いは何ですか?
-
[解決済み] グラフにおいて最小容量が最大となる経路の探索
-
[解決済み] 素朴な」アルゴリズムとは何か、「閉じた」解とは何か?
-
[解決済み] このHeld-Karp TSP Pseudocodeの説明をお願いします。
-
[解決済み] 2進数が3で割れているかどうかを知るには?
-
[解決済み] グラフが半連結であるか否かを判定する
-
[解決済み] ヒープ構築のトップダウン・アプローチはボトムアップよりも成長度合いがO(n)よりもO(log n)低いにもかかわらず、なぜ効率が悪いのでしょうか?
-
[解決済み] 最小ボトルネックスパニングツリーと最小スパニングツリーはどう違うのですか?
-
[解決済み] キャッシュの無効化 - 一般的な解決策はありますか?
-
[解決済み] クイックソートとマージソートの比較 [重複]。