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函數更少


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM