何為布隆過濾器

問題的提出

我們有一個不安全網頁的黑名單,包含了100億個黑名單網頁的URL,每個網頁URL最多占用64B.。

現在我們要設計一個網頁過濾系統,這個系統要判斷該網頁是否在黑名單里,但是我們的空間有限,只有30GB.

允許有萬分之一的判斷失誤

布隆過濾器

我們可以把所有的URL保存起來,比如放到hashmap里,但是64B*100億=640GB,不符合要求。

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

如果遇到網頁黑名單系統、垃圾郵件過濾、爬蟲網址判重等問題,如果可以容忍一定程度的失誤率,那么我們就可以用布隆過濾器來解決。

哈希函數

我們先來認識一下哈希函數(或者說是復習)

1)

哈希函數的輸入可以認為是無窮大或者是非常大的范圍,比如任意一個整數(字符串),而輸出域是有范圍的

(這就意味著不同的輸入可能是相同的輸出)

2

當輸入相同的值時,返回值也相同(確定性)

3)

所有不同的輸入值得到的輸出,均勻地分布在輸出域內,并且與輸入值出現的規律無關。(這也是評價一個哈希函數是否優秀的兩個重要標準)比如:1和2相差很近,但是經過優秀的哈希函數計算后,他們應該差距較大。

4)

速度快:可以認為哈希函數的計算時間是O(1)的。

布隆過濾器輸入

下面就開始介紹布隆過濾器啦。

1)

我們準備k個哈希函數,并且他們之間沒有什么關系,彼此獨立。

那么對于同一個輸入對象(你想的沒錯就是一個URL),經過計算出來的結果也是完全獨立的沒有規律的。

2)

我們準備一個數組,長度為m,只有兩種狀態,所以我們選用bit數組名為bitmap。

3)

我們輸入一個黑名單里的URL時:把URL用每一個哈希函數計算出來,結果%數組長度(目的是能存下呀。。。。。),把對應位置的bit變為1,記錄下來。

處理完所有URL,我們的布隆過濾器就準備好啦。

布隆過濾器檢查

我們如何用布隆過濾器檢查某個URL是否是黑名單中的呢?
同樣的方法,把這個值用k個哈希函數算出結果,每一個結果都去bitmap里找有沒有存在過,只要有一個結果不存在,那這個URL就肯定不是黑名單了。(因為之前用同樣的方法,bitmap變為1的那些位置和現在應該是一樣的)

接下來就是比較佛性的事了,既然有一個答案不存在,這個URL就不是黑名單里的,那。。。所有答案都存在,就能確定它在黑名單里嗎?

不是的。

因為可能是其它URL算出的答案恰好把本URL的答案全都算出來過。

想到這就不禁要問了:那這個數據結構有啥用?不是坑爹呢?

其實是有用的,他的失誤率是很低很低的。

他的原則就是:“寧可錯殺三千,不可放過一個”

如何設計空間和哈希函數

?

首先我們應該想到:數組太小的話肯定是不準確的,比如:

就這么小個數組,存了幾個URL,十個地方全算出來過,全成1了。

那后面判斷的時候就比較坑了,隨便來什么URL,隨便什么哈希函數,算出的答案全都出現過,這顯然不是我們想要的。

所以,我們應該知道,數組過小會影響準確性。

那么我們如何根據數據量來設計數組大小和哈希函數個數呢?

以本題為例:

樣本數:100億

失誤率:不超過0.01%,記為p

每個樣本大小:64B(這個其實不影響布隆過濾器大小,因為這是和哈希函數有關的,一般的哈希函數都能接受64B的數據,并且輸出,bitmap只需記錄答案是否出現過即可)

布隆過濾器大小m由以下公式決定:

根據公式算出m=19.19n,向上取整20,所以需要2000億bit=25GB

哈希函數的個數由以下公式決定:

k=14

布隆過濾器的失誤率為:

計算出為0.006%,符合要求,此題可解。

