Count-Min Sketch 算法


本文轉自: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,a表示編號為 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 的取值是哪來的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM