Полный двудольный граф из объектов во вложенном NSArray - PullRequest
3 голосов
/ 21 марта 2011

Я ищу написать метод, который принимает произвольное количество объектов NSArray и возвращает вложенный массив всех возможных полных комбинаций членов этого массива.

Как мне сказали в ответ на этот вопрос, я хочу создать двудольный граф или, точнее, полный двудольный граф .

Так, например, если бы у меня было два массива:

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. Кроме того, я бы хотел, чтобы результаты были одинаковой длины. То есть, если было три исходных массива, каждый из вложенных массивов, возвращаемых методом, должен иметь длину три.

Есть какие-нибудь идеи о самом элегантном способе сделать это?

Ответы [ 2 ]

1 голос
/ 21 марта 2011

Что вы имеете в виду под всеми комбинациями?Если вам нужны все комбинации, зачем вам два списка?Если вам нужен двудольный граф, вы хотите исправить свой вопрос.

0 голосов
/ 21 марта 2011

Рекурсивное решение, вероятно, является хорошим решением.Функция будет находить только перестановки первых двух массивов, а затем один раз объединить в один массив, и вы вызовете эту функцию снова с новым объединенным массивом вместо исходных массивов.

В конечном итоге у вас будет только 1массив остался, и это будет окончательный массив результатов.

...