3
HyperLogLog算法如何工作?
我最近在业余时间一直在学习不同的算法,我遇到的一个看起来很有趣的算法叫做HyperLogLog算法-该算法估计列表中有多少个唯一项。 这对我特别有趣,因为当我看到“基数”值(直到最近,我一直认为直到最近才算出它不是估计值)时,它才使我回到MySQL时代。 因此,我知道如何在O(n)中编写一种算法,该算法将计算数组中有多少个唯一项。我是用JavaScript编写的: function countUniqueAlgo1(arr) { var Table = {}; var numUnique = 0; var numDataPoints = arr.length; for (var j = 0; j < numDataPoints; j++) { var val = arr[j]; if (Table[val] != null) { continue; } Table[val] = 1; numUnique++; } return numUnique; } 但是问题是我的算法虽然为O(n),却占用了大量内存(将值存储在中Table)。 我一直在阅读本文有关如何在重复计数在列表Ø(ñ)的时间和使用的内存。 它解释说,通过对位进行散列和计数或可以在一定概率(假设列表均匀分布)中估计的某种事物中列表中唯一项的数量。 …