разумно генерируя комбинации комбинаций
Допустим, у меня есть класс из 30 учеников, и я хочу генерировать все возможные способы, которыми они могут быть разбиты на группы по 5 человек (порядок не имеет значения).
Я знаю, как найти все комбинации студентов, чтобы сформировать одну группу индивидуально (http://www.merriampark.com/comb.htm). Используя этот итератор и некоторую рекурсию, я могу найти РАЗЪЕМЫ возможных комбинаций групп. Однако порядок, в котором выбираются группы, не имеет значения, и я хотел бы минимизировать время выполнения. Так как же найти уникальные КОМБИНАЦИИ возможных групп?
Приведенный выше алгоритм использует лексикографическое упорядочение, чтобы избежать создания дублирующих комбинаций ... Есть ли способ, которым я могу использовать эту идею для групп, а не для объектов?
Я хорошо знаю Ruby и менее хорошо знаю Java / Python. Заранее благодарю за любой совет!