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

数据流基本问题--独立元素计数(二)

时间:2015-05-25 10:17:13      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:数据流   独立元素计数   哈希   

该篇文章中问题的定义和上一篇文章《数据流基本问题--独立元素计数(一)》点击打开链接中一样。不过该篇文章里能给出技术分享-近似的算法。

一、算法的基本思想

该篇文章中的算法是上一篇文章中算法的改进。这里不再记录流中元素zeros(h(j))的最大值,而是将满足所有技术分享的元素放入到B中。如果流中有d个独立元素,那么平均会有技术分享个元素满足技术分享。所以技术分享应该是d的一个比较好的估计(|B|指的是B中元素总数目)。

二、算法的具体过程

算法的伪代码如下图所示。将一个元素j添加到B中时,是以g(j)和zeros(h(j))组成一对加进去的。没有直接存元素而是存元素哈希后的结果是为了节省空间的考虑。而且也存放zeros(h(j))是为了当B需要删除元素时需要用到它。

技术分享

三、算法的评估

技术分享为算法结束后|B|的大小,t为算法结束后z的取值。则对d的估计技术分享为:

技术分享

可以证明,技术分享的期望和方差如下:

技术分享

技术分享

如果t=0,说明算法运行过程中并没有对z进行加一的操作。这时候计算的结果也就是|B|为d的精确解。

如果t>1,假设Fail事件为技术分享不是d的技术分享-近似。即:

技术分享

可以证明

技术分享

假设哈希函数g(i)可能有冲突造成的影响,上述算法结果是对d的技术分享-近似。

通过使用median trick,我们可以将算法提高到对d的技术分享近似(对所有技术分享)。

数据流基本问题--独立元素计数(二)

标签:数据流   独立元素计数   哈希   

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

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