国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

布隆過濾器(Bloom Filter)

這篇具有很好參考價值的文章主要介紹了布隆過濾器(Bloom Filter)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.引言

通常我們會遇到很多要判斷一個元素是否在某個集合中的業(yè)務場景,一般想到的是將集合中所有元素保存起來,然后通過比較確定。鏈表、樹、散列表(又叫哈希表,Hash table)等等數(shù)據(jù)結構都是這種思路。但是隨著集合中元素的增加,我們需要的存儲空間也會呈現(xiàn)線性增長,最終達到瓶頸。同時檢索速度也越來越慢,上述三種結構的檢索時間復雜度分別為O(n),O(logn),O(1)。這種時候,布隆過濾器就是一種比較好的解決方案了。

2.什么是布隆過濾器

布隆過濾器(Bloom Filter)其實是基于bitmap的一種應用,?1970 年由布隆提出。它由一個很長的二進制比特數(shù)組和一系列哈希函數(shù)構成,用于高效地檢索數(shù)據(jù)是否存在。通俗的說可以把布隆過濾器理解為一個集合,我們可以往里面添加值,并且能判斷某個值是否在里面。當布隆過濾器告訴我們某個值存在時,其實這個值只是有可能存在;可是它說某個值不存在時,那這個值就真的不存在。

3.工作機制

布隆過濾器(Bloom Filter)

如圖1 所示,初始化比特數(shù)組的值全為0,長度m=23,并假設有k=3個能把數(shù)據(jù)均勻映射到值域為 [0,m) 的哈希函數(shù),經(jīng)過一系列添值操作后,數(shù)組的值會散亂地被賦為1。我們先將數(shù)據(jù)a、b、c放入布隆過濾器,對a、b、c各自分別使用三個哈希函數(shù)得到映射值(即比特數(shù)組索引下標)。再根據(jù)下標將比特數(shù)組對應的值置為1,從而表示這三個數(shù)據(jù)已經(jīng)存在。

然后我們用兩個不曾被布隆過濾器標記的數(shù)據(jù)d、e模擬布隆過濾器的篩選過程。同樣要使用前文設定的3個哈希函數(shù),經(jīng)散列得到比特數(shù)組索引下標,然后按下標查詢得到對應的數(shù)組值。如果說3個索引值里出現(xiàn)了至少一個值為0,那么可以肯定的說這個數(shù)據(jù)肯定不存在,比如d。但是也會出現(xiàn)e這種情況,查得的值均為1,但是e明明不存在。其實出現(xiàn)這種情況的原因很好理解:那些被置為 1 的位置也可能是由于其他元素的操作而改變的。所以布隆過濾器存在假正率(False Positive)。

4.時間復雜度 空間復雜度

時間復雜度:在查找過程里,取值過程是直接查找,但是取值的次數(shù)等于哈希函數(shù)的個數(shù)成,所以時間復雜度為O(k),k為哈希函數(shù)的個數(shù)。另外哈希計算可以使用硬件加速,故查找效率很高。

空間復雜度:存儲上,假設比特數(shù)組長度為m=10000000,則申請的內存大小為10000000bit=1250000B=1220.703125KB≈1.20MB≈0.001164GB。這在動輒內存8G起步的設備上,其實占用很小。

?5.正確率和容錯

首先對False positive概率進行推導:

假設 Hash 函數(shù)以等概率條件選擇并設置比特數(shù)組中的某一位,m 是該位數(shù)組的大小,k 是 Hash 函數(shù)的個數(shù),那么位數(shù)組中某一特定的位在進行元素插入時的 Hash 操作中沒有被置位的概率是:

布隆過濾器(Bloom Filter)

?那么在所有 k 次 Hash 操作后該位都沒有被置 "1" 的概率是:

布隆過濾器(Bloom Filter)

如果我們插入了 n 個元素,那么某一位仍然為 "0" 的概率是:

布隆過濾器(Bloom Filter)

因而該位為 "1"的概率是:

布隆過濾器(Bloom Filter)

現(xiàn)在檢測某一元素是否在該集合中。標明某個元素是否在集合中所需的 k 個位置都按照如上的方法設置為 "1",但是該方法可能會使算法錯誤的認為某一原本不在集合中的元素卻被檢測為在該集合中(False Positive),該概率由以下公式確定:

布隆過濾器(Bloom Filter)

