Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм жеребьевки 
:(
    Опции темы
BlackWolf
Дата 7.4.2003, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 2.4.2003

Репутация: нет
Всего: нет



Есть ли какой-то математический алгоритм проведения жеребьевок команд?

Например:
Есть n - команд,
все команды выступают на одном поле.
каждая команда должна провести встречи со всеми другими командами.
Задача:
Нужно найти порядок проведения встреч между командами таким образом чтобы ни одна команда не играла несколько игр подряд, т.е. чтобы между играми одной команды были паузы.

Достоверно известно:
Формула количества встреч: (n*(n-1)) / 2
Также проверил что для 4 команд рассчитать порядок без "передышек" нельзя.

Если кто может помочь очень прошу...
PM MAIL   Вверх
pike
Дата 8.4.2003, 09:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 4.3.2003

Репутация: нет
Всего: нет



Будем обозначать каждую игру числом из 0 и 1. Позиция цифры в числе - № команды.
Сначала распределяем пары 11 (рядом стоящие), потом 101 и т.д. Алгоритм довольно просто составляется. Единственная проблема (легко решаемая) - вставить
последнюю (10000001). А ее вставляем между первыми!
Смотри пример!

11000000
00110000
10000001
00001100
00000011
01100000
00011000
00000110
10100000
01010000
00101000
00010100
00001010
00000101
10010000
01001000
00100100
00010010
00001001
01000100
10001000
00100010
00010001
10000100
01000010
00100001
10000010
01000001

PM MAIL   Вверх
neutrino
Дата 9.4.2003, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Хмм... Я посмотрел решение выше, и подумал, может быть прокатит вот так: если у нас количество команд n, то за i возьмем номер одной команды, а за j другой, далее:

i=0, j=0;
n mod 2 = 0 => i=(i+1) mod n, j=(j+3) mod n
n mod 2 != 0 => i=(i+2) mod n, j=(j+4) mod n
игра(i, j)

Другими словами, если количество команд четное, то воспользоваться первой формулой, иначе второй.



--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
pike
Дата 9.4.2003, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 4.3.2003

Репутация: нет
Всего: нет



...нет, не получится i и j скорее всего совпадут. Или я что-то не понял?
PM MAIL   Вверх
neutrino
Дата 9.4.2003, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Приветствую!
Я написал программу и все заработало!!! Но! Потом посмотрел и оказалось, что я всего лишь повторил алгоритм господина pike smile.gif (правда, немного в другой форме - смешанной с моей идеей wink.gif )


Цитата

#include <iostream.h>
#define n 10

void main() {
  int i=0, j=0, k, m;
  int arr[n][n]={0};

  for (m=1; m<n; m++) {
    for (k=0; k<n; k++) {
      i=(i+1)%n;
      j=(i+m)%n;
      arr[i][j]++;
      cout<<endl<<i<<"-"<<j;
    }
  }
  cout<<endl;
  for (m=0; m<n; m++) {
    for (k=0; k<n; k++) {
      cout<<" "<<arr[m][k];
    }
    cout<<endl;
  }
}


Esli Вы запустите программу, то увидете сначала список турниров между номерами команд и матрицу количества игр. Ни одного повторения. Браво, pike !!!


--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
Lexa_ch
Дата 13.8.2005, 03:26 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А если требуется составить жеребьевку с учетом туров (т.е. составить расписание игр для какого-либо числа команд наподобие футбольных, хоккейных и т.д. расписаний). В каждом туре команда играет только один раз, число игр в туре = кол-во команд/2, число туров - кол-во команд-1 (для однокругового турнира). Если не тяжело, приведите код или подробный алгоритм.
  Вверх
Ostalex
Дата 8.9.2010, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 7.9.2010

Репутация: нет
Всего: нет



Цитата(Lexa_ch @ 13.8.2005,  03:26)
А если требуется составить жеребьевку с учетом туров (т.е. составить расписание игр для какого-либо числа команд наподобие футбольных, хоккейных и т.д. расписаний). В каждом туре команда играет только один раз, число игр в туре = кол-во команд/2, число туров - кол-во команд-1 (для однокругового турнира). Если не тяжело, приведите код или подробный алгоритм.

up.
то, что сейчас и мне нужно. пожалуйста, если кто может подскажите, не дайте потратить время на го*нокод)
PM MAIL   Вверх
nmn
Дата 8.9.2010, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



Цитата(Ostalex @  8.9.2010,  14:49 Найти цитируемый пост)
В каждом туре команда играет только один раз

а если число команд нечетное?
PM Skype   Вверх
Ostalex
Дата 9.9.2010, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 7.9.2010

Репутация: нет
Всего: нет



Цитата(nmn @ 8.9.2010,  22:05)
Цитата(Ostalex @  8.9.2010,  14:49 Найти цитируемый пост)
В каждом туре команда играет только один раз

а если число команд нечетное?

условие такое, что число команда всегда остается четным <4-16>
PM MAIL   Вверх
nmn
Дата 9.9.2010, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



не очень понял я всю схему похоже
вот смотрите: если в одном туре команда играет 1 раз, то можно их просто разбить на пары, тогда получим необходимое количество игр в туре и каждая команда будет играть только 1 раз, а что дальше?
PM Skype   Вверх
Ostalex
Дата 9.9.2010, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 7.9.2010

Репутация: нет
Всего: нет



вот пример:
http://www.fc-anji.ru/calendar.php
здесь команда <анжи> выступает то в гостях, то дома. получается почти "шахматка", т.к. не всегда совпадает. там есть ссылка и на весь календарь по всем командам. вот реализацию такого календаря какраз и нужно сделать. но пока без успехов
PM MAIL   Вверх
nmn
Дата 9.9.2010, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



не нашел ссылку на весь календарь, но там в туре всего лишь одна игра

вобщем расскажите подробно что надо
PM Skype   Вверх
Ostalex
Дата 11.9.2010, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 7.9.2010

Репутация: нет
Всего: нет



заюзал алгоритм, в котором есть ограничение: команд может быть только 2^n, но это компенсируется скоростью работы
PM MAIL   Вверх
nmn
Дата 11.9.2010, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



а можно ссылку?
PM Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0833 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.