从一组集合中找出所有不相交集合的算法是什么

What can be the algorithm to find all disjoint sets from a set of sets?

本文关键字:集合 是什么 算法 一组      更新时间:2023-10-16

我有'n'个集合(n<10)。每组可以有1000个元素。我想为这些集合找到所有不相交的集合。比如说,我有套

A = {2,5,6,7}, B = {5,1} and C = {5,7}. 

那么输出将是CCD_ 1。这方面的算法是什么?我想找到成对的不相交集,然后使用这些新的(不相交的)集从剩下的集中再次找到不相交集。但这不会很好地扩展。希望这有帮助:图表示例

您可以将您的问题视为布尔型双条目映射,元素是行,集合是列,布尔型是问题的答案,是集合中包含的元素。例如,你的例子是:

t A B C
2 1 0 0
5 1 1 1
6 1 0 0
7 1 0 1 
1 0 1 0

然后为每个元素创建一个键,描述它所在的差异集,并将该元素注册到映射中。

例如,如果我们将密钥创建函数视为这样的函数:

int keyFunction(bool Xa, bool Xb, bool Xc) {
  int key =0;
  if (Xa) {key+=4;}
  if (Xb) {key+=2;}
  if (Xc) {key+=1;}
  return key;
}

然后我们可以创建地图:

Key ElementsQueue
0   []
1   []
2   [1]
3   []
4   [2,6]
5   [7]
6   []
7   [5]

并返回此映射的元素。