其實上述結果是在假定由每個 Hash 計算出需要設置的位(bit) 的位置是相互獨立為前提計算出來的,不難看出,隨著 m (比特數(shù)組大?。┑脑黾?,F(xiàn)alse Positive的概率會下降,同時隨著插入元素個數(shù) n 的增加,F(xiàn)alse Positive的概率又會上升,對于給定的m,n,如何選擇Hash函數(shù)個數(shù) k 由以下公式確定:

布隆過濾器(Bloom Filter)

此時False Positive的概率為:

布隆過濾器(Bloom Filter)

而對于給定的False Positive概率 p,如何選擇最優(yōu)的位數(shù)組大小 m 呢,

布隆過濾器(Bloom Filter)

上式表明,比特數(shù)組的大小最好與插入元素的個數(shù)成線性關系。

對于布隆過濾器不會漏報,但可能誤報這個情況,我們當然希望準確度越高越好。

布隆過濾器(Bloom Filter)
?false positive rate under various m/n and k combinations

?從上圖可以看出,數(shù)據(jù)冗余量越大,哈希函數(shù)越多,錯誤率越低。但是總體來看,錯誤率控制在1%以內。

確定了正確率的問題后,接下來就是關鍵的容錯了,怎么容錯才算完美,既能解決問題,又能照顧容錯成本呢?一方面由于布隆過濾器使用多個哈希函數(shù)進行處理,所以生成的值正常會均勻分布,數(shù)據(jù)不均衡從而造成數(shù)據(jù)稀疏時成本較高的問題就不存在了;另一方面,雖然說數(shù)據(jù)量增大超過預先設計的最大值也會對布隆過濾器造成影響,但是影響并不是很嚴重,除非差別過于巨大。因為實際數(shù)據(jù)量增大后,只會影響到上圖m/n的值,帶來的影響只是略微影響到布隆過濾器的正確率。

6.優(yōu)點

  • 增加和查詢元素的時間復雜度為:O(K), (K為哈希函數(shù)的個數(shù),一般比較小),與數(shù)據(jù)量大小無關
  • 哈希函數(shù)相互之間沒有關系,方便硬件并行運算
  • 布隆過濾器不需要存儲元素本身,在某些對保密要求比較嚴格的場合有很大優(yōu)勢
  • 在能夠承受一定的誤判時,布隆過濾器比其他數(shù)據(jù)結構有這很大的空間優(yōu)勢
  • 數(shù)據(jù)量很大時,布隆過濾器可以表示全集,其他數(shù)據(jù)結構不能
  • 使用同一組散列函數(shù)的布隆過濾器可以進行交、并、差運算

7.使用場景

布隆過濾器被廣泛用于數(shù)據(jù)量龐大的情況下的查詢、去重等業(yè)務,比如:

  • 黑名單過濾
  • 垃圾郵件過濾
  • 爬蟲判重系統(tǒng)
  • 推薦系統(tǒng)去重
  • 緩存穿透
  • 區(qū)塊鏈的SPV支付
  • Web攔截器
  • ……

8.缺點

  • 有誤判率,即存在假正率,即不能準確判斷元素是否在集合中
  • 不能獲取元素本身
  • 一般情況下不能從布隆過濾器中刪除元素
  • 隨著使用的時間越來越長,因為不能刪除,存進里面的元素越來越多,占用內存越來越多,誤判率越來越高,最后不得不重置。
  • 如果采用計數(shù)方式刪除,可能會存在計數(shù)回繞問題
  • 數(shù)據(jù)量過于龐大時,計算機內存也會進行頻繁的頁面置換(這個其實不獨屬于布隆過濾器的缺點)?

9.總結

總體來說,布隆過濾器是一個很有意思的數(shù)據(jù)結構,空間效率和查詢時間都遠遠超過一般的算法。目前已經(jīng)在業(yè)務中廣泛使用,比如常用的redis里已經(jīng)集成了布隆過濾器。本篇只是就最基本的布隆過濾器做了介紹,在具體應用中,布隆過濾器還有更多的有趣的功能和進一步改進的數(shù)據(jù)結構。朋友們可以親自coding一下,比如嘗試一下redis的布隆過濾器,或者嘗試給布隆過濾器實現(xiàn)刪除數(shù)據(jù)的功能等等。


9.Reference

布隆過濾器 - 維基百科,自由的百科全書 (wikipedia.org)

hash 算法原理及應用漫談 (qq.com)

詳解布隆過濾器的原理、優(yōu)缺點_一只快樂的野指針吼的博客-CSDN博客_布隆過濾器原理

布隆過濾器,這一篇給你講的明明白白-阿里云開發(fā)者社區(qū) (aliyun.com)

布隆過濾器及其使用場景 - Master HaKu - 博客園 (cnblogs.com)

Redis布隆過濾器(原理+圖解) (biancheng.net)

布隆過濾器(Bloom Filter)詳解 - 李玉龍 - 博客園 (cnblogs.com)

Merkle Tree、Merkle Proof、SPV安全性分析、Bloom過濾器_真·skysys的博客-CSDN博客

簡化的支付驗證(SPV)和布隆過濾器(bloom fliter)

"不靠譜"的布隆過濾器是怎么成為大數(shù)據(jù)世界中的韋小寶的?

布隆過濾器踩坑日記文章來源地址http://www.zghlxwxcb.cn/news/detail-482961.html

到了這里,關于布隆過濾器(Bloom Filter)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 算法~布隆過濾器

    布隆過濾器(Bloom Filter)是一種高效的概率數(shù)據(jù)結構,用于判斷一個元素是否存在于集合中。它基于位數(shù)組和多個哈希函數(shù),并具有以下特點: Bloom Filter 是一個基于概率的數(shù)據(jù)結構:它只能告訴我們一個 元素絕對不在集合內 或 可能在集合內 快速查詢:布隆過濾器具有快速

    2024年02月05日
    瀏覽(19)
  • 布隆過濾器及其應用

    布隆過濾器是一種數(shù)據(jù)結構,具有快速插入和查找的特性,能確定某個字符串一定存在或者可能存在。布隆過濾器有著高效的空間利用率,它不存儲具體數(shù)據(jù),只存儲數(shù)據(jù)的關鍵標識,所以占用的空間較小。它的查詢結果可能會存在一定誤差,但是誤差總體可控,同時不支持

    2024年02月03日
    瀏覽(17)
  • 位圖以及布隆過濾器

    位圖以及布隆過濾器

    本文主要講解哈希思想的實際應用,位圖和布隆過濾器。 講解位圖之前我們先來解答這樣一道騰訊的面試題 給40億個不重復的無符號整數(shù),沒排過序。給一個無符號整數(shù),如何快速判斷一個數(shù)是否在這40億個數(shù)中?!掘v訊】 很多人立馬就想到了用哈希表或者紅黑樹,因為足夠

    2024年02月08日
    瀏覽(17)
  • Redis----布隆過濾器

    目錄 背景 解決方案 什么是布隆過濾器 布隆過濾器的原理 一些其他運用 比如我們在觀看新聞或者刷微博的時候,會不停地給我們推薦新的內容,我們發(fā)現(xiàn)幾乎沒有重復的,說明后臺已經(jīng)進行了去重處理,基于如何去重,Redis給出了高效的方案---布隆過濾器 1.記錄已經(jīng)瀏覽過

    2024年02月09日
    瀏覽(24)
  • 布隆過濾器的原理

    布隆過濾器是一種用于檢索一個元素是否在一個集合中的數(shù)據(jù)結構,具有高效的查詢性能和較小的內存占用。 布隆過濾器的底層實現(xiàn)主要涉及以下幾個步驟: 初始化數(shù)組: 首先,初始化一個比較大的數(shù)組,數(shù)組中的元素用二進制表示,初始值都為0。 Hash計算: 當一個新的元

    2024年01月18日
    瀏覽(18)
  • 布隆過濾器詳解

    布隆過濾器詳解

    本文全部代碼地址 布隆過濾器是一種高效的數(shù)據(jù)結構,用于判斷一個元素是否存在于一個集合中.它的主要優(yōu)點是速度快,空間占用少,因此在需要快速判斷某個元素是否在集合中的場合得到廣泛引用. 布隆過濾器就是 一個大型的位數(shù)組和幾個不一樣的無偏hash函數(shù). 所謂無偏就是

    2023年04月22日
    瀏覽(32)
  • Redis布隆過濾器原理

    Redis布隆過濾器原理

    其實布隆過濾器本質上要解決的問題,就是 防止很多沒有意義的、惡意的請求穿透Redis(因為Redis中沒有數(shù)據(jù))直接打入到DB 。它是Redis中的一個 modules ,其實可以理解為一個插件,用來拓展實現(xiàn)額外的功能。 可以簡單理解布隆過濾器的功能 :它就是記錄了一份DB數(shù)據(jù),然后

    2024年02月09日
    瀏覽(30)
  • Java實現(xiàn)布隆過濾器

    Java實現(xiàn)布隆過濾器

    背景: 為預防大量黑客故意發(fā)起非法的時間查詢請求,造成緩存擊穿,建議采用布隆過濾器的方法解決。布隆過濾器通過一個很長的二進制向量和一系列隨機映射函數(shù)(哈希函數(shù))來記錄與識別某個數(shù)據(jù)是否在一個集合中。如果數(shù)據(jù)不在集合中,能被識別出來,不需要到數(shù)據(jù)

    2024年02月01日
    瀏覽(25)
  • 哈希的應用——布隆過濾器

    哈希的應用——布隆過濾器

    上一篇文章,我們學習了位圖,位圖在某些場景下是非常適用的,非??旖莘奖恪?但是,在文章的最后,我們也提出了位圖的一些缺陷——比如位圖只能映射整型數(shù)據(jù),其它類型的數(shù)據(jù)則不行。 因為位圖里面的元素去映射的其實就是下標嘛,而下標的話都是整型啊。 那有沒

    2024年02月09日
    瀏覽(34)
  • 布隆過濾器:原理與應用

    布隆過濾器:原理與應用

    本文已收錄至GitHub,推薦閱讀 ?? Java隨想錄 微信公眾號:Java隨想錄 原創(chuàng)不易,注重版權。轉載請注明原作者和原文鏈接 目錄 布隆過濾器簡介 fpp 布隆過濾器原理 布隆過濾器的特點 布隆過濾器使用 布隆過濾器中的數(shù)據(jù)可不可以刪除 布隆過濾器應該設計為多大 布隆過濾器應

    2024年02月08日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包