Bloom Filter Python

來源:互聯網
上載者:User
文章目錄
  • pybloom 1.0.2

http://bitworking.org/news/380/bloom-filter-resources

The Bloom filter, conceived by Burton H. Bloom in 1970, is a space-efficient probabilistic data structure that is used to test whether an element is a member of a set. False positives are possible, but false negatives are not. Elements can be added to the set, but not removed (though this can be addressed with a counting filter). The more elements that are added to the set, the larger the probability of false positives.

 

http://www.google.com.hk/ggblog/googlechinablog/2007/07/bloom-filter_7469.html

在日常生活中,包括在設計電腦軟體時,我們經常要判斷一個元素是否在一個集合中。比如在文書處理軟體中,需要檢查一個英語單詞是否拼字正確(也就是要判斷它是否在已知的字典中);在 FBI,一個嫌疑人的名字是否已經在嫌疑名單上;在網路爬蟲裡,一個網址是否被訪問過等等。

最直接的方法就是將集合中全部的元素存在電腦中,遇到一個新元素時,將它和集合中的元素直接比較即可。一般來講,電腦中的集合是用雜湊表(hash table)來儲存的。它的好處是快速準確,缺點是費儲存空間。布隆過濾器只需要雜湊表 1/8 到 1/4 的大小就能解決同樣的問題。

為什麼(原文沒說, 我的理解), 因為hash如果要work就要避免衝突, 要避免衝突就需要很大的bucket空間(bit). 而Bloom的優點時允許衝突, 但他通過增加hash函數的數量, 來減小同時衝突的機率, 所以可以用更小的空間.

而且hash table的實現往往用的是指標array, 用於指向集合元素, 而bloom的實現用的是bitarray, 因為你不需要得到這個集合元素, 只是知道他有沒有.

pybloom 1.0.2

http://pypi.python.org/pypi/pybloom/1.0.2

>>> b = BloomFilter(capacity=100000, error_rate=0.001)
>>> b.add("test")
False
>>> "test" in b
True

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.