Алгоритм сортировки между несколькими предметами, а не только между двумя предметами (баскетбол)? - PullRequest
0 голосов
/ 18 ноября 2011

Нам нужно сделать классификацию баскетбольной команды.

Для справки процедура здесь:

D.1 Procedure
Teams shall be classified according to their win-loss records, namely two (2) points
for each game won, one (1) point for each game lost (including lost by default) and
zero (0) points for a game lost by forfeit.

D.1.1 If there are two (2) teams in the classification with equal points, the result(s) of the
game(s) between the two (2) teams involved will be used to determine the placing.

D.1.2 If the points and the goal average in the games between the two (2) teams are still
the same, the classification will be determined by the goal average of all the games
played in the group by each team.

D.1.3 If there are more than two (2) teams in the classification with equal points, a second
classification will be established, taking into account only the results of the games
between the involved teams.

D.1.4 If at any stage of this procedure the number of teams with equal points is reduced
to only two (2) teams, the procedure in D.1.1 and D.1.2 above will be applied.

D.1.5 If in the second classification there are still teams with equal points, the goal
average will be used to determine the placing, taking into account only the results
of the games between the involved teams.

D.1.6 If there are still more than two (2) teams with the same goal average, the placing
will be determined using the goal average from the results of all their games played
in the group.

D.1.7 If at any stage of this procedure the number of teams with equal points is reduced
to a tie still involving more than two (2) teams, the procedure, beginning with D.1.3
above, is repeated.

D.1.8 Goal average will always be calculated by division.

Вопрос в том, как подойти к разделу D.1.3, в котором говорится: If there are more than two (2) teams in the classification with equal points, a second classification will be established, taking into account only the results of the games between the involved teams. как смоделировать вторую классификацию и как принять решение на основе результатов игр между ними?

Ответы [ 4 ]

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

Сделайте так, как вы бы это сделали в реальной жизни:

  1. Сортируйте команды, используя список критериев для их сравнения
  2. После того, как список отсортирован, сделайте передачучтобы увидеть, есть ли какие-либо серии команд из 3+, которые связаны.
  3. Всякий раз, когда вы найдете такую ​​группу из 3+ связей, разрешите ее, используя другой набор критериев на этот раз.
1 голос
/ 18 ноября 2011

Ваш Компаратор может иметь ссылку на Список команд.Затем он сможет сравнить два элемента даже в том случае, если вызывается процедура D.1.3.

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

Для k команд с равными очками создайте меньшую «таблицу лиг», размером k, которая будет заполняться точками и целями только на основе игр между этими командами.

Рекурсивно активировать процедуру ранжированияна этом меньшем столе.

Остановитесь, если нет команды, было сокращено между 2 рекурсивными вызовами [команды абсолютно равны] или когда был установлен полный рейтинг.Если список состоит из двух команд только с одинаковыми очками: применяются вторичные критерии.

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

Для этого вы можете использовать BogoSort .

  1. Сохранить все команды в списке.
  2. Создать валидатор, который определяет, будет ли List<Team>сортируется правильно в соответствии с процедурами.
  3. Тогда ваш код будет выглядеть следующим образом.

    void sort (Список команд) {while (! validator. valid (groups)) {{Collections),shuffle (команды);}}

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