公式分析

?

白名單

過濾器會用錯誤,對已經發現的錯誤樣本可以建立白名單防止錯誤。

其他使用場景

  • 網頁爬蟲對URL的去重,避免爬去相同的URL地址
  • 垃圾郵件過濾,從數十億個垃圾郵件列表中判斷某郵箱是否是殺垃圾郵箱
  • 解決數據庫緩存擊穿,黑客攻擊服務器時,會構建大量不存在于緩存中的key向服務器發起請求,在數據量足夠大的時候,頻繁的數據庫查詢會導致掛機。

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

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

相關文章

推薦算法--利用用戶行為數據(02)

文章目錄目錄1.什么是用戶行為數據?1.1用戶行為分類2.用戶行為數據如何使用?2.1 用戶活躍度和物品流行度的分布2.2 用戶活躍度和物品流行度的關系2.3 協同過濾算法3.實驗設計和算法評測4.基于鄰域的的推薦算法4.1 基于用戶的協同過濾算法4.2 基于物品的協…

《Head First設計模式》第九章(2)組合模式

組合模式 ? 基于前一篇迭代模式的案例進行需求更新,餐廳的菜單管理系統需要有煎餅屋菜單和披薩菜單。現在希望在披薩菜單中能夠加上一份餐后甜點的子菜單。 在迭代模式中,披薩菜單是用數組維護的,我們需要讓披薩菜單持有一份子菜單&#xf…

Python(4)--Pycharm安裝、使用小技巧

Pycharm安裝1.專業版Pycharm 安裝2.設置Pycharm桌面快捷圖標3.Linux卸載一個軟件4.教育版Pycharm的安裝5.多文件項目演練(Pycharm針對學生和教師開發了免費使用版)1.專業版Pycharm 安裝 1.官網下載安裝包 .tar.gz 2.解壓縮 tar -zxvf 文件名 3.移動解壓…

推薦算法--推薦系統冷啟動問題(03)

文章目錄目錄1.什么是冷啟動問題?1.1冷啟動問題1.2 冷啟動問題的分類1. 用戶冷啟動2 物品冷啟動3 系統冷啟動2.如何解決冷啟動問題?2.1利用用戶注冊信息2.2選擇合適的物品啟動用戶的興趣2.3利用物品的內容信息2.4 發揮專家的作用目錄 1.什么是冷啟動問題…

《Head First 設計模式》第十章-狀態模式 狀態模式

狀態模式 策略模式和狀態模式是雙胞胎,在出生時才分開。你已經知道,策略模式是圍繞可以互換的算法來創建成功業務的,然而,狀態走的是更崇高的路,它通過改變對象內部的狀態來幫助對象控制自己的行為。 定義狀態模式 …

推薦算法--利用用戶標簽數據(04)

文章目錄流行的推薦系統通過3種方式聯系用戶興趣和物品 (1):利用用戶喜歡過的物品,給用戶推薦與他喜歡過的物品相似的物品,這是基于物品的算法。 (2):利用和用戶興趣相似的其他用戶…

Python(5)-注釋

Python注釋1.單行注釋2. 多行注釋(塊注釋)3.注釋的使用和代碼規范pyhton 的注釋 使用自己熟悉的語言(中文),解釋代碼。Python解釋器在執行文件時不會執行井號右邊邊的內容。1.單行注釋 # 井號后面跟著注釋內容 灰灰的虛…

玩具kv數據庫

介紹 用java寫一個簡陋的kv數據庫(倆小時的貨),用來復習一下java流知識、線程、socket等知識。 客戶端:很簡單的寫了一下功能:就是發送用戶的命令,還有接收數據顯示出來 服務端:redis類&#…

網絡原理知識點總結

第一章: 計算機網絡系統由資源子網和通信子網組成。 計算機網絡系統主要由網絡通信系統、操作系統和應用系統構成 互聯網基礎結構發展的三個階段: 第一階段:從單個網絡 ARPANET 向互聯網發展的過程。 第二階段:建成了三級結構…

