Bloom Filter的基本原理和變種

        學習一個東西首先要知道這個東西是什麼,可以做什麼,接着再瞭解這個東西有什麼好處和優勢,然後再學習他的工作原理。下面我們分別從這三點簡單介紹一下bloom filter,以及和他的變種。
  1. What:在允許一定的錯誤率的情況下,用於判斷一個元素是否屬於一個集合,Bloom Filter可能會將一個不屬於集合的元素誤判爲屬於這個集合,即false positive。可以應用於檢查一個URL是否已經被爬蟲爬過、網絡緩存共享、字符串匹配等等
  2. Why:時間和空間效率較高(與hash比較)
  3. How
    • 存儲元素:用一個m位的數組和k個hash函數,對一個元素用k個hash函數映射出k個值(範圍是(0~m-1),即數組下標),對數組的這m個下標位置爲1
    • 查詢元素:同上獲得一個元素的m個下標位置,如果這m個下標位置都爲1,說明元素屬於該集合
    • 優點:時間、空間效率高,只需k次hash就能找到元素,只需m位空間大小,時間、空間複雜度都是常數
    • 缺點:有一定錯誤率、無法刪除元素、無法恢復原來元素的值(因爲不直接存儲元素值)
  4. 從hash到bloom filter
    1. 傳統hash:
      • 存儲元素:開闢h個格子,對集合中的每個元素,hash出格子的下標,將元素存於格子中。存在hash衝突的情況,用hash鏈表、再hash的方法解決。
      • 查找:hash出格子下標、同格子下標位置存儲的元素值比較
      • 缺點:需要存儲所有集合的值,空間佔用大;遇到hash衝突需要再查找鏈表或者再hash,時間複雜度不確定
    2. 改進hash:
      1. 存儲元素:開闢h個格子,對集合中的每個元素,hash出格子的下標,不直接存儲元素的值,而是存儲元素的編碼,通常編碼的位數比元素值的位數小,把元素值映射成新的編碼(hash)可能會有衝突(不同元素的編碼相同)
      2. 查找:同傳統hash
      3. 優點:較傳統hash空間複雜度低
      4. 缺點:存在一定的錯誤率,用正確率換取空間;無法恢復原來元素的值
    3. bloom filter:
      1. 存儲和查找童第3點
      2. 優點:不用考慮衝突的情況,因爲允許一定的錯誤率,時空效率高
  5. Bloom Filter的變種
    1. Counting Bloom Filter:原始的bloom filter不支持刪除操作,CBF通過對位數組進行擴展,把原來1位擴展爲t位用於計數。每次存儲時將對應k個hash下標的位計數+1,刪除時相應的對k個hash下標計數-1,從而支持集合刪除操作
    2. Partial Bloom Filter:原始bloom filter的hash函數值的範圍是0~m-1,即整個位數組的下標範圍,而在PBF中每個hash函數的取值範圍較小,相互間沒有交集,位數組被分成k個區域,每個hash函數值負責一個區域。好處是準確率比原始的高,且可以並行訪問數組,優化程序性能
    3. Compressed Bloom Filter:對原始的bloom filter進行壓縮,用於網絡傳輸應用。好處是經過壓縮的bloom filter的錯誤率更低、所需位數更少、所需hash函數更少
參考資料:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章