Bloom Filter 和 Count-Min Sketch 介绍
Bloom Filter
introduction
首先,我們假設有四種存儲設備,分別是 Tape, HDD, SSD, Memory.當然,我們知道,這四種設備的響應速度是按順序遞增的,也就是說 Memory 的速度最快,當然,我們都希望所有的程序都可以跑在 Memory 中,但是這四種設備的存儲大小即容量也是不一樣的,價格也是隨之遞增的.Ex .g 當我們在 Java 中使用 Set 類型去存儲數據的時候,數據越多,查詢所需的時間越長,同時 Jvm heap 也越大.實際生產環境中的數據量極大,在一些實時性要求比較高的應用當中,不可能將所有的數據都放在 Memory 中,當允許一定的誤差的情況下,(即使用準確性去換取實時性,這是一種 tradeoff)這里就提出了,一種 Probabilistic data structure,它可以在一定程度上去接受一定的誤差,從而使響應速度加快,所要存儲的數據也大大縮小.
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 函數都能 map 到1, 也不能說明就一定存在, 這里有一定的 false positive, 即認為是正確的,但實際上不是正確的概率)
use cases
Count-Min Sketch
introduction
Count-min Sketch 是一個概率數據結構,用作數據流中事件的頻率表。它使用散列函數將事件映射到頻率,但與散列表不同,散列表僅使用子線性空間,但會因過多計算沖突導致的某些事件。
Count-min Sketch 本質上與 Fan 等人在 1998 年引入的計數 Bloom filter 相同的數據結構. 但是,它們的使用方式各不相同,因此尺寸也有所不同:計數最小草圖通常具有次線性單元數,與草圖的所需近似質量有關,而計數 Bloom filter 的大小通常與其中的元素數集合。
Main aim is to count things, how many times have i seen an element
structure
實際的草圖數據結構是 w 列和 d 行的二維數組。參數 w 和 d 在創建草圖時是固定的,并確定時間和空間需求以及在查詢頻率或內部產品草圖時的錯誤概率。與每個 d 行相關聯的是一個單獨的散列函數; 哈希函數必須是成對獨立的。參數 w 和 d 可以通過設置 w =?e/ε?和 d =?ln1 /δ?來選擇,其中在回答查詢時的誤差在概率為 1 - δ的附加系數ε內(見下文) ,e 是歐拉數。
對于 Hash Function 的要求,可以是最簡單的 hash function ,但所有的 hash function 必須不同.
當一個新的類型 i 事件到達時,我們更新如下:對于表中的每一行 j,應用相應的散列函數來獲得列索引 k = hj(i)。然后將第 j 行第 k 列中的值加 1。
查詢(統計元素個數)
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 出現的次數,故名 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
總結
以上是生活随笔為你收集整理的Bloom Filter 和 Count-Min Sketch 介绍的全部內容,希望文章能夠幫你解決所遇到的問題。