在两个兼容的 HyperLogLog 对象之间进行并集时,您可以只取最大桶进行无损并集,不会引入任何新错误:
Union.Bucket[i] = Max(A.Bucket[i], B.Bucket[i])
但是,在进行交集时,您必须使用包含-排除原则:
IntersectionCountEstimate = A.CountEstimate() + B.CountEstimate() - Union.CountEstimate()
为什么使用最小桶值不能作为有效的交集?
Intersection.Bucket[i] = Min(A.Bucket[i], B.Bucket[i])