【问题标题】:Explanation on HyperLogLog algorithmHyperLogLog算法说明
【发布时间】:2017-10-28 12:54:06
【问题描述】:
首先让我先说我读过this question.
所以当我在网上闲逛时,我遇到了那个算法,我想知道它是如何工作的。在阅读了它之后,我确实明白了它是如何通过散列和使用位来计算视图的。
我还不太明白,如何确保避免再次计算相同的视图。我们是否存储了我们遇到的每个散列值,并且在增加计数之前检查它是否已经存在于我们的数组中或其他什么?
如果我们有 1000k+ 个项目,这是否会降低效率?
【问题讨论】:
标签:
database
algorithm
hyperloglog
【解决方案1】:
HyperLogLog 很酷的一点是,您不必存储您看到的整个数组,即O(n),甚至不需要存储唯一值。您需要存储的是 oreder O(log(log(n)),它要低得多。
基本上,如果两个对象具有相同的值,那么它们的哈希值将相同。这意味着前导位也将相同。所以拥有多个具有相同值的对象根本不会影响计算。
这一事实还允许简单的并行性 - 您可以划分人口,并分别计算最大值,然后通过计算单独最大值中的最大值将它们组合起来。