の独自の実装を作成しHyperLogLog algorithm
ました。これはうまく機能しますが、多くの (約 10k ~ 100k) の HLL 構造を取得してマージする必要がある場合があります。
それぞれをビット文字列として保存するため、最初に各ビット文字列をバケットに変換する必要があります。HLLがたくさんあるので、私が望むよりも時間がかかります.
現在、実行時間の約 80% で、HLL ごとに次のコード行が 1 回呼び出されます。
my @buckets = map { oct '0b'.$_ } unpack('(a5)1024', $bitstring);
より速くする方法はありますか?
HyperLogLog の定義を後にすると、タスクは次のように説明できます: $bitstring
1024 個の 5 ビット カウンターで構成されている場合 (したがって、各カウンターは最大 32 個の値を持つことができます)、1024 個の整数の配列に変換する必要があります。