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

本文介绍了如何使用Flajolet-Martin算法解决大数据流中的独立元素计数问题,特别是在实时计算网站UV时的应用。算法通过哈希函数和尾部全0比特序列长度统计,提供了一种在空间复杂度极低的情况下估算值的方法。通过多个哈希函数和中位数选择,可以提高估算精度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值