1
1
mirror of https://github.com/rui314/mold.git synced 2024-09-11 13:06:59 +03:00
mold/elf/hyperloglog.cc

26 lines
580 B
C++
Raw Normal View History

// This file implements HyperLogLog algorithm, which estimates
// the number of unique items in a given multiset.
//
// For more info, read
// https://engineering.fb.com/2018/12/13/data-infrastructure/hyperloglog
#include "mold.h"
#include <cmath>
namespace mold::elf {
i64 HyperLogLog::get_cardinality() const {
double z = 0;
for (i64 val : buckets)
z += pow(2, -val);
return ALPHA * NBUCKETS * NBUCKETS / z;
}
void HyperLogLog::merge(const HyperLogLog &other) {
for (i64 i = 0; i < NBUCKETS; i++)
merge_one(i, other.buckets[i]);
}
} // namespace mold::elf