Algorithm 在集合中查找子集和超集的有效方法

Algorithm 在集合中查找子集和超集的有效方法,algorithm,data-structures,set,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}] 您可以为子集创建哈希方法,然后将其存储在HashMap中 然后,您甚至

有没有有效的算法或数据结构来查找集合上的超集和子集

例如:

# 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}]

您可以为子集创建哈希方法,然后将其存储在HashMap中


然后,您甚至可以在固定时间内找到它(如果您有足够的内存)。

在一般情况下,除了蛮力搜索方法之外,不会


但是,根据您拥有的数据类型,可以使用各种技术进行线性时间搜索。例如,如果元素值始终小于32(或64),则可以创建一个整数,其中设置了当前值的位,并/或它们,以确定该集是否为子集。如果值小于1亿左右,则可以创建一个巨大的布尔数组,其中,如果集合包含值,则每个数组元素为1;如果集合不包含值,则为0。然后子集查找是线性时间。类似的方法也可用于在线性时间内解决超集问题。

对于较大数量的位,这些数组通常称为位集。假设您计划在一个整数中存储32或64个布尔值。