码迷,mamicode.com
首页 > 其他好文 > 详细

数据流基本问题--确定频繁元素(二)

时间:2015-05-27 23:00:56      阅读:637      评论:0      收藏:0      [点我收藏+]

标签:数据流   lossy counting   频繁元素   

我们之前在数据流基本问题--确定频繁元素(一)中提到了频繁元素的一个计算问题(找出出现次数超过m/k的元素),里面的算法返回的结果里肯定包含出现次数超过m/k的元素,但是也可能包含不超过m/k的元素(false positive)。对于这个缺点,必须得进行额外一次的重新扫描,以确定最终答案。我们只允许进行一次的扫描,那么该怎么去做呢?这里我们简单讨论下lossy counting算法。

其实问题是一样的,这里换个说法来叙述。我们定义两个参数,一个是支持度阈值s,一个是允许错误范围参数技术分享技术分享)。如果我们想要找出出现频率超过0.1%的元素,则s=0.1%。我们要找到出现次数超过s*m的元素。算法返回的结果里面允许一定的错误,但是允许的范围是技术分享*m,也就是说结果中不能出现次数少于(s-技术分享)*m的元素。我们一般设技术分享为s的1/10。

算法的大致过程很简单,描述如下:将整个数据流切分成多个窗口。

技术分享

对于第一个窗口,先统计每个元素及其出现次数,处理结束后,每个元素的出现次数都减一。

技术分享

然后继续处理后面的窗口。每处理完一个窗口对保存的所有元素的出现次数都减一。

技术分享

算法输出最终计数超过(s-技术分享)*m的元素。

如果整个流的长度为m,窗口大小w=1/技术分享。这样任意元素元素统计的最大误差是技术分享m。该做法空间复杂度为1/技术分享 * log(技术分享*m)。其实lossy counting的误差比数据流基本问题--确定频繁元素(一)中方法小,是以使用更多空间作为代价的。

参考资料:

《Approximate Frequency Counts over Data Streams》

数据流基本问题--确定频繁元素(二)

标签:数据流   lossy counting   频繁元素   

原文地址:http://blog.csdn.net/dm_ustc/article/details/46051091

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!