Bloom Filter 和 Count-Min Sketch 介绍
Bloom Filter
introduction
首先,我們假設(shè)有四種存儲設(shè)備,分別是 Tape, HDD, SSD, Memory.當(dāng)然,我們知道,這四種設(shè)備的響應(yīng)速度是按順序遞增的,也就是說 Memory 的速度最快,當(dāng)然,我們都希望所有的程序都可以跑在 Memory 中,但是這四種設(shè)備的存儲大小即容量也是不一樣的,價格也是隨之遞增的.Ex .g 當(dāng)我們在 Java 中使用 Set 類型去存儲數(shù)據(jù)的時候,數(shù)據(jù)越多,查詢所需的時間越長,同時 Jvm heap 也越大.實際生產(chǎn)環(huán)境中的數(shù)據(jù)量極大,在一些實時性要求比較高的應(yīng)用當(dāng)中,不可能將所有的數(shù)據(jù)都放在 Memory 中,當(dāng)允許一定的誤差的情況下,(即使用準(zhǔn)確性去換取實時性,這是一種 tradeoff)這里就提出了,一種 Probabilistic data structure,它可以在一定程度上去接受一定的誤差,從而使響應(yīng)速度加快,所要存儲的數(shù)據(jù)也大大縮小.
Bloom Filter 的概念提出的比較早,早在1970年就由一個叫 Bloom(真的叫這個名字)的人在一篇名為"Space / Time trade-offs in hash coding with allowable errors"
structure
Initial the structure
Add an element to this structure
query 判斷存在還是不存在
If one hash function map to 0, It means NO!( 有一個 map 到0 就不行)
But if all hash functions map to 1, it means maybe YES(即使 所有的 hash 函數(shù)都能 map 到1, 也不能說明就一定存在, 這里有一定的 false positive, 即認(rèn)為是正確的,但實際上不是正確的概率)
use cases
Count-Min Sketch
introduction
Count-min Sketch 是一個概率數(shù)據(jù)結(jié)構(gòu),用作數(shù)據(jù)流中事件的頻率表。它使用散列函數(shù)將事件映射到頻率,但與散列表不同,散列表僅使用子線性空間,但會因過多計算沖突導(dǎo)致的某些事件。
Count-min Sketch 本質(zhì)上與 Fan 等人在 1998 年引入的計數(shù) Bloom filter 相同的數(shù)據(jù)結(jié)構(gòu). 但是,它們的使用方式各不相同,因此尺寸也有所不同:計數(shù)最小草圖通常具有次線性單元數(shù),與草圖的所需近似質(zhì)量有關(guān),而計數(shù) Bloom filter 的大小通常與其中的元素數(shù)集合。
Main aim is to count things, how many times have i seen an element
structure
實際的草圖數(shù)據(jù)結(jié)構(gòu)是 w 列和 d 行的二維數(shù)組。參數(shù) w 和 d 在創(chuàng)建草圖時是固定的,并確定時間和空間需求以及在查詢頻率或內(nèi)部產(chǎn)品草圖時的錯誤概率。與每個 d 行相關(guān)聯(lián)的是一個單獨的散列函數(shù); 哈希函數(shù)必須是成對獨立的。參數(shù) w 和 d 可以通過設(shè)置 w =?e/ε?和 d =?ln1 /δ?來選擇,其中在回答查詢時的誤差在概率為 1 - δ的附加系數(shù)ε內(nèi)(見下文) ,e 是歐拉數(shù)。
對于 Hash Function 的要求,可以是最簡單的 hash function ,但所有的 hash function 必須不同.
當(dāng)一個新的類型 i 事件到達(dá)時,我們更新如下:對于表中的每一行 j,應(yīng)用相應(yīng)的散列函數(shù)來獲得列索引 k = hj(i)。然后將第 j 行第 k 列中的值加 1。
查詢(統(tǒng)計元素個數(shù))
The estimated count is given by the least value in the table for i, namely {\displaystyle {\hat {a}}{i}=\min {j}\mathrm {count} [j,h_{j}(i)]} {\hat a}{i}=\min {j}{\mathrm {count}}[j,h_{j}(i)], where {\displaystyle \mathrm {count} } {\mathrm {count}} is the table.
就是取最小的 count 作為 element 出現(xiàn)的次數(shù),故名 count-min

Probabilistic problem
Epsilon: accepted error added to counts with each item
Delta: probability that estimate is outside accepted error
use cases
參考
James Stanier 的演講教程
wikipedia 解釋
Algorithms & Data Challenges Berlin Meetup
Mar 19, 2013 PPT
An Improved Data Stream Summary: The Count-Min Sketch and Its Applications
總結(jié)
以上是生活随笔為你收集整理的Bloom Filter 和 Count-Min Sketch 介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。