Я создаю приложение, которое помогает управлять фристайловыми «турнирами шляп». Идея заключается в том, что люди подписываются на этот «турнир по шляпе». Когда они регистрируются, укажите нам числовое значение между 1 и 6, которое представляет их уровень мастерства.Алгоритм, который создает «команды» на основе числового значения умения
В настоящее время мы берем этот огромный список людей, которые зарегистрировались, и вручную пытаются создать команды из этого на основе уровней квалификации каждого игрока. Я решил, что могу автоматизировать это, создав алгоритм, который разбивает команды как можно более равномерно.
Единственные данные, подаваемые в это, представляют собой массив «игроков» и желаемое «количество команд». Вообще говоря, мы смотрим 120 игроков и 8 команд.
Мой текущий процесс мышления состоит в том, чтобы в основном иметь «счет» для каждой команды. Этот счетный счет - это сумма всех уровней навыков назначенных игроков. Я прохожу через каждый уровень навыков. Я прохожу через раунды выбора один раз внутри цикла уровня квалификации. Порядок выбора выбирается в каждом раунде на основе оценки команды.
Это на самом деле работает достаточно хорошо, но его не идеально. Например, в моем массиве выборки я имел диапазон 5 баллов. Я мог бы очень легко, вручную поменять игроков вокруг и сделать расхождение не более 1 pt между командами .. проблема в том, что это делается программно.
Вот мой код до сих пор: http://pastebin.com/LAi42Brq
Отрывок из того, что данные выглядит следующим образом:
[2] => Array
(
[user__id] => 181
[user__first_name] => Stephen
[user__skill_level] => 5
)
[3] => Array
(
[user__id] => 182
[user__first_name] => Phil
[user__skill_level] => 6
)
Может кто-нибудь придумать лучше, легче, более эффективный способ сделать это? Спасибо заранее!!
«Разделяя их как можно более равномерно», вы имеете в виду, что их общий общий балл в основном равен? Например, две команды из двух игроков были бы даже в том случае, если бы у кого (2,6), а у другого (3,5)? – Groo
Я отсылаю вас к ответам на http://stackoverflow.com/questions/9688392/picking-fair-teams-and-the-math-to-prove-it/9688717#comment12311258_9688717 –