我们目前面临一个有趣的问题。我们想估计一个集合的基数,而不需要存储每个项目(通常位图/位集是一个不错的方法)。一个非常好的算法是所谓的 HyperLogLog 随机算法(在此处查看更多信息http://antirez.com/news/75)。
这里的问题是,您只能将集合合并为UNIONs,所以基本上它是一个OR组合。
实际上,我们不仅希望将集合与 OR 组合,还希望与 AND 组合。我们甚至想结合这些操作。
示例: set1 AND (set2 OR set3) OR (set4 AND set5)
每个集合可能具有数百万范围内的基数。每个值的大小为 128 位。
每个集合都可以以任何方式表示,例如“HLL、布隆过滤器、普通列表或这些的组合”。该算法必须使用可行的空间量在尽可能短的时间内执行。
有任何想法吗?