如果我有可变数量的集合(我们称之为数字n),每个集合最多有m个元素,那么计算所有集合对的成对交集的最有效方法是什么?请注意,这与所有n 个集合的交集不同。
例如,如果我有以下集合:
A={"a","b","c"}
B={"c","d","e"}
C={"a","c","e"}
我希望能够找到:
intersect_AB={"c"}
intersect_BC={"c", "e"}
intersect_AC={"a", "c"}
另一种可接受的格式(如果它使事情变得更容易的话)是给定集合中的项目到包含相同项目的集合的映射。例如:
intersections_C={"a": {"A", "C"},
"c": {"A", "B", "C"}
"e": {"B", "C"}}
我知道这样做的一种方法是创建一个字典,将所有n 个集合的并集中的每个值映射到它出现的集合列表,然后遍历所有这些值以创建intersections_C
如上所述的列表,但是我不确定随着n的增加和集合的大小变得太大,它是如何扩展的。
一些额外的背景信息:
- 每个集合的长度大致相同,但也非常大(足够大,以至于将它们全部存储在内存中是一个现实的问题,并且避免这种情况的算法将是首选但不是必需的)
- 与集合本身的大小相比,任何两个集合之间的交集的大小都非常小
- 如果它有帮助,我们可以假设我们需要对输入集的排序做任何事情。