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}-

有人能解释一下计数草图算法是如何工作的吗?例如,我仍然不知道哈希是如何使用的。我很难理解。

此流式算法实例化了以下框架

  • 找到一种随机流算法,其输出(作为随机变量)具有期望值,但通常具有高方差(即噪声)

  • 要减少差异/干扰,请并行运行多个独立副本并合并它们的输出

  • 通常1比2更有趣。这个算法的2实际上有点不标准,但我只讨论1

    假设我们正在处理输入

    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
    if
    1所以,count sketch和min count sketch算法都解决了相同的问题,但方式(稍微)不同?