從另一個角度看大數據量處理利器:布隆過濾器

? 思路:從簡單的排序談到BitMap算法,再談到數據去重問題,談到大數據量處理利器:布隆過濾器。

情景1:對無重復的數據進行排序

@給定數據(2,4,1,12,9,7,6)如何對它排序?

? ? ?方法1:基本的排序方法包括冒泡,快排等。

? ? ?方法2:使用BitMap算法

? ? ?方法1就不介紹了,方法2中所謂的BitMap是一個位數組,跟平時使用的數組的唯一差別在于操作的是位。

首先是開辟2個字節大小的位數組,長度為16(該長度由上述數據中最大的數字12決定的)如圖



?
? ? ??然后,讀取數據,2存放在位數組中下標為1的地方,值從0改為1,4存放在下標為3的地方,值從0改為1....結果如圖


? ?

? ? ? 最后,讀取該位數組,得到排好序的數據是:(1,2,4,6,7,9,12)


? ? ??比較方法1和方法2的差別:方法2中,排序需要的時間復雜度和空間復雜度很依賴與數據中最大的數字比如12,因此空間上講需要開2個字節大小的內存,時間上需要遍歷完整個數組。當數據類似(1,1000,10萬)只有3個數據的時候,顯然用方法2,時間復雜度和空間復雜度相當大,但是當數據比較密集時該方法就會顯示出來優勢。

情景2:對有重復的數據進行判重

? ?數據(2,4,1,12,2,9,7,6,1,4)如何找出重復出現的數字?

? ? ? ?首先是開辟2個字節大小的位數組,長度為16(該長度由上述數據中最大的數字12決定的)如圖


? ?

? ? ? 當讀取完12后,數組中的數據如下圖:


? ? ? 當讀取2的時候,發現數組中的值是1,則判斷出2是重復出現的。

應用

? ? ? 應用1:某文件中包含一些8位的電話號碼,統計出現的號碼的個數?(判斷有誰出現)

? ? ? 8為最大是99 999 999,大約是99M的bit,12.5MB的內存,就可以統計出來出現的號碼。

?

? ? ? 應用2某文件中包含一些8位的電話號碼,統計只出現一次的號碼?(判斷有誰出現并且指出現1次)

? ? ? 需要擴展一下,可以用兩個bit表示一個號碼,0代表沒有出現過,1代表只出現過1次,2代表至少出現2次。?

?

? ? ? 應用3:有兩個文件,文件1中有1億個10位的qq號碼,文件2中有5千萬個10位qq號碼,判斷兩個文件中重復出現的qq號。

? ? ?首先建立10的10次方個大小的位數組(占用內存大約是1.25G),全部初始化為0,讀取第一個文件,對應的qq號存放到對應的未知,數值改為1,如果重復出現仍是1.讀取完畢第一個文件后,讀取第二個文件,對應的位置為1則表示重復出現。

?

? ? ?應用4:有兩個文件,文件1中有1億個15位的qq號碼,文件2中有5千萬個15位的qq號碼,判斷兩個文件中重復出現的qq號。?


? ??應用4中,qq號碼上升為15位的時候,顯然內存是不夠用了,這個時候怎么辦?使用Bloom Filter(布隆過濾器)

?

Bloom Filter(布隆過濾器):

? ? ? 對于Bit-Map分析一下,每次都會開辟一塊表示最大數值大小的bit數組,比如情景1中的16,將對應的數據經過映射到bit數組的下標,這其實是一種最簡單的hash算法,對1去模。在上述應用4中,當qq號碼改為15位的時候,Bit-Map就不太好用了,如何改進呢?解決辦法:減少bit數組的長度,但是增加hash函數的個數

對于每一個qq號碼,我用K個hash函數,經過k次映射,得到k個不同位置,假設k=3,那么對于一個qq號碼,映射到位數組中3個不同的位置


?

當讀取第二個包含5千萬個qq號碼的文件的時候,使用同樣的3個hash函數進行映射,當3個位置全部是1的時候才表示出現過,否則表示沒有出現過。

有什么疑問嗎?

? ? ? 顯然,對于一個qq號碼,如果它在第一個文件中沒有出現過,但是它映射的3個位置已經全部是1的情況會有嗎?答案是會的,但是這種概率是可控的,可控的意思是:這種誤差跟hash函數的個數和質量是有關系的,可以通過控制hash函數的個數和位數組的大小來控制誤差概率至于表示3者之間的關系精確的數學公式就不再詳細研究了

可以這樣講,布隆過濾器是Bit-Map的進一步擴展,對于大數據量判重,布隆過濾器可以在內存中進行判斷,避免了對磁盤的讀寫,效率是很高的。以上是自己關于兩者的理解,有錯誤望指教。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451490.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451490.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451490.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

例題練習

1,購物車 功能要求:要求用戶輸入自己擁有總資產,例如:2000顯示商品列表,讓用戶根據序號選擇商品,加入購物車購買,如果商品總額大于總資產,提示賬戶余額不足,否則,購買成功…

A端,B端,C端

A端是開發界面。即管理員所接觸的界面。 B端是商家界面。即瀏覽器界面,依托于web界面。 C端是用戶界面。即app的界面,用戶所接觸最為廣泛的界面。

怎么用js動態 設置select中的某個值為選中項

可以使用javascript和jQuery兩種實現方式 1&#xff1a;使用javascript實現 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org…

java常用簡略語含義

首先這些對象都應用都是一些單詞的簡稱&#xff0c;也是一種應用思想&#xff0c;故其他語言也可以使用&#xff0c;在 Java 里比較常見這些對象吧。下面來一一解釋。 一、POJO&#xff08;Plain Ordinary Java Object&#xff09;。 簡單而言&#xff0c;就是一個簡單的對象&…

