逻辑集合运算的基数近似——("HyperLogLog" for AND/OR/XOR)
Cardinality approximation for logical set operations – (The "HyperLogLog" for AND/OR/XOR)
我们目前面临一个有趣的问题。我们想 估计 集合的基数而不需要存储每个项目(通常 bitmaps/bitsets 是一个不错的方法)。一个非常好的算法是所谓的 HyperLogLog 随机算法(在此处查看更多信息 http://antirez.com/news/75)。
这里的问题是,您只能将集合合并为 UNIONs,所以基本上它是一个 OR 组合。
实际上,我们不仅希望将集合与 OR 组合,而且还希望将其与 AND 组合。我们甚至想结合这些操作。
示例:
set1 和(set2 或 set3)或(set4 和 set5)
每个集合的基数可能在数百万范围内。每个值的大小为 128 位。
每个集合都可以用任何方式表示,例如"HLL, bloom filter, a plain list, or a combination of these"。该算法必须使用可行的 space.
数量在尽可能短的时间内执行
有什么想法吗?
这个确切的问题是 https://pdfs.semanticscholar.org/5da8/bf81712187712aed159aed62e38fb012872e.pdf 的主题。他们的建议是使用布隆过滤器。
并集的布隆过滤器是布隆过滤器的按位或。交集的布隆过滤器是布隆过滤器的按位与。这样你就可以很容易地生成你想要的操作的布隆过滤器。
他们的定理 1 允许您根据布隆过滤器中设置的位数来估计集合的大小。
我们目前面临一个有趣的问题。我们想 估计 集合的基数而不需要存储每个项目(通常 bitmaps/bitsets 是一个不错的方法)。一个非常好的算法是所谓的 HyperLogLog 随机算法(在此处查看更多信息 http://antirez.com/news/75)。
这里的问题是,您只能将集合合并为 UNIONs,所以基本上它是一个 OR 组合。
实际上,我们不仅希望将集合与 OR 组合,而且还希望将其与 AND 组合。我们甚至想结合这些操作。
示例: set1 和(set2 或 set3)或(set4 和 set5)
每个集合的基数可能在数百万范围内。每个值的大小为 128 位。
每个集合都可以用任何方式表示,例如"HLL, bloom filter, a plain list, or a combination of these"。该算法必须使用可行的 space.
数量在尽可能短的时间内执行有什么想法吗?
这个确切的问题是 https://pdfs.semanticscholar.org/5da8/bf81712187712aed159aed62e38fb012872e.pdf 的主题。他们的建议是使用布隆过滤器。
并集的布隆过滤器是布隆过滤器的按位或。交集的布隆过滤器是布隆过滤器的按位与。这样你就可以很容易地生成你想要的操作的布隆过滤器。
他们的定理 1 允许您根据布隆过滤器中设置的位数来估计集合的大小。