注: 在本文中, 我将暂时将sketch翻译成为梗概
我们首先定义两个参数和, 则梗概的准确性保证可定义为, 我们向这个梗概发起一个查询, 查询结果小于因子的概率大于.
Frequency Moment:
数据流型(stream)的定义如下: 假设有一个向量, 且, 当一个更新项于时间到达的时候, 则有:
如果是必须为正, 则该数据流是现金注册型 (cash register case); 否则, 如果可以为负值, 则该数据流为栅门型 (turnstile case). 在栅门型中, 如果的值可以为负, 则我们将它称为一般栅门型 (general case), 如果应用层保证的值不可为负, 则我们将它称为非负栅门型 (non-negative case). 数据流型的定义又可以表述为, 我们可能有无数个更新项, 但是的值只能为. 所以, 这些更新项可以归类为组. 我们令, 即是所有对应于的更新项中的和.
基于向量和, 可以有以下三种类型的查询:
- 点查询 (point query) : 返回的值
- 范围查询(range query) : 返回
- 内积查询(inner product query) : 返回
我们定义如下:
. 特别地,
对于一个数据流型, 它的-重流 (-heavy hitters)可定义为
, 但是在对-重流估计的时候我们可以接受的, 其中
一个数据流型的-分位点 (-quantile)可定义如下:
我们将所有的进行排序 (文章中没有指明, 但是这里默认是升序排序), 之后其中序次为的分量便是该数据流型的-分位点, 其中. 在对-分位点进行估计的时候, 我们可以接受的结果是所有序次在到之间的分量, 其中.
在确定了两个参数和以后, 我们可以确定一个Count-Min梗概的规模. 一个Count-Min梗概由个哈希表组成, 每个哈希表包括个哈希桶. 其中, , 为自然对数. 我们将第个哈希表的第个哈希桶记为. 每个哈希表都和一个独立的哈希函数相关联.
Count-Min梗概的原理如下: 当一个更新项到达的时候, 我们更新哈希表如下: 对于每一个, , 我们令. 也就是说, 我们将分别映射到个哈希表中, 并将的值分别加入到所对应的哈希桶中.
点查询的结果是, 而将作为对的值的估计.
定理1. , 且以下不等式成立的概率至少为:
证明:
1. 我们首先定义变量. 当时, 否则. 则有
我们再定义变量如下:
所以是第个哈希表中所有和被映射到同一个哈希桶的分量的和, 所以
所以定理的前半部分得证.
2. 我们求的数学期望如下:
所以
同时,
所以
而由马尔可夫不等式可知,
所以
所以
而
所以
Count-Min梗概的内存消耗量为, 其中, . 我们也可以令, 其中, 但是我们令可求得, 所以当的时候可以使得Count-Min梗概的内存消耗最小.
内积查询的结果是, 其中,
(原文中有一个定理2, 但是我没有看懂, 所以这里就不再摘录)
定理3. , 并且以下不等式以至少的概率成立:
证明:
因为和的分量均为非负数, 所以显然成立.
由马尔科夫不等式可知,
所以
而
所以