参考:https://www.jianshu.com/p/55defda6dcd2
概率算法
实际上目前还没有发现更好的在大数据场景中准确计算基数的高效算法,因此在不追求绝对准确的情况下,使用概率算法算是一个不错的解决方案。
概率算法不直接存储数据集合本身,通过一定的概率统计方法预估基数值,这种方法可以大大节省内存,同时保证误差控制在一定范围内。
目前用于基数计数的概率算法包括:
- Linear Counting(LC):早期的基数估计算法,LC在空间复杂度方面一般,实际上LC的空间复杂度与简单bitmap方法是一样的(但是有个常数项级别的降低),都是O(Nmax);
- LogLog Counting(LLC):LogLog Counting相比于LC更加节省内存,空间复杂度只有O(log2(log2(Nmax)))
- HyperLogLog Counting(HLL):HyperLogLog Counting是基于LLC的优化和改进,在同样空间复杂度情况下,能够比LLC的基数估计误差更小。