Upgrade to Pro — share decks privately, control downloads, hide ads and more …

5分で分かるBloom Filter

5分で分かるBloom Filter

neo-nanikaka

July 22, 2014
Tweet

More Decks by neo-nanikaka

Other Decks in Programming

Transcript

  1. 要素 x を追加する O (k) x をk 個のハッシュ関数に渡して得られた値をh1, h2, …

    , hk とする ハッシュ値の示す1箇所のビットに1を立てる hi % m ( 1 <= i <= k ) Bloom Filter 0 0 0 0 0 0 0 0 0 0 m = 10
  2. 要素 x を追加する O (k) x をk 個のハッシュ関数に渡して得られた値をh1, h2, …

    , hk とする ハッシュ値の示す1箇所のビットに1を立てる hi % m ( 1 <= i <= k ) 例: 2 と 6 を追加する f(x) = 2 * x g(x) = 4 * x Bloom Filter 0 0 0 0 0 0 0 0 0 0 m = 10
  3. 要素 x を追加する O (k) x をk 個のハッシュ関数に渡して得られた値をh1, h2, …

    , hk とする ハッシュ値の示す1箇所のビットに1を立てる hi % m ( 1 <= i <= k ) 例: 2 と 6 を追加する f(x) = 2 * x g(x) = 4 * x Bloom Filter 0 0 0 0 0 0 0 0 0 0 m = 10 2 6 f(x) % m g(x) % m
  4. 要素 x を追加する O (k) x をk 個のハッシュ関数に渡して得られた値をh1, h2, …

    , hk とする ハッシュ値の示す1箇所のビットに1を立てる hi % m ( 1 <= i <= k ) 例: 2 と 6 を追加する f(x) = 2 * x g(x) = 4 * x Bloom Filter 0 0 0 0 0 0 0 0 0 0 m = 10 2 6 f(x) % m 4 g(x) % m 8
  5. 要素 x を追加する O (k) x をk 個のハッシュ関数に渡して得られた値をh1, h2, …

    , hk とする ハッシュ値の示す1箇所のビットに1を立てる hi % m ( 1 <= i <= k ) 例: 2 と 6 を追加する f(x) = 2 * x g(x) = 4 * x Bloom Filter 0 0 0 1 0 0 0 1 0 0 m = 10 2 6 f(x) % m 4 g(x) % m 8
  6. 要素 x を追加する O (k) x をk 個のハッシュ関数に渡して得られた値をh1, h2, …

    , hk とする ハッシュ値の示す1箇所のビットに1を立てる hi % m ( 1 <= i <= k ) 例: 2 と 6 を追加する f(x) = 2 * x g(x) = 4 * x Bloom Filter 0 0 0 1 0 0 0 1 0 0 m = 10 2 6 f(x) % m 4 2 g(x) % m 8 4
  7. 要素 x を追加する O (k) x をk 個のハッシュ関数に渡して得られた値をh1, h2, …

    , hk とする ハッシュ値の示す1箇所のビットに1を立てる hi % m ( 1 <= i <= k ) 例: 2 と 6 を追加する f(x) = 2 * x g(x) = 4 * x Bloom Filter 0 1 0 1 0 0 0 1 0 0 m = 10 2 6 f(x) % m 4 2 g(x) % m 8 4 2回目だけど気にしたら負け ↑
  8. 要素 x の存在判定をする O (k) x をk 個のハッシュ関数に渡して得られた値をh1, h2, …

    , hk とする ハッシュ値の示す全てのビットが1であれば true Bloom Filter 0 1 0 1 0 0 0 1 0 0 m = 10
  9. 要素 x の存在判定をする O (k) x をk 個のハッシュ関数に渡して得られた値をh1, h2, …

    , hk とする ハッシュ値の示す全てのビットが1であれば true 例: 2 と 10 をチェックする f(x) = 2 * x g(x) = 4 * x Bloom Filter 0 1 0 1 0 0 0 1 0 0 m = 10
  10. 要素 x の存在判定をする O (k) x をk 個のハッシュ関数に渡して得られた値をh1, h2, …

    , hk とする ハッシュ値の示す全てのビットが1であれば true 例: 2 と 10 をチェックする f(x) = 2 * x g(x) = 4 * x Bloom Filter 0 1 0 1 0 0 0 1 0 0 m = 10 2 10 f(x) % m 4 g(x) % m 8
  11. 要素 x の存在判定をする O (k) x をk 個のハッシュ関数に渡して得られた値をh1, h2, …

    , hk とする ハッシュ値の示す全てのビットが1であれば true 例: 2 と 10 をチェックする f(x) = 2 * x g(x) = 4 * x Bloom Filter 0 1 0 1 0 0 0 1 0 0 m = 10 2 10 f(x) % m 4 g(x) % m 8 4番目と8番目のビットが1なので 2 は集合に存在する!!
  12. 要素 x の存在判定をする O (k) x をk 個のハッシュ関数に渡して得られた値をh1, h2, …

    , hk とする ハッシュ値の示す全てのビットが1であれば true 例: 2 と 10 をチェックする f(x) = 2 * x g(x) = 4 * x Bloom Filter 0 1 0 1 0 0 0 1 0 0 m = 10 2 10 f(x) % m 4 2 g(x) % m 8 4
  13. 要素 x の存在判定をする O (k) x をk 個のハッシュ関数に渡して得られた値をh1, h2, …

    , hk とする ハッシュ値の示す全てのビットが1であれば true 例: 2 と 10 をチェックする f(x) = 2 * x g(x) = 4 * x Bloom Filter 0 1 0 1 0 0 0 1 0 0 m = 10 2 10 f(x) % m 4 2 g(x) % m 8 4 2番目と4番目のビットが1なので 10 は集合に存在する!?
  14. 要素 x の存在判定をする O (k) x をk 個のハッシュ関数に渡して得られた値をh1, h2, …

    , hk とする ハッシュ値の示す全てのビットが1であれば true 例: 2 と 10 をチェックする f(x) = 2 * x g(x) = 4 * x Bloom Filter 0 1 0 1 0 0 0 1 0 0 m = 10 2 10 f(x) % m 4 2 g(x) % m 8 4 10 は偽陽性の誤検出