Method: Hyperll::HyperLogLog#cardinality

Defined in:
lib/hyperll/hyper_log_log.rb

#cardinalityObject



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/hyperll/hyper_log_log.rb', line 45

def cardinality
  register_sum = 0.0
  zeros = 0.0
  @register_set.each do |value|
    register_sum += 1.0 / (1 << value)
    zeros += 1 if value == 0
  end

  estimate = @alphaMM * (1 / register_sum)
  if estimate <= (5.0 / 2.0) * @count
    # small range estimate
    (@count * Math.log(@count / zeros)).round
  else
    estimate.round
  end
end