Этот маленький проект / проблема вышел из левого поля для меня. Надеюсь, кто-то может помочь мне здесь. У меня есть некоторые грубые идеи, но я уверен (или, по крайней мере, надеюсь), что существует простое, довольно эффективное решение.
Заранее спасибо .... псевдокод в порядке. Я обычно работаю в .NET / C #, если это проливает свет на ваше решение.
Дано:
Пул из n человек, которые будут встречаться на регулярной основе. Мне нужно сформировать пары, которые ранее не встречались. Пул людей будет медленно меняться со временем. Для целей спаривания (A & B) и (B & A) составляют одну и ту же пару. История предыдущих спариваний сохраняется. Для цели задачи предположим четное число людей. Для каждой встречи (коллекции пар) и отдельных будет пара только один раз.
Есть ли алгоритм, который позволит нам сформировать эти пары? В идеале что-то лучше, чем просто упорядочить пары в случайном порядке, сгенерировать спаривания и затем проверить историю предыдущих спариваний. В целом, случайность внутри спаривания в порядке.
Чуть больше:
Я могу придумать несколько способов создать рандомизированный пул, из которого можно вытащить пары особей. Сверьте их с историей и либо отбросьте их обратно в пул, либо удалите их и добавьте в список парных людей. Что я не могу понять, так это то, что в какой-то момент у меня останется список людей, которых нельзя объединить в пару. Но ... некоторые из этих людей могут быть в паре с членами, которые находятся в списке пар. Я мог бы выбросить одного из этих партнеров обратно в пул непарных членов, но это, похоже, приведет к циклу, который будет сложно протестировать и который может работать вечно.