是否有一个集合的压缩表示,以便可以确定 2 个或多个表示的交集是否具有非零计数?

问题描述

假设我有 2 组非常大的字符串。我想对这些集合进行非常压缩的表示,以便比较两者可以确定两个集合中是否有任何集合成员。我希望表示是恒定空间,或者可能记录 N 与集合的大小。

我不在乎成员是什么。甚至计数。只是判断是否存在交叉点。

我的第一个想法是拥有一个位数组并根据设置的内容切换位,例如布隆过滤器。但是如何检查两个位数组之间的交集?我认为这行不通,因为数组只是随机位。

也许是基数树之类的东西?

我怀疑已经存在用于此的算法/数据结构。集合成员有紧凑的概率数据结构,我不认为这太过分了。

解决方法

一般来说,没有小于 O(n) 空间并且可以进行集合交集查询的结构。原因很容易理解:如果有的话,您可以通过检查与集合的交集来恢复集合的每个条目,每个条目都包含一个可能的元素。根据鸽巢原理,这意味着表示必须消耗预期的 O(n) 空间。

,

Theta 数据草图看起来很有趣。它允许对集合的散列表示进行交集和并集等集合操作。

https://datasketches.apache.org/docs/Theta/ThetaSketchFramework.html