Redis源码中hyperloglog结构的实现原理是啥( 七 )
其实也可以用近似值来代替,毕竟如下公式的计算是有一定的成本的。
近似的值为
当
HyperLogLog 的案例分析有一个关于 HyperLogLog 的 demo 网站可以看到 HyperLogLog 的算法过程,其链接是 http://content.research.neustar.biz/blog/hll.html
在这个 demo 中,作者对比了 LogLog 和 HyperLogLog 的区别和运行过程,有助于大家理解整个过程。其中 LogLog 与 HyperLogLog 的区别就在与它们平均值的处理方式不一样,前者是使用算术平均值,后者是使用调和平均值。
LogLog:
HyperLogLog: 
HyperLogLog Demo:初始化
第一个 hash 值:38521724293852172429 的二进制是:11100101100110110111110010001101,可以划分为100 110110111110010 001101。最后的六位是 001101,十进制就是 13,那么这个数字就会被放入第 13 个桶;而 110110111110010(从低位到高位看),
函数的值就是 2;于是在第 13 个桶就会把 0 更新成 2。
第二个 hash 值:25456984992545698499 的二进制是 10010111101111000100011011000011,用同样的分析可得结论。
第三个 hash 值:25776998152577699815 的二进制是 10011001101001001001001111100111。
第四个 hash 值:775376803775376803 的二进制是 101110001101110100111110100011。
运行结束从以上的 Demo 运行过程可以看出,整个 HyperLogLog 的算法逻辑还是相对清晰的,其整个算法的亮点应该在于借助了抛硬币的场景,用抛硬币的结果来估算抛硬币的次数。
推荐阅读
- microsoft redistributable为啥不做成一个带可选项的程序
- 网站完整源码能有途径获取吗
- cygwin下源码编译openssl出错
- redis中的hset怎样快速地找到最大key或最大value,有办法快速地知道一个hset中key的个数 或 value的个数吗
- 怎样借助 redis 进行内容的排序,并将关注的 feed 流推送进来,聚合在一起,显示出来
- 有关JDK源码中一些元素类型在方法实现方面的效率问题请大牛们指点迷津一下,谢谢!?
- wordpress首页文章摘要字数设置具体源码在文中!求大神!
- 开发一个网站的价格,做一个网站要多少钱,需要源码的呢
- 写一个类,让toString()输出这个类的源码
- 如果让一个程序随机的修改自己源码无限制的编译且复制自身,是否有一日会出现一个完善的人工智能
