HyperLogLog algorithm
을 직접 구현했습니다. 그것은 잘 작동하지만 때로는 많은 (약 10k-100k)의 HLL 구조체를 가져 와서 병합해야합니다.HyperLogLog 알고리즘 구현 속도 향상
나는 각각을 비트 문자열로 저장하므로 먼저 각 비트 문자열을 버킷으로 변환해야합니다. 많은 HLL이 있기 때문에 내가 원하는 것보다 더 많은 시간이 걸립니다.
my @buckets = map { oct '0b'.$_ } unpack('(a5)1024', $bitstring);
빨리 그것을 할 수있는 방법이 있나요 :
현재 런타임의 약 80 %는 각 HLL에 대해 한 번씩 호출 코드 줄을한다?
우리가 HyperLogLog의 정의를 남겨두면 작업은 다음과 같이 설명 할 수 있습니다. $bitstring
은 1024 개의 5 비트 카운터로 구성되어 있으므로 각 카운터의 값은 최대 32 개가 될 수 있으므로 1024 개의 정수 배열로 변환해야합니다. .
몇 가지 예가 $ bitstring입니까? 또한 달리는 데 얼마나 오래 걸리고 받아 들여질 수 있습니까? – michael501
@michael, "101011 ..."등의 간단한 문자열입니다. 길이는 5120 기호입니다. – skaurus
cpan 모듈이 있습니다. ['Algorithm :: HyperLogLog'] (https://metacpan.org/pod/Algorithm::HyperLogLog) – Miller