Ищу алгоритм или код, если кто-то сочтет нужным сделать следующее. Мне нужно ввести данные для ряда игроков. Количество игроков всегда будет множителем 4. Я хочу сгруппировать отдельных игроков в группы по 4 человека с наименьшим количеством повторений. Первоначальное размещение тривиально:
1 2 3 4 Table 1
5 6 7 8 Table 2
9 10 11 12 Table 3
13 14 15 16 Table 4
17 18 19 20 Table 5
21 22 23 24 Table 6
Итак, игроки 1-4 «видели» друг друга один раз. Все играют в свою игру, а затем игроки перемешиваются. На следующем проходе (и последующих передачах) я хочу переставить игроков так, чтобы у них было наименьшее перекрытие. По сути, я хочу, чтобы игрок не видел повторяющееся лицо как можно дольше, а как только это станет невозможным, я хочу минимизировать его как можно больше.
Я чувствую, что это должен быть относительно простой алгоритм, но каждый подход, который я в конечном итоге использую, кажется, что он взвешивается в пользу людей, которые обрабатываются первыми ... и мое чутье / разум говорят мне, что есть абсолютно правильный ответ.
Для ясности, никого не исключают, их просто перетасовывают каждый раз.