algorithm - 在一组集合中查找子集和超集的有效方法

标签 algorithm data-structures set

是否有任何有效的算法或数据结构来查找集合集合的超集和子集?

例子:

# collection of sets
>>> col = [{1,2,3},{2,3,4},{4,5,6,7}]

>>> subsets_of({1,2,3,4}, col)
[{1,2,3},{2,3,4}]

>>> supersets_of({4}, col)
[{2,3,4},{4,5,6,7}]

最佳答案

在一般情况下,不会,除了暴力搜索方法。

但是,根据您拥有的数据类型,可以使用多种技术进行线性时间搜索。例如,如果元素值总是小于 32(或 64),那么您可以创建一个整数,其中包含为当前值设置的位,并对它们进行 OR 以查明该集合是否是一个子集。如果值小于 1 亿左右,您可以创建一个巨大的 bool 数组,其中如果集合包含该值,则每个数组元素为 1,否则为 0。那么子集查找是线性时间的。类似的方法可以解决线性时间内的超集问题。

关于algorithm - 在一组集合中查找子集和超集的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28971129/

相关文章:

java - int[] 到哈希集 (Java)

合并两个最大堆的算法?

list - 列表和 Python 中设置的内存消耗

Java:更改预填充的字符串数组列表中的元素

java - 并发多重映射放置和删除

haskell - 在无限序列生成期间删除元素

java - 选择具有预期数量的唯一值和插入的 HashSet 的初始容量

algorithm - 一个minhash算法需要多少个哈希函数

c# - 如何将包含单词的文件加载到文件超过 300 万行的列表中

java - 查找在列表中多次出现的数字的伪代码