Bloom filter
-
Upload
kumazaki-hiroki -
Category
Technology
-
view
6.189 -
download
1
description
Transcript of Bloom filter
よく分かる BloomFilter
BloomFilter って?
Bloomさんが 1970年に発明したデータ構造
データの集合を保持し、登録および既登録チェックが行える
登録にかかる時間・メモリ効率が共に O(1)
すごいじゃん!
でも代償は大きい・・・
今そこを詳しく話してもピンと来ないと思うので図を使って説明します
まず集合って?
ダブったデータを保持しないデータ構造
登録するときにダブるかどうか判定して、ダブるなら登録しない
普通のデータ構造 (配列・線形リスト・木 )でも簡単に実現可能
で、 Bloom Filterは?
いきなりハッシュ関数やビット列を持ち出すとやる気が削がれるのでイメージ先行で話します
Bloom Filterは?これらの集合を保持したい
ぶ る う む ふ い る た
Bloom Filterは?これらの集合を保持したい
ぶ
る う む ふ い る た
Bloom Filterは?これらの集合を保持したい
ぶる
う む ふ い る た
ガンガン重ね書き!
Bloom Filterは?これらの集合を保持したい
ぶるう
む ふ い る た
ガンガン重ね書き!
Bloom Filterは?これらの集合を保持したい
ぶるうむ
ふ い る た
ガンガン重ね書き!
Bloom Filterは?これらの集合を保持したい
ぶるうむふ
い る た
ガンガン重ね書き!
Bloom Filterは?これらの集合を保持したい
ぶるうむふい
る た
ガンガン重ね書き!
Bloom Filterは?これらの集合を保持したい
ぶるうむふいる
た
ガンガン重ね書き!
Bloom Filterは?これらの集合を保持したい
ぶるうむふいるた完成!
どうやって使うの?
ぶるうむふいるた
検証対象の上に重ねて使います
どうやって使うの?
ぶるうむふいるた
検証対象の上に重ねて使います
検証対象の文字
う る と ら せ ぶ ん
どうやって使うの?検証対象の文字
う る と ら せ ぶ んぶるうむふいるた ぶるうむふいるた ぶるうむふいるた ぶるうむふいるた ぶるうむふいるた ぶるうむふいるた ぶるうむふいるた
•フィルタにすっぽり覆われてしまった文字は登録済み
(の疑いあり•下の赤い文字が 1ピクセルでも見えるなら絶対に未登録
済 済 済 未 済未 未
どうやって使うの?検証対象の文字
う る と ら せ ぶ んぶるうむふいるた ぶるうむふいるた ぶるうむふいるた ぶるうむふいるた ぶるうむふいるた ぶるうむふいるた ぶるうむふいるた
•このように既登録・未登録のデータを判定する•ブルームフィルタが真っ黒なほど誤判定の確率が上がる•つまり、大量に登録したブルームフィルタほど精度が悪い•でも、登録済みの物を誤って未登録と見なす事だけはない
済 済 済 未 済未 未
その他
•ブルームフィルタに割くビット数を増やせば精度が向上•使用メモリ量と精度がトレードオフ
•登録済みデータは消せません
•何故ならどこまでがその文字だったのか切り分け出来ないから
•どうしても消したいならフィルタ丸ごと消して再登録
•全部のピクセルについて登録時に書き込まれた回数をカウントすればデータ削除可能な BloomFilterに
•もちろんメモリ効率は悪くなる
世の中では…•遠い所にデータを保存する場合、データを保存しているかどうか判断する手がかりに使える•存在しない場合にアクセスしなくなるので HDDやネットワークの負荷を低減させる•偽陽性が出てもアクセスした時に見つからないだけ
•検証が高速・高メモリ効率なので応用範囲は夢いっぱい•今回は説明のため文字の情報を例に挙げましたが、実態はハッシュ関数の結果をビットフィールドに論理和で上書きしていくアルゴリズムです
•詳しい実装は世の中にあるソースコードを読んで下さい