Алгоритм группировки - турнир

Ищу алгоритм или код, если кто-то сочтет нужным сделать следующее. Мне нужно ввести данные для ряда игроков. Количество игроков всегда будет множителем 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 «видели» друг друга один раз. Все играют в свою игру, а затем игроки перемешиваются. На следующем проходе (и последующих передачах) я хочу переставить игроков так, чтобы у них было наименьшее перекрытие. По сути, я хочу, чтобы игрок не видел повторяющееся лицо как можно дольше, а как только это станет невозможным, я хочу минимизировать его как можно больше.

Я чувствую, что это должен быть относительно простой алгоритм, но каждый подход, который я в конечном итоге использую, кажется, что он взвешивается в пользу людей, которые обрабатываются первыми ... и мое чутье / разум говорят мне, что есть абсолютно правильный ответ.

Для ясности, никого не исключают, их просто перетасовывают каждый раз.

5
задан JamesB41 13 April 2011 в 15:20
поделиться