2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 генерация таблицы игр чемпионата
Сообщение15.04.2008, 21:17 


15/04/08
10
здраствуйте...

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

например, может получиться такая таблица
1 2 3 4 5 6
------------------
1 | 2 1 6 5 4 3
2 | 3 5 1 6 2 4
3 | 6 4 5 2 3 1
4 | 4 3 2 1 6 5
5 | 5 6 4 3 1 2

то есть в результате каждая команда сыграет с каждой по одному разу...

на самом деле вся задача сводится к построению матрицы размером (N-1)*N таким образом, чтобы числа в столбцах и строках не повторялись, а-ля магический квадрат, но плюс к этому, добавляется ещё одно условие - каждому элементу k, находящемуся на позиции [i, j] должен соответствовать элемент j, находящийся на позиции [i, k], чтобы каманды "играли друг с другом" в каждом туре..

я написал алгоритм, который действует следующим образом:
1. обнуляем матрицу

2. проходим всю матрицу по строкам

3. если элемент [i, j] равен нулю, то составляем список команд, с которыми эта команда ещё не играла(то есть этого элемента не было в столбце j) и которые ещё не играли в этом туре(строка i).

4. случайным образом выбираем из этого списка одну команду k и записываем число k ячейку [i, j] и соответственно j в ячейку [i, k]

вроде бы всё просто, однако порой вознивает ситуация, когда "не из чего выбирать", то есть те команды, с которыми текущая команда ещё не играла, уже участвуют в данном туре

И вот тут то я и застрял... мне кажется что должно быть какоето решение проще и "красивее" из комбинаторики или теории множеств, но, увы, я в этом не силён... может мне кто подскажет как это сделать?

 Профиль  
                  
 
 
Сообщение15.04.2008, 22:15 


04/10/05
272
ВМиК МГУ
такая таблица пойдёт?

N, N-1, N-2, ...., 1
N-1, N-2, ..., 1, N
N-2, N-3, ... ,1, N, N-1
.....

 Профиль  
                  
 
 
Сообщение15.04.2008, 22:45 


15/04/08
10
мне ж надо чтобы таблица случайным образом формировалась...

 Профиль  
                  
 
 
Сообщение15.04.2008, 22:49 
Заслуженный участник
Аватара пользователя


18/05/06
13437
с Территории
Ну так и перенумеруйте потом всех случайным образом. Или ещё строки попереставлять?

 Профиль  
                  
 
 
Сообщение15.04.2008, 23:08 


15/04/08
10
помоему это не совсем то... во-первых у меня в j-ом столбце не может быть числа j.. во-вторых, как я писал в самом начале, если в клетке [i, j] стоит число k, то в клетке [i, k] должно быть число j... слишком "простой" метод помоему..

 Профиль  
                  
 
 
Сообщение15.04.2008, 23:21 


01/04/08
12
Санкт-Петербург
а как именно случайно должна быть устроена таблица? все таблицы с такими свойствами равновероятны?
Мне кажется удачным такой способ: построить таблицу, где строки и стобцы команды, а на пересечении стоит номер тура. Теперь требования простые: матрица симметричная, на главной диагонали у нее ничего нет(ставь нули), в строке - какая-то перестановка чисел от 1 до 4(в столбце, соответственно, отраженная). как моделировать такую таблицу вроде понятно. как из нее пересчитывать то, что Вам нужно, вроде тоже. или я все не так понял?

 Профиль  
                  
 
 
Сообщение15.04.2008, 23:47 


15/04/08
10
в этом случае в каждой клетке нужно будет искать общие "свободные" туры, то есть туры, в которых пересекающиеся команды ещё не играли и выбрать случайным образом один из этих туров... но может возникнуть ситуация, когда таких туров нету, то есть ситуация аналогичная моему варианту

 Профиль  
                  
 
 
Сообщение15.04.2008, 23:59 


01/04/08
12
Санкт-Петербург
krinart
Либо я чего-то не понимаю, либо Вы. То, что матрица симметричная не спасет? Заполнив, скажем, первую строку, мы автоматически заполним и первый столбец. таким образом при построении первой строки у нас 4! возможностей, при заполнении второй - 3!, третьей -2! и четвертая заполнится единственным образом. Если я что-то не то говорю, приведите, пожалуйста пример, когда на каком-то шаге у нас кроллизия.
Сомнительно только, будут ли итоговые матрицы распределены так, как Вам надо, но это уже другой вопрос

 Профиль  
                  
 
 
Сообщение16.04.2008, 00:16 


15/04/08
10
я, к сожалению, в теории не силён, могу только программы писать, но кажется Вы меня убедили что это рабочий вариант... я попробую и отчитаюсь... огромное спасибо

 Профиль  
                  
 
 
Сообщение16.04.2008, 00:18 


01/04/08
12
Санкт-Петербург
пожалуйста. Я старался:)

 Профиль  
                  
 
 
Сообщение16.04.2008, 00:40 


04/10/05
272
ВМиК МГУ
krinart писал(а):
помоему это не совсем то... во-первых у меня в j-ом столбце не может быть числа j.. во-вторых, как я писал в самом начале, если в клетке [i, j] стоит число k, то в клетке [i, k] должно быть число j... слишком "простой" метод помоему..

Кстати, такое возможно только при чётных N

 Профиль  
                  
 
 
Сообщение16.04.2008, 00:57 


15/04/08
10
написал я программу, в результате всё равно вышла та ошибка про которую я говорил.. приведу полученную таблицу


0 1 3 2 5 0
1 0 2 3 4 0
3 2 0 4 1 0
2 3 4 0 0 0
5 4 1 0 0 0
0 0 0 0 0 0

ошибка произошла на пересечении команд 5(строка) и 4(столбец), когда у них нету общего свободного тура

Добавлено спустя 2 минуты 21 секунду:

маткиб писал(а):
Кстати, такое возможно только при чётных N


естественно, мне другого и не нужно

 Профиль  
                  
 
 
Сообщение16.04.2008, 01:07 


01/04/08
12
Санкт-Петербург
krinart
последний столбец - он вообще не нужен, верно?
Мне думается, что если команд 5, то тура номер 5 нет.
тогда в первой строчке - баг
там должно быть 01324. и дальше поехало. так чтоя настаиваю на своем:)

 Профиль  
                  
 
 
Сообщение16.04.2008, 01:14 


15/04/08
10
команд 6.. состветсвенно туров 5, в таблице нет ячейки со значением больше 5

Добавлено спустя 47 секунд:

последняя строка не успела заполнится так как произошла ошибка

Добавлено спустя 5 минут 31 секунду:

а так как не заполнилась строка, поэтому и столбец пуст

 Профиль  
                  
 
 
Сообщение16.04.2008, 01:55 
Заслуженный участник


18/03/07
1068
krinart, Вам это подойдёт?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 22 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group