Я делаю клиент для подбора игроков, который объединяет 10 человек в две команды:
Каждый игрок выбирает четырех человек, с которыми он хотел бы играть, ранжируя их от самого высокого до самого низкого.
Затем из самых сильных отношений в этом наборе формируются две команды.
Как бы вы создали алгоритм, решающий эту задачу?
Пример:
Given players [a, b, c, d, e, f, g, h, i, j], '->' meaning a preference pick.
a -> b (weight: 4)
a -> c (weight: 3)
a -> d (weight: 2)
a -> e (weight: 1)
b -> d (weight: 4)
b -> h (weight: 3)
b -> a (weight: 2)
...and so on
Эта проблема кажется простой на первый взгляд (в конце концов, это всего лишь клиент для подбора партнеров), но, поразмыслив над этим некоторое время, кажется, что нужно учитывать довольно много отношений.
Изменить (вставлено из комментария): В идеале я бы избегал грубого подхода к масштабированию до более крупных игр, в которых требуется 100 игроков и 25 команд, где выбор предпочтительных товарищей по команде будет осуществляться с помощью функции поиска. Я понимаю, что эта система может быть не самой лучшей для своей цели, однако это интересная проблема, и я хотел бы найти эффективное решение, попутно чему-то научившись.
a
доi
. Вам нужно добавитьj
, чтобы получить 10. И я согласен, что грубая сила должна хорошо работать на такой небольшой проблеме. И следует уточнить: вы хотите две команды, по пять человек в каждой? Я вычисляю только 252 возможности (комбинаторные 10 выбирают 5). - person Rory Daulton   schedule 09.06.2018