从嵌套NSArray中的对象完成二分图

时间:2011-03-21 01:01:20

标签: objective-c algorithm nsarray bipartite

我正在寻找一个接受任意数量的NSArray对象的方法,并返回一个嵌套数组,该数组包含该数组成员的所有可能完整组合。

正如我在回答这个问题时被告知的那样,我希望创建一个bipartite graph,或者更准确地说是complete bipartite graph

因此,例如,如果我有两个数组:

NSArray *a1 = [NSArray arrayWithObjects:@"Blue", @"Green", @"Yellow", nil];
NSArray *a2 = [NSArray arrayWithObjects:@"Apple", @"Orange", @"Pear", nil];

我想要一个采用这些数组数组的方法:

NSArray *nestedArray = [NSArray arrayWithObjects:a1, a2, nil];

并返回所有可能组合的数组,长度相同。所以,在这个例子中,我想要一个看起来像这样的数组:

 [
      [@"Blue", @"Apple"],
      [@"Blue", @"Orange"],
      [@"Blue", @"Pear"],
      [@"Green", @"Apple"],
      [@"Green", @"Orange"],
      [@"Green", @"Pear"],
      [@"Yellow", @"Apple"],
      [@"Yellow", @"Orange"],
      [@"Yellow", @"Pear"]
]

随着这些数组中对象数量的增加,结果的数量也会增长,我相信指数。我可能会在NSArray上将此方法设为一个类别。另外,我希望结果的长度都相同。也就是说,如果有三个源数组,则该方法返回的每个嵌套数组的长度应为3。

有什么想法以最优雅的方式做到这一点?

2 个答案:

答案 0 :(得分:1)

你对所有组合意味着什么?如果您想要所有组合,为什么需要两个列表?如果你想要一个二分图,那么你想纠正你的问题。

答案 1 :(得分:0)

递归解决方案可能是一个很好的解决方案。该函数只能找到前两个数组的排列,然后一旦组合成一个数组,你就可以用新的组合数组而不是原始数组再次调用这个函数。

最终你只剩下1个数组,那将是最终的结果数组。