HyperLogLog 算法记录
接触这个算法是在著名的 CMU 15455 的 Project0 遇到的。题外话,这个课程的 Project0 是用 C++ 实现一些数据结构或算法,目的是检测学生的 C++ 水平,如果得不到满分,就会不推荐你学这门课程。由于 Project0 基本是独立于课程的,所以题目基本每学期都会变,比如这学期是跳表,下学期就是 HyperLogLog,我是做的 2024 Fall,那个学期就是要求 HyperLogLog。
长话短说,其实我觉得知道这个算法的意义最重要。非常重要,因为我第一次接触的时候就因为误解了它的用途,导致看别人的讲解看的一头雾水:
统计网页每天有多少用户点击进入的次数。同一个用户的反复点击进入记为 1 次。当数量过大后,使用 HashMap 会消耗大量内存;并且当数量过大时,允许有一定的误差。
看如下的文章即可:
1. https://juejin.cn/post/6844903785744056333
这篇文章的入门介绍讲的很好,比较适合第一次看,主要是看硬币那里的介绍即可。
2. https://developer.volcengine.com/articles/7065609735982022664
这篇文章就相对专业许多,看了第一篇文章的硬币介绍部分再来看这个。它的【MVP版基数估计】讲的特别好,我从这才明白为什么第一篇文章的 HyperLogLog 和 抛硬币的关系,里面的细节比较多。
3. http://content.research.neustar.biz/blog/hll.html
这是一个 Demo 网站,实际上一篇文章也提到了,这里单独拿出来,看的时候配合着看。感谢作者。