实时分析网站UV与Flajolet-Martin算法

        最近在学习如何解决大数据流中的独立元素计数问题。这么讲起来有点抽象,一个很典型的例子是如何实时计算或者估计网站UV。

        针对类似问题,很容易想到一个简单的办法:我们可以先对数据排序,然后再统计。可这种方法却无法应对大数据现实,因为在大数据场景下,诸如网站UV的数值,每天可能达到上亿,这就导致计算的时间及空间复杂度很高,因而很难满足实时要求。

        Flajolet-Martin算法较好的解决了独立元素计数问题;当然,它是一个估计值,能在极大降低空间复杂度的前提下,提供业务方可接受的估值精度。

        简单描述下自己的认识,关于”为什么FM算法估值比较精确“:

   首先,我们容易理解:”在一个整数集中,每2^ K个数后就会出现一个尾部K个0组成的比特序列“;

            我们将数据流中的每个元素,通过哈希函数映射为一个随机整数;

            同时我们针对每个哈希函数的结果集,统计每个随机整数尾部的全0比特序列长度(尾部有多少个连续0),记录该长度最大值,即为R;

            这时,我们认为2^R 可以作为数据流中不重复元素个数的估计值。

            假设数据流中有M个非重复元素,忽略理论证明,可以有如下结论:

           当M >> 2^r 时,那么发现一个尾部长度至少为 r 的概率接近1;( 反过来想,我们取了所有r值中的最大值R,则R不会过小。)

           当M << 2^r 时,那么发现一个尾部长度至少为  r 的概率接近0;(说明2^R不会过大)

           基于上述两条结论,我们可以认为 M的估计值2^R不可能过高过低


        关于Flajolet-Martin算法,我推荐如下一篇博客文章,觉得讲解的很通俗易懂:

            [转]Flajolet-Martin算法及其应用

        其主要内容如下:

*************************************************************************************************************************************************************************

假定哈希函数H(e)能够把元素e映射到[0,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值