推薦算法--時效性(05)

時效性 推薦系統應該考慮時間效應,因為用戶的興趣是有時間變化的。用戶一年前喜歡的東西現在不一定感興趣,相比于推薦過去喜歡的物品,推薦用戶近期喜歡的物品更有參考價值。而在新聞更是如此,推薦過去跟用戶興趣一致的新聞已經失去…

初識博弈論(1)

博弈論與主流經濟學的新發展1.經濟學的研究內容2.博弈論的研究內容3.博弈論的發展簡史4.經濟學發展的趨勢本系列博文主要記錄了學習張維迎老師的《博弈論與信息經濟學》一書相關內容,如果有誤之處懇請指出;或對照張老師的書籍進行學習。1.經濟學的研究內…

c語言實現排序和查找所有算法

c語言版排序查找完成,帶詳細解釋,一下看到爽,能直接運行看效果。 /* Note:Your choice is C IDE */ #include "stdio.h" #include"stdlib.h" #define MAX 10 void SequenceSearch(int *fp,int Length); void Search(int …

推薦算法--推薦系統架構(06)

外圍架構一般來說,每個網站都有一個 UI 系統,UI 系統負責給用戶展示網頁并和用戶交互。網站會通過日志系統將用戶在 UI 上的各種各樣的行為記錄到用戶行為日志中。 從上面的結構可以看到,除了推薦系統本身,主要還依賴兩個條件--界…

樹狀數組維護區間和的模型及其拓廣的簡單總結

by wyl8899 樹狀數組的基本知識已經被講到爛了,我就不多說了,下面直接給出基本操作的代碼。 假定原數組為a[1..n],樹狀數組b[1..n],考慮靈活性的需要,代碼使用int *a傳數組。 #define lowbit(x) ((x)&(-(x))…

Python(6)-算數運算符

算數運算符1.算數運算符2.優先級1.算數運算符 加 減- 乘* 除/ 取商// 取余數% 冪**(能算n次方: 2**38,一直以為只能算平方) 擴展: 乘法用于字符串:字符串重復指定的次數,要拼接的次數很長時,用乘號很方便…

推薦算法--其他信息(07)

文章目錄目錄1.利用上下文信息1.1時間上下文1.2地點上下文2.利用網絡社交數據2.1 獲取網絡社交數據途徑2.2 社交網絡數據2.3 基于社交網絡的推薦2.4 推薦算法2.5 給用戶推薦好友目錄 1.利用上下文信息 1.1時間上下文 用戶的興趣是隨著時間變化的,三天打魚兩天曬網…

動態規劃的深入探討

一、引言 動態規劃是一種重要的程序設計思想,具有廣泛的應用價值。使用動態規劃思想來設計算法,對于不少問題往往具有高時效,因而,對于能夠使用動態規劃思想來解決的問題,使用動態規劃是比較明智的選擇。 能夠用動態規…

Python(7)-程序執行的原理

程序執行的原理1.計算機中的三個核心部件2.程序執行的原理3.程序的作用1.計算機中的三個核心部件 CPU:中央處理區,超大規模的集成電路,負責處理數據、計算 內存:臨時存儲數據,斷電數據消失,讀取數據快 硬盤…

推薦系統讀書筆記(推薦系統實戰)

隨著信息技術和互聯網的發展,人們逐漸從信息匱乏的時代走入了信息過載的時代。在這個時代,無論是信息消費者還是信息生產者都遇到很大的挑戰;對于消費者,從大量信息中找到自己感興趣的信息是一件非常困難的事情;對于信…

橙白oj 2017級《算法分析與設計》-練習02

注:A題我以為給新生出的,應該賊簡單,是按順序消滅,卡了十幾分鐘,成了最后一個ac的題,真是菜的真實。 Problem A: Description 白細胞是人體與疾病斗爭的“衛士”。當病菌侵入人體體內時,白細胞…