我目前正在使用hyperloglog来估计集合的基数(唯一项的基数)
计算两个集的并集的基数和两个集的交的基数是很简单的(|A intersect B| = |A| + |B| - |A union B|
但是我找不到一种把并集和交集的运算符连在一起的方法(注:只允许计算交集的基数而不允许计算交集的超对数,即可以通过A union B而不通过A intersect B得到一个新的超对数)。
是否有其他算法可以估计链式并和交的结果的基数?

最佳答案

坚持使用布尔代数将做到这一点,尽管如果选择性低,您可能不满意这种质量。

|((A n B) u C) n D| =
|(A n B) u C| + |D| - |(A n B) u C u D| =
|(A u C) n (B u C)| + |D| - |(A u C u D) n (B u C u D)| =
|A u C| + |B u C| - |A u B u C| + |D| - |A u C u D| - |B u C u D| + |A u B u C u D|

你应该再检查一下我的数学。

关于algorithm - 找出((A相交B)并集C)相交D)的基数的有效(恒定空间或亚线性空间)方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54876259/

10-09 23:04