1. 程式人生 > >Bloom Filter的基本原理和變種

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

相關推薦

Bloom Filter基本原理變種

學習一個東西首先要知道這個東西是什麼,可以做什麼,接著再瞭解這個東西有什麼好處和優勢,然後再學習他的工作原理。下面我們分別從這三點簡單介紹一下bloom filter,以及和他的變種。 What:在允許一定的錯誤率的情況下,用於判斷一個元素是否屬於一個集合,Bloom Filter可能會將一個不屬於集合的元

貝葉斯算法的基本原理算法實現

utf shape less 流程 我們 def .sh 詞向量 貝葉斯算法 一. 貝葉斯公式推導   樸素貝葉斯分類是一種十分簡單的分類算法,叫它樸素是因為其思想基礎的簡單性:就文本分類而言,它認為詞袋中的兩兩詞之間的關系是相互獨立的,即一個對象 的特征向量

API Hook基本原理實現

use 概率 缺省 後綴 origin gif object cati mov API Hook基本原理和實現 2009-03-14 20:09 windows系統下的編程,消息message的傳遞是貫穿其始終的。這個消息我們可以簡單理解為一個有特定

搭建ssm框架項目基本原理主要的配置文件小結

切面 localhost post 適配 res enter pop -h spl 1.springmvc是spring框架的一個模塊,springmvc和spring無需通過中間整合層進行整合。springmvc是一個基於mvc的web框架。mvc的思想

Ognl表達式基本原理使用方法

ognl表達式 作用 設置 submit implement ring 獲取request 編碼 組成 1.Ognl表達式語言 1.1.概述 OGNL表達式 OGNL是Object Graphic Navigation Language(對象圖導航語言)的縮寫,他是一個開

詳解ROI Align的基本原理實現細節

ROI Align是在Mask-RNN這篇論文裡提出的一種區域特徵聚集方式,很好地解決了ROI Pooling操作中兩次量化造成的區域不匹配(mis-alignment)的問題。實驗顯示,在檢測任務中將ROI Pooling替換為ROI Align可以提升檢測模型的準確性。 1、ROI Pool

搭建ssm框架專案基本原理主要的配置檔案

1.springmvc是spring框架的一個模組,springmvc和spring無需通過中間整合層進行整合。springmvc是一個基於mvc的web框架。mvc的思想大家已經很熟悉了,簡稱“Model-View-Controller”。 下面先簡單介紹下我對spring-mvc的理

隱馬爾科夫鏈(hmm)基本原理簡單例項

title: 隱馬爾科夫鏈(hmm) tags: hmm,隱馬爾科夫鏈,基本原理 grammar_cjkRuby: true 隱馬爾科夫鏈基本介紹 隱馬爾科夫(Hidden Markov Model,HMM),瞭解一個演算法要做到:會其意,知其形。 引子 隱馬爾科夫

懶載入預載入的基本原理實現方法

懶載入的原因: 對於圖片過多的場景,為了提高頁面的載入速度,降低伺服器的負載,增強使用者體驗,我們對還沒出現在視野的圖片先不載入,當元素出現在我們視野中的時候再載入。 懶載入的原理: 我們先將img標籤中的src連結設定為一樣的圖片(空白圖片),將真正的圖片連結放在自定義屬性中,如(da

分散式鎖的基本原理實現

歡迎關注作者簡書 文章目錄 一、什麼是分散式鎖? 二、分散式鎖的使用場景。 三、分散式鎖的實現(Redis) 轉發:原文來自

MySQL基本原理使用技巧

本文是我在大半年前在前公司做團隊分享時的一個文件,寫得比較挫,當時分享講了2個小時,自己感覺講得還可以。最近前同事跑來問我還有沒有文件儲存,翻了舊電腦和硬碟才找出來,於是就想著分享一下。 一、MySQL整體結構 伺服器層(負責客戶端連線、授權認證、安全、執行緒管理等)

【js】Redux基本原理使用

Redux不是說任何的應用都要用到它,如果遇到了react解決不了得問題,可以考慮使用它。 例如: 使用者的使用方式複雜不同身份的使用者有不同的使用方式(比如普通使用者和管理員)多個使用者之間可以協作與伺服器大量互動,或者使用了WebSocketView要從多個來源獲取資料 Redux的設計思想: (

深入理解JVM虛擬機器2:JVM垃圾回收基本原理演算法

JVM GC基本原理與GC演算法  Java的記憶體分配與回收全部由JVM垃圾回收程序自動完成。與C語言不同,Java開發者不需要自己編寫程式碼實現垃圾回收。這是Java深受大家歡迎的眾多特性之一,能夠幫助程式設計師更好地編寫Java程式。  下面四篇教程是瞭解Jav

Git使用教程與基本原理Sourcetree基本使用探微

什麼是GIT Git是一個強調速度的分散式版本控制軟體和原始碼管理系統(SCM,source code management)。Git最初是由Linus Torvalds為核心開發而設計的管理軟體。自從Git推出以來,已經被很多開源專案所採納。每一個Git工作目錄是一個

布隆過濾器(Bloom Filter原理以及應用

布隆過濾器(Bloom Filter)是1970年由布隆提出的。它實際上是一個很長的二進位制向量和一系列隨機對映函式。布隆過濾器可以用於檢索一個元素是否在一個集合中。它的優點是空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的誤識別率和刪除困難。 hash原理

搭建ssm框架專案基本原理主要的配置檔案小結

1.springmvc是spring框架的一個模組,springmvc和spring無需通過中間整合層進行整合。springmvc是一個基於mvc的web框架。mvc的思想大家已經很熟悉了,簡稱“Model-View-Controller”。 下面先簡單介紹下我對sprin

詳解 ROI Align 的基本原理實現細節

尊重作者,轉載網址。ROI Align 是在Mask-RCNN這篇論文裡提出的一種區域特徵聚集方式, 很好地解決了ROI Pooling操作中兩次量化造成的區域不匹配(mis-alignment)的問題。實驗顯示,在檢測測任務中將 ROI Pooling 替換為 ROI Al

Linux 網路裝置驅動開發(三) —— 網路裝置驅動基本原理框架

一、協議棧層次對比 二、Linux網路子系統     Linux網路子系統的頂部是系統呼叫介面層。它為使用者空間提供的應用程式提供了一種訪問核心網路子系統的方法(socket)。位於其下面是一個協議無關層,它提供一種通用的方法來使用傳輸層協議。然後是具體協議的實現,在Lin

hadoop入門十一(HDFS基本原理操作)

Hadoop 2.x HDFS新特性 HDFS聯邦 HDFS HA(要用到Zookeeper) HDFS快照 解決了namenode單點得問題 高可用性 我有一個3000個主機,是不是得寫3000個hosts檔案,3000兩兩面密碼,所以在企業級應用

數字影象處理的基本原理常用方法

  數字影象處理是指將影象訊號轉換成數字訊號並利用計算機對其進行處理的過程。影象處理最早出現於 20 世紀 50 年代,當時的電子計算機已經發展到一定水平,人們開始利用計算機來處理圖形和影象資訊。數字影象處理作為一門學科大約形成於 20 世紀 60 年代初期。早期的影象處理