Redis源码中hyperloglog结构的实现原理是啥( 六 )
值来进行调整。将
值进行调整的话,情况可以分成三种:
小范围;中等范围;大范围;
实战中的 HyperLogLogCase(1):小范围
在小范围的情况下,
此时的基数相对于桶的数量而言不算太多,因此可能存在多个空桶,需要进行调整。
可以思考这样一个问题:假设有
个桶,同时有
个球,把这
个球随机往这
个桶里面扔,每个球只能够进入一个桶,那么空桶个数的期望是多少个?
Answer:假设
是
个桶,
表示桶
空的概率;
表示桶
同时为空的概率(
);
那么空桶个数的期望就是
当
充分大的时候,约为
个。
因此,在小范围的情况下,如果空桶的个数
那么可以更新为
事实上,可以通过
解出
Case(2):中等范围
值不作调整。
Case(3):大范围
当
那么更新为
其中
通过这样的方法,
的误差大约在
左右。
除此之外,
推荐阅读
- microsoft redistributable为啥不做成一个带可选项的程序
- 网站完整源码能有途径获取吗
- cygwin下源码编译openssl出错
- redis中的hset怎样快速地找到最大key或最大value,有办法快速地知道一个hset中key的个数 或 value的个数吗
- 怎样借助 redis 进行内容的排序,并将关注的 feed 流推送进来,聚合在一起,显示出来
- 有关JDK源码中一些元素类型在方法实现方面的效率问题请大牛们指点迷津一下,谢谢!?
- wordpress首页文章摘要字数设置具体源码在文中!求大神!
- 开发一个网站的价格,做一个网站要多少钱,需要源码的呢
- 写一个类,让toString()输出这个类的源码
- 如果让一个程序随机的修改自己源码无限制的编译且复制自身,是否有一日会出现一个完善的人工智能
