我自己实现了
我将每个结构存储为一个位字符串,因此首先必须将每个位字符串转换为桶。由于有很多HLL,所以它花费的时间比我想象的要长。
目前,代码的80%的运行时间都在这一行中,每个HLL调用一次:
如果我们抛开HyperLogLog的定义,可以将任务描述为:假设
HyperLogLog算法
。它运行良好,但有时我需要获取大量(约10k-100k)的HLL结构并将它们合并。我将每个结构存储为一个位字符串,因此首先必须将每个位字符串转换为桶。由于有很多HLL,所以它花费的时间比我想象的要长。
目前,代码的80%的运行时间都在这一行中,每个HLL调用一次:
my @buckets = map { oct '0b'.$_ } unpack('(a5)1024', $bitstring);
有没有更快的方法?如果我们抛开HyperLogLog的定义,可以将任务描述为:假设
$bitstring
由1024个5位计数器组成(因此每个计数器的值最多为32),我们必须将其转换为1024个整数数组。
Algorithm::HyperLogLog
。 - Miller