基数估计算法(二):Linear Counting算法

写作不易,转载请注明出处:
http://blog.csdn.net/wbin233/article/details/78752597 ,谢谢。

简介

Linear Counting是KYU-YOUNG WHANG,BRAD T. VANDER-ZANDEN和HOWARD M. TAYLOR大佬们1990年发表的论文《A linear-time probabilistic counting algorithm for database applications》中提出的基于概率的基数估计算法。

基本思想及实现

Linear Counting的实现方式非常简单。
首先定义一个hash函数:
function hash(x): -> [0,1,2,…,m-1],假设该hash函数的hash结果服从均匀分布。

接着定义一个长度为m的bit数组,开始每一位上都初始化为0.

然后对可重复集合里的每个元素进行hash得到k,如果bitmap[k]为0则置1。

最后统计bitmap数组里为0的位数u。

设集合基数为n,则有:
n^=mlnum ,且其为n的最大似然估计。


简单的伪代码如下:
BLC伪代码


举个例子说明下吧,如下:

LC示例
集合中共有11个元素,hash函数映射到[0,7]中(m=8)且结果服从均匀分布。如图hash结果后共有2个bit为0,即u=2。代入上述公式可得估计结果为11.1(实际值为10)。
【该例子只为了说明算法的过程,实际中都是大数据中估计。】

公式证明

先说明下述中使用到的变量。

变量 含义
n 基数
q 总数
m bit数组的长度(hash区间)
t n/m
Un hash后bit数组为0的位数
Vn Un/m
p E(Vn)

由于hash函数映射后的hash结果服从均匀分布,因此任意一数选中bitmap数组的某一个bit概率为 1m
Aj 为事件“经过n个不同元素哈希后,第j个桶值为0”,则:
P(Aj)=(11m)n ,
P(AjAk)=(12m)n,jk.

又每个bit是相互独立的,即 Aj 服从均匀分布。
Un 的数学期望为:
E(Un)=mj=1P(Aj)=m(11m)n=m(((1+1m)m)nm)menm=met,n,m

【数学上证明: limx(1+1x)x=e

所以: E(Un)=menm

即: n=mlnE(Un)m

显然,bitmap里每个bit的值服从相同的0-1分布,因此 Un 服从二项分布。
由概率论与数理统计知识可知,当n很大时,可以用正态分布逼近二项分布,因此可以认为当n和m趋于无穷大时 Un 渐进服从正态分布。
由于我们观察到的空桶数 Un 是从正态分布中随机抽取的一个样本,因此它就是μ的最大似然估计(正态分布的期望的最大似然估计是样本均值)。

又由如下定理:

设f(x)是可逆函数且 x^ 是x的最大似然估计,则f( x^ )是f(x)的最大似然估计。
mlnxm 是可逆函数, n^=mlnUnm n=mlnE(Un)m 的最大似然估计。

UnVn

先给出结论,在 m,n 的前提下有:
E(Un)=menm=met.

Var(Un)=met(1(1+t)et).

又有 Vn=Unm

E(Vn)=et.

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值