如果我有一个变量数量的集合(称为 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增加和集合大小变得太大时,该方法的可扩展性如何。
一些额外的背景信息:
- 每个集合的长度大致相同,但也非常大(存储它们全部内存中是一个现实的问题,虽然可以使用避免此问题的算法,但不是必需的)
- 任意两个集合之间的交集大小与集合本身的大小相比非常小
- 如果有帮助,我们可以假设任何需要输入集合的顺序。