逻辑集操作的基数近似 - (AND / OR / XOR的“HyperLogLog”)

时间:2016-05-12 22:29:51

标签: algorithm data-structures estimation hyperloglog

我们目前面临一个有趣的问题。我们希望估计集合的基数,而无需存储每个项目(通常位图/位集是一种很好的方法)。一个非常好的算法就是所谓的HyperLogLog随机算法(详见http://antirez.com/news/75)。

这里的问题是,您只能将集合合并为 UNIONs ,所以基本上它是 OR 组合。

我们实际上不仅要将集合与OR结合,还要与AND结合使用。我们甚至想要结合这些操作。

示例: set1 AND(set2 OR set3)OR(set4 AND set5)

每组可能具有数百万的基数。每个值的大小为128位。

每组都可以用任何方式表示,例如“HLL,布隆过滤器,简单列表或这些组合”。算法必须使用可行的空间量在尽可能短的时间内执行。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

这个确切的问题是https://pdfs.semanticscholar.org/5da8/bf81712187712aed159aed62e38fb012872e.pdf的主题。他们的建议是使用布隆过滤器。

联合的bloom过滤器是bloom过滤器的按位OR。用于交叉的布隆过滤器是布隆过滤器的按位AND。因此,您可以轻松生成所需操作的布隆过滤器。

他们的定理1允许您根据布隆过滤器中设置的位数来估计集合的大小。