什么算法可以从一组集合中找到所有不相交的集合?

时间:2016-01-09 11:58:12

标签: c++ algorithm data-structures set

我有&#39; n&#39;组(n <10)。每组可能有1000个元素。我想找到这些集合的所有不相交的集合。比方说,例如,我有设置

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

然后输出为{{5}, {2,6}, {1}, {7}}。这个算法可以是什么?我想找到成对不相交的集合,然后使用这些新的(不相交的)集合再次从剩下的集合中找到不相交的集合。但这不会很好地扩展。希望这会有所帮助:Diagram Example

1 个答案:

答案 0 :(得分:3)

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

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]

并返回此地图的元素。