并行計算的強大

最近在處理一批數據&#xff0c;10的8次方&#xff0c;處理完畢大概要一個月&#xff0c;并且這個程序占用的CPU只有一個&#xff08;我從來沒有注意到這個問題啊啊啊&#xff09;。 突然師兄提醒我可以把10的8次方條數據拆成10個10的7次方&#xff0c;作為10條任務并行處理&a…

Kubernetes集群(概念篇)

Kubernetes介紹 2013年docker誕生&#xff0c;自此一發不可收拾&#xff0c;它的發展如火如荼&#xff0c;作為一個運維如果不會docker&#xff0c;那真的是落伍了。 而2014年出現的kubernetes&#xff08;又叫k8s&#xff09;更加炙手可熱&#xff0c;我想大部分人僅僅是聽說過…

cannot resolve symbol xxxx問題

1.File->Invalidate Caches/Restart 清除緩存重啟 2.還不行就maven -> Reinport

$(“#addLowForm“).serialize()同時提交其它參數的寫法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 原本寫法&#xff1a; 2. 不光傳表單參數&#xff0c;還有別的參數的寫法&#xff1a;

JAVA自學筆記25

JAVA自學筆記25 1、GUI 1&#xff09;圖形用戶接口&#xff0c;以圖形的方式&#xff0c;來顯示計算機操作的界面&#xff0c;更方便更直觀 2&#xff09;CLI 命令行用戶接口&#xff0c;就是常見的Dos&#xff0c;操作不直觀 3&#xff09; 類Dimension 類內封裝單個對象…

360——新式的流氓

360確實是一種新式的流氓。提供一些很多用戶有用的工具&#xff0c;然后在同時&#xff0c;也提供一些流氓性的工具或者流浪性的推廣方法&#xff0c;比如&#xff1a;對360瀏覽器&#xff0c;360桌面等工具&#xff0c;通過暗示性的廣告語進行推廣&#xff0c;而對于安裝的諸多…

跳板機

現在一定規模互聯網企業&#xff0c;往往都擁有大量服務器&#xff0c;如何安全并高效的管理這些服務器是每個系統運維或安全運維人員必要工作。現在比較常見的方案是搭建堡壘機環境作為線上服務器的入口&#xff0c;所有服務器只能通過堡壘機進行登陸訪問&#xff0c;合格的堡…

Map是不是集合?

Map是不是集合&#xff1f; 一、起因 今天在一個群里跟幾位朋友就“map是不是集合“”爭執了起來&#xff1b;幾位朋友一致認為map不是集合&#xff0c;他們說只有Collection接口下的才是集合&#xff0c;而我認為Collection和Map下的實現類都是集合類。二、發展 于是我開始在…

JAVA自學筆記08

JAVA自學筆記08 1、構造方法私有&#xff0c;外界就不能再創建對象 2、說明書的制作過程 1&#xff09;寫一個工具類&#xff0c;在同一文件夾下&#xff0c;測試類需要用到工具類&#xff0c;系統將自動編譯工具類&#xff1b;工具類的成員方法一般是靜態的&#xff0c;因此…

創業,不能兼職

一直在尋找靠譜的技術人才加入自己的創業團隊。這個靠譜&#xff0c;不僅是技術靠譜&#xff0c;還要有相同的價值觀。價值觀的概念也很廣泛&#xff0c;除了人品&#xff0c;還有對一些涉及到做人做事最本質的一些理念要相同。最起碼的一條是&#xff0c;你是不是真的想好了決…

Java 集合系列07之 Stack詳細介紹(源碼解析)和使用示例

轉載 http://www.cnblogs.com/skywang12345/p/3308852.html轉載于:https://www.cnblogs.com/lizhouwei/p/9162251.html

@Controller和@RestController的區別

RestController注解相當于ResponseBody &#xff0b; Controller合在一起的作用。 1)如果只是使用RestController注解Controller&#xff0c;則Controller中的方法無法返回jsp頁面&#xff0c;配置的視圖解析器InternalResourceViewResolver不起作用&#xff0c;返回的內容就是…

spring AOP解說

1.aop切面編程就是在常規的執行java類中方法前或執行后加入自定義的方法。 比如你本來每天都去打醬油&#xff0c;去&#xff0c;打醬油&#xff0c;回。 現在我每天在你打醬油路上等著&#xff0c;你去打醬油的時候我打你一頓&#xff0c;回來的時候給你點糖果吃。 你根本不…

接口 EnvironmentAware

凡是被Spring管理的類&#xff0c;實現接口 EnvironmentAware 重寫方法 setEnvironment 可以在工程啟動時&#xff0c;獲取到系統環境變量和application配置文件中的變量。

簡單安裝ELK分析日志及使用心得

ELK是由Elasticsearch、Logstash、Kibana三個組件組成的。Elasticsearch&#xff1a;是ELK的核心插件&#xff0c;是一個基于Lucene的搜索服務器&#xff0c;它提供一個分布式多用戶能力的全文搜索引擎&#xff0c;能夠達到實時搜索&#xff0c;穩定&#xff0c;可靠&#xff0…

寄生式創業更容易成功

上次參加站長大會見識了不少創業團隊和個人站長&#xff0c;他們中許多人都曾有過或正在過著苦逼的日子&#xff0c;不過我見到更多的還是他們風光的一面&#xff0c;在這次大會我見到了很多成功的創業團隊&#xff0c;例如專門做微博營銷的團隊、依附于QQ空間的團隊、專做騰訊…