我有&#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
答案 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]
并返回此地图的元素。