algorithm - 包含超集

标签 algorithm set

我正在寻找一种结构(“集合的集合”),它可以让我有效地检查它是否包含我的集合的超集。

例子: A = { 1, 2 } B = { 2, 3 } C = { 1, 3 } D = { 1, 2, 3 }

一组集合 S1 = { A, B } 和另一个 S2 = { D }

S1 contains A => true
S1 contains C => false
S2 contains A => true

此解决方案的复杂性应尽可能低(不仅是渐近的)。

最佳答案

使用字典在位图中可能的不同元素和位置之间进行转换。然后将每个集合存储为位图。

获取一组集合的并集是将位图组合在一起的问题。

检查一个集合是否是一组集合的子集是检查位图的与运算结果是较小集合的位图。

这些操作应该很快。如果你真的雄心勃勃,你可以从http://en.wikipedia.org/wiki/General-purpose_computing_on_graphics_processing_units开始并弄清楚如何将计算转移到 GPU。

如果您有更大的集合并且可以接受有时会得到错误的答案,那么您应该查看布隆过滤器。这使您可以使用明显更短的位图获得大部分正确答案。

关于algorithm - 包含超集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26607759/

相关文章:

python - 未正确创建以元组集作为值的字典

java - HashSets 中的 contains-Method 如何工作?

C - 使用排序算法交换链表中的节点

python - 第 k 个排列的第 i 个元素

performance - 如何在 theta 证明中找到常数 c1、c2 和 n0?

C++在特定行号的文件中插入一行

javascript - 递归算法的空间复杂度是否一定至少与递归调用的深度一样大?

java - 通过 ImmutableSet.copyOf() 和 new HashSet<>(list) 将列表转换为集合;

Android EditText + 设置一些文字颜色

java - 尝试将对象添加到列表并将其保存在 Spring Boot 上的 MySQL 中时出现 UnsupportedOperationException