Bloom Filter演算法 簡介

2022-08-29 11:39:09 字數 817 閱讀 2251

bloom-filter演算法 其實可以看作 bit-map 的一種擴充套件。

它把已存在的元素通過多個hash 函式對映到乙個 bit 序列,對於每乙個元素根據hash函式的結果把相應的 位置置一(這個bit序列通常很長,但是比起記住所有元素它占用的空間是小的)。

在判斷乙個元素時候已存在的時候,它會把這個元素的多個hash結果對應到bit序列中檢視,如果已經全部置為一,那麼說明該元素已經存在。

乙個bloom filter有以下引數:

mbit陣列的寬度(bit數)

n加入其中的key的數量

k使用的hash函式的個數

ffalse positive的比率

(假陽性)

為了把錯誤率控制在 f,共有 n 個元素的集合作 bloom filter 其他引數可以由以下公式來定值:

m =nlg(1/f)*lge (其中

lg 表示以2為底的對數)

k = - ln(f) /

ln(2)  

另外對於乙個元素非常多的集合要進行 

bloom

filter操作,必須構造乙個返回值範圍很大的 hash 函式。可以用 md5 演算法生成十六進製制的hash值,然後轉成十進位制:

import hashlib

m=hashlib.md5()

m.update('123123123123123123')

print int(m.hexdigest(), base=16)

詳見:

Bloom Filter演算法優化

基於redis的bloom filter去重,利用redis的string資料結構,但redis的string最大只能512m,所以資料過大的時候,需要申請多個去重塊。bloom filter對乙個很長的字串進行雜湊對映時會出錯,常誤判為已經存在,所以我們進行一次壓縮 md5 sha1 將去重佇列和...

Bloom Filter 布隆演算法

日常生活中,包括在設計計算機軟體時,我們經常要判斷乙個元素是否在乙個集合中。比如在字處理軟體中,需要檢查乙個英語單詞是否拼寫正確 也就是要判斷它是否在已知的字典中 在 fbi,乙個嫌疑人的名字是否已經在嫌疑名單上 在網路爬蟲裡,乙個 是否被訪問過等等。最直接的方法就是將集合中全部的元素存在計算機中,...

例項學習Bloom Filter

0.科普 1.為什麼需要bloom filter 2.基本原理 3.如何設計bloom filter 4.例項操作 5.擴充套件 0.科普 bloom filter是由bloom在1970年提出的一種多雜湊函式對映的快速查詢演算法。通常應用在一些需要快速判斷某個元素是否屬於集合,但是並不嚴格要求10...