是否有任何有效的算法或数据结构可用于查找集合集合中的超集和子集?
示例:
# 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}]
答案 0 :(得分:2)
在一般情况下,除了暴力搜索方法之外没有。
但是,根据您拥有的数据类型,可以使用各种技术进行线性时间搜索。例如,如果元素值总是小于32(或64),那么您可以创建一个整数,其中为存在的值设置位,或者它们可以找出该集是否为子集。如果值小于1亿左右,则可以创建一个巨大的布尔数组,其中如果集合包含值,则每个数组元素为1,否则为0。然后子集查找是线性时间。类似的方法可以解决线性时间内的超集问题。
答案 1 :(得分:-2)
您可以为子集创建哈希方法,然后将其存储在HashMap中。
然后你可以在恒定的时间内找到它(如果你有足够的记忆)。