У меня есть проблема с алгоритмом, связанная с планированием команд в ротации настолько справедливо, насколько это возможно - PullRequest
0 голосов
/ 18 ноября 2009

У меня есть проект для школы, в котором я должен придумать алгоритм планирования 4 команд для игры в волейбол на одной площадке, чтобы каждая команда имела как можно меньше времени для игры.

Если у вас всегда есть победители, которые останавливаются и вытесняют проигравшего, то команда 4-го ранга никогда не будет играть, а команда № 1 всегда будет играть. Цель состоит в том, чтобы все играли в одинаковое количество времени.

Самый простой ответ: команда 1 играет команду 2, затем команда 3 играет команду 4 и продолжает переключаться, но затем команде 1 никогда не удается сыграть команду 3 или 4 и т. Д.

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

Предложения

Ответы [ 6 ]

2 голосов
/ 18 ноября 2009

Как насчет этого: Создайте хэш-таблицу H размера NC2, в данном случае 6. Она выглядит следующим образом:

H[12] = 0
H[13] = 0
H[14] = 0
H[23] = 0
H[24] = 0
H[34] = 0

Я предполагаю, что генерация ключей будет тривиальной задачей.

Теперь, чтобы запланировать игру, отсканируйте хеш и выберите ключ с наименьшим значением (один проход). Команды, обозначенные ключом, играют в игру, и вы увеличиваете значение на единицу.

EDIT: Чтобы добавить еще одно ограничение, что ни одна команда не должна ждать слишком долго, сделайте еще один хеш W:

W[1] = 0
W[2] = 0
W[3] = 0
W[4] = 0

После каждой игры увеличивайте значение W для команды, которая не играла, на единицу.

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

1 голос
/ 18 ноября 2009

Проверьте запись в Википедии о циклическом планировании .

1 голос
/ 18 ноября 2009

Если есть N команд, и вы хотите, чтобы все их пары играли по одному разу, тогда есть «N выбирать 2» = N*(N-1)/2 игр, которые нужно запустить.

Чтобы перечислить их, просто поместите команды в упорядоченный список, и пусть первая команда сыграет с каждой другой командой, затем пусть вторая команда сыграет со всеми командами, указанными ниже в списке, и так далее. Если вы хотите распространить игры таким образом, чтобы у команд были одинаковые интервалы отдыха между играми, см. Кнут .

1 голос
/ 18 ноября 2009

хорошо, вы должны сыграть 1-2 3-4, 1-3 2-4, 1-4 2-3, а затем начать все сначала.

0 голосов
/ 19 августа 2012

ТРЕБОВАНИЯ для алгоритма СБАЛАНСИРОВАННОГО КРУГА ROBIN, для планирования командного чемпионата можно найти здесь: Алгоритм созвездия - сбалансированный круглый Робин Требования алгоритма могут быть определены этими четырьмя ограничениями:

1) Все против всех Каждая команда должна встретиться ровно один раз и только один раз с другими командами в дивизионе / лиге. Если дивизион состоит из n команд, чемпионат проводится в n-1 раундах.

2) Чередование HOME / AWAY rule Последовательность чередований матчей HOME / AWAY для каждой команды в лиге дивизиона должна быть сохранена, если это возможно. Для любой команды в лиге дивизиона не более одного раза в последовательности последовательных матчей HAHA происходит ПРЕРЫВАНИЕ ритма, то есть матч HH или AA в двух последовательных раундах.

3) Правило номера последнего слота Команда с наибольшим номером слота всегда должна располагаться в последнем ряду сетки. Для каждой последующей итерации наибольшее число слотов сетки чередуется влево и вправо; левая колонна (дома) и справа (подальше). Система, используемая для составления графика лиги, - «против часовой стрелки». При построении матчей в одном туре чемпионата создается дивизия с четным количеством команд. Если в дивизионе присутствует нечетное количество команд, в него вставляется команда BYE / Dummy в наибольшее количество слотов сетки / кольца.

4) HH и AA не терминальные и не начальные Каденция HH или AA никогда не должна происходить в начале или в конце матчей для любой команды в дивизионе.

0 голосов
/ 18 ноября 2009

притворись, что это маленькая спортивная лига, и повтори "сезоны" ... (в большинстве спортивных лиг Европы все команды играют против других команд пару раз за сезон)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...