2015-06-02 2 views
1

Я новичок в этом поле, и мне захотелось сделать Java-приложение, реализующее технику турнира Single Elimination Tournament, в котором я буду импортировать имена игроков и их клубы и позволить приложению (через алгоритм) создавать для я один турнир для исключения турнира с именами игроков по определенным критериям, например: Два игрока из одного клуба не могут играть друг против друга или два игрока, которые выиграли предыдущие чемпионаты, НЕ МОЖЕТ играть друг против друга .... и т.д.Алгоритм одиночного элиминационного турнира

Во всяком случае, как я могу начать такой алгоритм?

+1

Как долго должны сохраняться эти критерии? Если им нужно только удерживать на самом низком уровне скобки, тогда вам просто нужно устроить так, чтобы ни один из двух игроков из одного клуба не был рядом друг с другом. Если вы хотите, чтобы ваши критерии удерживались как минимум для двух уровней скобки, игроки из одного клуба не могут находиться в одном наборе из четырех ({0,1,2,3} или {4,5,6,7} или ...). Кроме того, что произойдет, если ваши критерии противоречат друг другу? В качестве простого примера, если более половины игроков из одного клуба, вы не можете избежать двух игроков из одного клуба, играющих друг против друга на первом уровне. –

ответ

0

Игнорирование вопроса о двух игроках, которые выиграли предыдущие чемпионаты и просто думают о клубах, это то, что я предлагаю. Во-первых, добавьте еще один клуб под названием BYE с достаточным количеством игроков {bye0, bye1, ...}, чтобы общее количество игроков было 2^n для некоторого n. (2 дает n = 1, 4 дает n = 2, 8 дает n = 3, 16 дает n = 4, ...).

Мы строим турнирный кронштейн, работая из корня дерева, вниз по n уровням. В корне мы имеем всех наших игроков. Чтобы спуститься вниз, половина игроков должна идти влево, половина должна идти вправо. Попробуйте разбить каждый клуб пополам на этом этапе, так что половина игроков в клубе 0 идет влево, другая половина игроков в клубе 0 идет вправо. Единственное осложнение, с которым вам придется иметь дело, - это нечетные числа, но поскольку должно быть четное количество клубов нечетного размера, странный человек может поочередно перемещаться влево и вправо.

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

Смежные вопросы