2013-08-06 2 views
0

В настоящее время я работаю над программой для создания оптимальной настройки для моей легкой атлетики. У меня есть некоторые объекты класса Person (который, конечно же, выполнен на заказ), и все они имеют имя (-String). Теперь я хочу сгенерировать список всех возможных настроек. Рассматривайте это как группу лиц, которые должны выполнять ряд задач. Пример (два человека, две задачи):Перестановки Java настраиваемого массива

Person1 doing both tasks, Person1 doing first task and Person2 doing second, Person2 doing first task and Person1 doing second, Person2 doing both tasks

Теперь я хочу, чтобы это с неизвестным числом «задач» и лиц, поэтому заранее запрограммированные петли не выглядят как решение для меня. На мой взгляд, рекурсия - это путь, но я не совсем понял это. Рассмотрите установку как массив Лица, и я знаю, что означает первый показатель, так что просто печатайте имена людей. (Например: Person1, Person2 или что-то.)

Спасибо!

+0

Что вы подразумеваете под «запрограммированными циклами»? – Michelle

+0

Нравится, я не могу создавать циклы, чтобы спускать все возможности, поскольку я не знаю, сколько их будет. – Kevin0306

+0

Вы можете использовать математические выражения и вызовы функций в цикле for, например. 'for (int i = 0; i Michelle

ответ

1

Возможно, вы захотите изучить структуру данных деревьев. Если вы создаете список деревьев и считаете, что каждый корень дерева - это человек, каждый последующий узел является задачей ... так что вы можете перебирать все деревья и узлы, находя все комбинированные возможности.

+0

В прошлом году у меня было такое в курсе «Программирование» в колледже. Попробуем попробовать. Благодаря! – Kevin0306

1

Теоретически, вы хотите не перестановки, а combinations with repetitions. Я нашел существующую реализацию для Java: http://code.google.com/p/combinatoricslib/

EDIT (относительно комментария):

Проблема еще более сложной, чем комбинации с повторениями. Он описан здесь как Partition of a set.

+0

Ну, технически, порядок важен, поэтому для трех задач «Person1, Person2, Person1» - это другое решение от Person1, Person1, Person2'. Разве это не сделало бы его перестановками? Однако реализация кажется полезной, поэтому спасибо! – Kevin0306

+0

Простое значение заказа не делает ничего перестановки :) Однако вы правы, что комбинаций с повторениями недостаточно. Я обновил ответ, надеюсь, что это поможет. – BartoszKP

0

Рекурсия выполнила бы эту работу, но имейте в виду, что она станет очень трудно вычислимой, поэтому я бы предложил другой подход в зависимости от того, что именно ваша цель с этой информацией. На самом деле, он станет настолько недоступным настолько быстро, что если в вашей команде будет больше, чем 4 или 5 человек, и более чем несколько задач, код никогда не закончится.

* примерно