本文轉自:https://zhuanlan.zhihu.com/p/84688298
1. Count-Min Sketch
Count-Min Sketch 是數據庫中用到的一種 Sketch,所謂 sketch 就是用很少的一點數據來描述全體數據的特性,犧牲了准確性但是代價變得很低。
CM-Sketch 的數據模型是這樣的:
有一個維度為n 、不斷變化的向量(t 表示時間戳)
每個時間 t上會發生一個更新操作,將其中某一個值加上 c,其他值不變
盡管論文還討論了一些更 general 的情形,我們這里可以簡單地理解為,CM-Sketch 要擬合的的數據模型類似一個哈希表加上計數器:假設有一個數據集合里有 n 個 distinct values,ai 表示編號為 i 的值出現的次數,每次更新都在修改這個計數器。
CM-Sketch 作為一個 sketch,目的是用相對小的代價,實現以下幾種查詢(近似結果):
查詢編號為 i 的元素出現的次數(主要功能)
查詢編號在
范圍內的元素出現的總次數
查詢 inner product:
-Quantiles
- Heavy Hitters
2. 實現
CM-Sketch 的內部數據結構是一個二維數組 count,寬度 w,深度 d,此外還需要 d 個兩兩獨立的哈希函數 h1...hd。
更新的時候,用這些哈希函數算出 d 個不同的哈希值,然后把對應的行的值加上 c。
這里的取值是有講究的:
,
,兩個參數的含義是:在
的概率下,總誤差(所有元素查詢誤差的之和)小於
。
3. 結果近似性
這里以 Q(i) 為例,它的近似結果是:
也就是所有哈希到的 count 取最小值。顯然真實值一定比這個值更小或者相同,那我們只要證明這個值不會比真實值大太多。
要證的結論:
證明如下:
1) 定義指示變量 表示哈希函數
對於元素
和
是沖突的:他們倆被哈希到同一個 slot 上。站在元素
的角度上看,由於
哈希碰撞,導致元素
的計數加到自己的計數上了。
2) 定義隨機變量 ,表示所有元素的
的加和。它表示:哈希函數
未知的情況下,所有元素的總誤差。
3) 運用馬爾可夫不等式,把期望的 bound 轉換成概率的 bound
這也解釋了我們之前看到的 d 和 w 的取值是哪來的。