package scouter.server.util.cardinality; import java.util.HashSet; import java.util.Random; public class TestHLL { public static void main(String[] args) { int rsd=20; HashSet<Long> realSet = new HashSet<Long>(); HyperLogLog all = new HyperLogLog(rsd); HyperLogLog odd = new HyperLogLog(rsd); HyperLogLog even = new HyperLogLog(rsd); Random r = new Random(); for (int i = 1; i <= 10000000; i++) { long value=r.nextLong(); all.offer(value); realSet.add(value); if(i%2==0) even.offer(value); else odd.offer(value); int u = unit(i); if (i % u == 0) { HyperLogLog sum = new HyperLogLog(rsd); sum.addAll(even); sum.addAll(odd); sum.addAll(all); System.out.println(realSet.size() + " => all=" + all.cardinality() +" even="+even.cardinality() + " odd=" + odd.cardinality()+ " sum=" +sum.cardinality() ); } } } private static int unit(int value) { if (value < 10) return 10; int decVal = 1; for (int x = value; x >= 10; x /= 10) { decVal *= 10; } return decVal; } }