大資料判斷資料是否存在 布隆過濾器

2022-04-29 12:06:10 字數 780 閱讀 2643

題目:給定十億個數字,怎麼去判斷這個資料是否存在;

這個乙個典型的查詢問題,我們知道面對查詢的時候,最快的查詢是基於hash查詢,那麼都是在o(1)的時間內找到指定的資料集,但是這樣要把資料全部load到記憶體裡,記憶體大部分的時候是不支援一次性load十億的資料的,而且hash的空間利用率來說相對比較低。

這個時候運用得比較好的方式就是利用布隆過濾器(bloom filter),它可以在很小的記憶體空間內查詢某個資料是否存在;

演算法:1. 首先需要k個hash函式,每個函式可以把key雜湊成為1個整數

2. 初始化時,需要乙個長度為n位元的陣列,每個位元位初始化為0

3. 某個key加入集合時,用k個hash函式計算出k個雜湊值,並把陣列中對應的位元位置為1

4. 判斷某個key是否在集合時,用k個hash函式計算出k個雜湊值,並查詢陣列中對應的位元位,如果所有的位元位都是1,認為在集合中。

其實這個演算法的本質還是基於hash去計算的,只是多重hash去保證空間的覆蓋性;

抄乙個圖來用圖來就很好理解了,長度為8的陣列,2次hash,如果來了乙個資料3000,通過hash兩次發現第六個位置為0,那麼說明3000這個資料一定不存在。

那麼這個布隆過濾器就有這麼幾個特點:

1.只要返回資料不存在,則肯定不存在。

2.返回資料存在,但只能是大概率存在。

3.同時不能清除其中的資料。

其實布隆過濾器只要儘量減少不存在的資料對映到舊的hash位上,就是乙個很好的演算法了。那麼怎麼去判斷的呢:

詳細的概率公式如下:

有空可以理解一下。

資料存在? 布隆過濾器

布隆過濾器是一種能夠在大量資料中判斷資料是否存在的演算法。它實際上是乙個很長的二進位制向量和一系列隨機對映函式。布隆過濾器可以用於檢索乙個元素是否在乙個集合中。它的優點是空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的誤識別率和刪除困難。在介紹 布隆過濾器 之前,先介紹一下 位圖 的思想 這...

大資料去重 Bitmap和布隆過濾器

場景描述 在某場景下有乙個使用者關係鏈,比如a關注了b,然後b關注了c,然後使用者b知道自己被誰關注,也知道他關注了誰。假如說將這個資訊放在統一的資料庫中,然後使用者查詢的時候每次去遍歷,那麼就會對資料庫造成非常大的負擔,而且在乙個億級使用者系統中這樣的時間延遲是不可接受的。這種情況下我們可以為每個...

資料結構 布隆過濾器

基於位圖的缺點 只能儲存整型,在現實中的應用有了很大的侷限性,所以又引出了一種新的雜湊變形,其實也算是點陣圖的變形 布隆過濾器。如圖,把字串經過布隆過濾器的處理,對映到位圖的多個位置,讓這幾個位置都置成1用來表示這個字串的存在。所以只要有乙個位置為0,那麼這個資料就不存在。1.本來不存在的資料,可能...