Вот что я пытаюсь сделать:
Я работаю над программой, и часть того, что она должна делать, состоит в том, чтобы взять большую группу людей и разделить их на несколько групп (учитывая определенное количество участников / групп). Однако каждый человек должен проходить через каждую группу ровно один раз (порядок не имеет значения), и я хочу минимизировать количество людей, которые путешествуют вместе через разные группы.
До сих пор мне удавалось создать древовидную структуру, у которой корневой узел разветвляется на узел для каждой группы, каждый из которых разветвляется на узлы для всех других групп (кроме родительской группы), каждая ветвь в узлы для оставшихся групп (кроме родителя или родителя родителя и т. д.).
Это может быть визуализировано ниже (дано 5 групп - A, B, C, D, E):
Level 1: A B C D E
Level 2: B C D E A C D E A B D E A B C E A B C D
Level 3 (for node E only) : BCD ACD ABD ABC
etc. (with n levels for n groups)
Каждый уровень представляет одну группу всех участников, и на каждом уровне каждый участник должен быть в группе.
В моей программе каждый человек в настоящее время представлен как целое число, хранящееся в ArrayList. Весь ArrayList начинается с корня, затем делится (случайным образом) на четные группы в каждом узле (в приведенном выше примере 5 групп на первом уровне, 4 на втором и т. Д.) До конца дерева (когда каждый участник прошел через каждую группу один раз). В настоящее время я реализую это рекурсивно.
У меня возникли проблемы с выяснением, как убедиться, что количество участников в каждой группе на каждом уровне эквивалентно (или равно одному). Это легко, когда количество участников равно общему количеству узлов на последнем уровне (или нескольким из них), но становится сложнее, когда это не так (и на каждом узле участники не делятся равномерно на количество дочерних узлов).
Я не ищу конкретный код для решения этой проблемы, просто идеи о том, как я мог бы обеспечить группы одинакового размера на каждом уровне (особенно решение, которое будет работать с широким диапазоном предполагаемого количества участников и групп).
Заранее спасибо и дайте мне знать, если я не совсем уверен (поскольку мне было довольно сложно описать мою проблему)!