我们之前在数据流基本问题--确定频繁元素(一)中提到了频繁元素的一个计算问题(找出出现次数超过m/k的元素),里面的算法返回的结果里肯定包含出现次数超过m/k的元素,但是也可能包含不超过m/k的元素(false positive)。对于这个缺点,必须得进行额外一次的重新扫描,以确定最终答案。我们只允许进行一次的扫描,那么该怎么去做呢?这里我们简单讨论下lossy counting算法和sticky sampling算法。
一、lossy counting算法
其实问题是一样的,这里换个说法来叙述。我们定义两个参数,一个是支持度阈值s,一个是允许错误范围参数(
)。如果我们想要找出出现频率超过0.1%的元素,则s=0.1%。我们要找到出现次数超过s*m的元素。算法返回的结果里面允许一定的错误,但是允许的范围是
*m,也就是说结果中不会出现次数少于(s-
)*m的元素。我们一般设

本文探讨了在数据流中确定频繁元素的问题,介绍了lossy counting和sticky sampling两种算法。lossy counting通过减少误差但增加空间复杂度来找出频率超过指定阈值的元素,而sticky sampling利用采样估计频繁元素,保证高概率下的正确性,并且空间复杂度与数据流长度无关。
最低0.47元/天 解锁文章
5596

被折叠的 条评论
为什么被折叠?



