Algorithm 解释计数草图算法
有人能解释一下计数草图算法是如何工作的吗?例如,我仍然不知道哈希是如何使用的。我很难理解。此流式算法实例化了以下框架Algorithm 解释计数草图算法,algorithm,streaming,frequency-analysis,Algorithm,Streaming,Frequency Analysis,有人能解释一下计数草图算法是如何工作的吗?例如,我仍然不知道哈希是如何使用的。我很难理解。此流式算法实例化了以下框架 找到一种随机流算法,其输出(作为随机变量)具有期望值,但通常具有高方差(即噪声) 要减少差异/干扰,请并行运行多个独立副本并合并它们的输出 通常1比2更有趣。这个算法的2实际上有点不标准,但我只讨论1 假设我们正在处理输入 a b c a b a . 有了三个计数器,就不需要散列了 a: 3, b: 2, c: 1 让我们假设我们只有一个。有八个可能的函数h:{a,b,c}-
a b c a b a .
有了三个计数器,就不需要散列了
a: 3, b: 2, c: 1
让我们假设我们只有一个。有八个可能的函数h:{a,b,c}->{+1,-1}
。下面是一个结果表
h |
abc | X = counter
----+--------------
+++ | +3 +2 +1 = 6
++- | +3 +2 -1 = 4
+-- | +3 -2 -1 = 0
+-+ | +3 -2 +1 = 2
--+ | -3 -2 +1 = -4
--- | -3 -2 -1 = -6
-+- | -3 +2 -1 = -2
-++ | -3 +2 +1 = 0
现在我们可以计算期望值
(6 + 4 + 0 + 2) - (-4 + -6 + -2 + 0)
E[h(a) X] = ------------------------------------ = 24/8 = 3
8
(6 + 4 + -2 + 0) - (0 + 2 + -4 + -6)
E[h(b) X] = ------------------------------------ = 16/8 = 2
8
(6 + 2 + -4 + 0) - (4 + 0 + -6 + -2)
E[h(c) X] = ------------------------------------ = 8/8 = 1 .
8
这是怎么回事?对于a
,比方说,我们可以分解X=Y+Z
,其中Y
是a
s的和的变化,Z
是非a
s的和。根据期望的线性,我们有
E[h(a) X] = E[h(a) Y] + E[h(a) Z] .
E[h(a)Y]
是每次出现a
的总和,即h(a)^2=1
,因此E[h(a)Y]
是a
的出现次数。另一项E[h(a)Z]
为零;即使给定h(a)
,彼此的散列值也同样可能是正负一,因此预期贡献为零
事实上,散列函数不需要是均匀随机的,好事情是:没有办法存储它。哈希函数成对独立(任意两个特定的哈希值是独立的)就足够了。对于我们的简单示例,随机选择以下四个函数就足够了
abc
+++
+--
-+-
--+
我将把新的计算留给您。计数草图是一个可以让您回答以下问题的草图:
阅读元素流a1
,a2
,a3
,…,a
,其中可能有许多重复的元素,您可以随时找到以下问题的答案:到目前为止,您看到了多少ai
元素
只要保持从
ai
到目前为止看到的那些元素的计数之间的映射,您就可以在任何时候清楚地得到准确的答案。记录新的观测值需要O(1),检查给定元素的观测计数也需要O(1)。但是,存储此映射需要O(n)个空间,其中n是不同元素的数量
伯爵的素描对你有什么帮助?与所有概率数据结构一样,您为空间牺牲了确定性。计数草图允许您选择两个参数:结果的准确性(ε)和错误估计的概率(δ) 为此,请选择一个
d
族。这些复杂的单词意味着它们不会经常发生冲突(事实上,如果两个哈希值都映射到空间[0,m],那么冲突的概率大约为1/m^2)。这些散列函数中的每一个都将值映射到一个空间[0,w],因此可以创建一个d*w矩阵
读取元素时,计算该元素的每个d哈希值,并更新草图中的相应值。此零件与计数草图和计数最小草图相同
失眠症患者很好地解释了Count Sketch的想法(计算期望值),所以我只想指出,使用Count min Sketch,一切都更简单。您只需计算要获取的值的d哈希值,并返回其中最小的值。令人惊讶的是,这提供了一个强大的准确性和概率保证,您可以
增加散列函数的范围会提高结果的准确性,而增加散列数会降低错误估计的概率:
ε=e/w,δ=1/e^d。另一件有趣的事情是,价值总是被高估(如果你发现了价值,它很可能比实际价值大,但肯定不会小)。Wow!仅仅几个小时的发帖时间,就有人对算法有了更清晰的解释!非常感谢!!!:失眠症患者。这是否意味着我们需要事先知道集合,比如O,其中a、b和c是O的元素?@neilmarion知道一个超集就足够了——可能有太多不同的项来保持一个统一的随机哈希函数。例如,如果数据项是n位向量,那么首先我们可以选择一个随机的n位向量r,如果r.x=0 mod 2,则h(x)=1,如果r.x=1 mod 2,则h(x)=-1,其中。表示点积。(我不确定两两随机性是否足以使关于方差的参数起作用,但这就是人们可以使用的哈希函数的风格。)@失眠患者实际上实际的哈希函数实际上可以很容易地成为“均匀随机”,即
P[h(x)=y]=1/u
if1所以,count sketch和min count sketch算法都解决了相同的问题,但方式(稍微)不同?