Data structures 了解计数草图数据结构和相关算法

Data structures 了解计数草图数据结构和相关算法,data-structures,language-agnostic,Data Structures,Language Agnostic,正在研究CountSketch数据结构及其相关算法。它似乎是一个很好的工具,可以在流式数据中找到共同的元素,它的加性特性使查找频率的巨大变化变得很有趣,可能类似于Twitter用于趋势主题的方式 对于一个已经远离更多学术方法一段时间的人来说,这个问题有点难以理解,这里的一个确实帮助了一些人,至少对我来说,它仍然留下了很多问题 据我所知,计数草图结构类似于bloom过滤器。然而,哈希函数的选择让我感到困惑。该结构是一个N×M的表,具有N个哈希函数,其中M个可能值决定要更改的“bucket”,另一个

正在研究CountSketch数据结构及其相关算法。它似乎是一个很好的工具,可以在流式数据中找到共同的元素,它的加性特性使查找频率的巨大变化变得很有趣,可能类似于Twitter用于趋势主题的方式

对于一个已经远离更多学术方法一段时间的人来说,这个问题有点难以理解,这里的一个确实帮助了一些人,至少对我来说,它仍然留下了很多问题

据我所知,计数草图结构类似于bloom过滤器。然而,哈希函数的选择让我感到困惑。该结构是一个N×M的表,具有N个哈希函数,其中M个可能值决定要更改的“bucket”,另一个哈希函数为每N个“两两独立”

是否要从通用散列族中选择散列,例如h(x)=((ax+b)%some_prime)%M


如果是这样的话,返回+1或-1的s散列从何处选择?从一个存储桶中减去的原因是什么?

它们从存储桶中减去,使其他事件导致的加/减的平均效果为0。如果有一半的时间我加上'foo'的计数,而有一半的时间我减去'foo'的计数,那么预计'foo'的计数不会影响'bar'计数的估计


选择一个像你描述的通用散列函数确实会起作用,但它对理论而不是实践来说更重要。将您最喜欢的合理散列函数添加到salt中也会起作用,您只是无法使用一些固定的散列函数根据预期值编写有意义的证明

如果添加foo时,一半桶得到-1,一半桶得到+1,那么foo的估计函数返回的中值不会趋向于0吗?确实,如果不考虑任何信息,平均计数是0。但现在确定一个计数,其平均值实际上为0。现在考虑“FO”事件,你知道“FO”的运动方向。在知道“foo”的方向的条件下,你对“foo”的方向有偏差,并且估计值从0到该方向的变化程度,你将“foo”的计数归功于“foo”。中间值的内部对被估计的实际情况有偏差,中间值刚刚消除了大量的方差。感谢您的回复,我在调节部分和“方向”上有点迷糊了。对于任何给定的键(“f00”、“bar”和“baa”),它本质上是使用一半的s来作为所有其他术语的平衡,而另一半用于增加其自身的程度吗?这似乎使估计值偏离了相当大的一点,但也许我看估计值太过字面,它更像是相对于草图中存储的其他关键点?s是确定性的,对吗?如果需要在-{1,+1}之间粗略地划分,那么随机生成的值(经过足够长的时间)不比固定的散列更能保证这一点吗?也许我需要更新我的哈希教育:)