Форум программистов, компьютерный форум, киберфорум
Комбинаторика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
 Аватар для MWW
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 3

Жеребьевка. Максимально развести участников соревнований от повторов

10.09.2015, 19:07. Показов 2203. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Есть некий вид авиамодельного спорта - Воздушный бой радиоуправляемых моделей самолетов.
Для автоматизации проведения стартов, мною написана программа, некий АРМ секретаря стартов.(Как конфигурация 1С, но, это не принципиально, на чем мне проще было написать, на том и сделал, сути задачи это не меняет)
Программа охватывает практически все аспекты организации стартов, подсчета итогов соревнований и т.д...
Самый сложный и проблемный модуль программы - это жеребьевка.
В файле вложения, подробное описание задачи, с необходимыми для ее понимания примерами-таблицами.
Сейчас у меня ее алгоритм решен путем простого перебора комбинаций, с проверкой всех необходимых условий. До определенного времени, когда количество участников соревнований было порядка 40 и более, проблем не возникало - комбинаций было огромное число, и решение обычно находилось. Сейчас, в связи с кризисом, средний размер этапа стал 20-25 человек. И в такой ситуации, перебором уже не получается, надо придумать что-то более "научное", но, у меня к сожалению знаний в этой области не хватает... Очень прошу знающих людей помочь, дать "толчек", направление построения алгоритма, а дальше, я уже напишу код...
В кратце, условия задачи:
Константы:
1. Количество стартовых позиций - всегда 4.
2. Количество туров - всегда 4.
Переменные:
1. Количество участников: От 8 и до.... бесконечности, на практике, 15 - 35.
2. Количество команд: от 1 и до Количества участников(если вдруг все команды будут состоять из 1 участника, чего, конечно на практике не бывает, обычно от 2 до 6).
3. Количество членов команды: аналогично с предыдущим, от 1 и до Количества участников, если команда одна(чего на практике, конечно не бывает, так же от 2 и до 6-7).
Переменные 2 и 3 можно представить как один массив, с размером равным количеству команд, а каждый элемент которого, это команда с размером равным количеству членов команды.
Условия:
1. Каждый участник должен отлетать 4 тура, по одному разу в каждом туре на одной стартовой позиции.
2. В одном бою надо развести по максимуму членов одной команды.
3. В течении всех 4-х туров, надо минимизировать количество повторов пересечений участников между собой.

На выходе, нужно получить таблицу боев, на все 4 тура, с распределением участников согласно условий...
Первые два условия, у меня и так сейчас выполняются, а вот третье неудовлетворительно...
Надо как-то подсчитать, на основе входных данных, возможный результат(минимально-возможное количество повторов), и естественно получить конечную цель - таблицу жеребьевки...
В файле-вложения подробно все расписано, и приведены таблицы одного из реальных этапов, с интересными комбинациями переменных. Результат - 7 повторов. Я чувствую, что это не предел, если более грамотно подойти к решению этой задачи.

Да... По ходу, сложная задача... Или не интересная? Или описал плохо?
В файле, описание значительно подробнее, с "расшифровкой" терминов, объяснением что и почему так, а не иначе, с таблицами примеров на основе реальных соревнований...
Но, количество просмотров файла, за почти сутки - 1...
Напишите, хоть что не так? Может не в тему? Это не комбинаторика? Тогда, подскажите, что? В другом разделе задам вопрос...
Вложения
Тип файла: docx Описание жеребьевки RCCR.docx (32.1 Кб, 12 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.09.2015, 19:07
Ответы с готовыми решениями:

Задан список участников соревнований по плаванию и их результаты. Расположите результаты и фамилии участников в соответствии с занятым местом
Задан список участников соревнований по плаванию и их результаты. Расположите результаты и фамилии участников в соответствии с занятым...

Задан список участников соревнований по плаванию
Кому не сложно, прошу подсказать. Заранее всем спасибо Задан список участников соревнований по плаванию и их результаты. Расположите...

Приложение для сортировки участников соревнований
Здравствуйте. Изучаю Java около года, но так и не удается получить реального опыта. Пришла в голову мысли построить проект для...

3
11.09.2015, 12:07

Не по теме:

Цитата Сообщение от MWW Посмотреть сообщение
По ходу, сложная задача... Или не интересная? Или описал плохо?
Вроде все нормально, но слишком много в одном сообщении содержится. За 5 минут не разглядишь и не поймешь. Нужно иметь солидный запас времени, чтобы разобраться. Ответы по существу скорее всего на выходных появятся. Сам с работы, сейчас по своему разделу пробегусь и спать наверно рухну.

0
 Аватар для MWW
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 3
13.09.2015, 13:07  [ТС]
Вот, во вложении - файлы экселя на текущий момент, что у меня получаются...
Хочется понять - это максимум, что возможно, или все-таки есть еще варианты?

По моему алгоритму, очень сильная зависимость от начального расположения строк в исходной таблице...
Связано с разным размером и составом команд... Пробовал делать сортировку по размеру команд, в обе стороны, и по убыванию, и по возрастанию - бесполезно... Только хуже, чем та комбинация, которая случайно согласно занятых мест выстроилась... При таком расположении - 5 повторов, при сортировках 10 и 7, в зависимости от направления сортировки... Уловить какую-то закономерность, мне не удалось, поэтому задал цикл из 30 повторов с перемешиванием исходного списка с помощью генератора случайных чисел, с запоминанием лучшего достигнутого результата и выводом потом, после завершения, его... В случае удачи - разведения без повторов, цикл естественно прерывается и выводится результат. Почему 30? Из соображений разумного времени выполнения... И так, это делается, минут около 5-ти, на моем
компе, на ноутбуке, в поле, будет дольше... После отработки этого алгоритма, остается 4 повтора... Значит, все-таки есть комбинация исходных строк, лучше, чем изначальная...
ГСЧ, в этом случае - не верное решение, надо как-то избежать его использования, так, как комбинации могут повторяться, тратя время в никуда... Перебрать все варианты перестановок исходного списка, с запоминанием лучшего результата - тоже не реально, при 25 участниках, как я понимаю(может ошибаюсь?), это будет 25 в 25 степени... Это на неделю работа
даже на хорошем компе... Нужно какой-то другой принцип...
Цитата Сообщение от MWW Посмотреть сообщение
Только хуже, чем та комбинация, которая случайно согласно занятых
мест выстроилась...
За исходную таблицу взята таблица реальных соревнований, но на момент после их завершения. То-есть, участники в таблице выстроились согласно занятых мест. На самом деле, на момент проведения жеребьевки(после завершения регистрации участников), строки в исходной таблице располагаются так, как заносит их секретарь стартов - по мере того, как подходят участники на регистрацию. Чаще всего, регистрируют по командам - подходит один представитель команды, и регистрирует сразу всех ее членов. Естественно, все это в разнобой, никак не связано ни с какими условиями.
Вложения
Тип файла: xlsx ТабЖеребьевки.xlsx (11.4 Кб, 15 просмотров)
Тип файла: xlsx ТабПовторов.xlsx (8.5 Кб, 9 просмотров)
0
 Аватар для MWW
0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 3
15.09.2015, 18:13  [ТС]
Цитата Сообщение от cmath Посмотреть сообщение
Ответы по существу скорее всего на выходных появятся.
Ответов по существу нет... И скорее всего не будет. Я теперь сам понимаю, что задача слишком сложная... Только чтобы человеку далекому от темы "въехать" в смысл, уже надо времени уйму потратить.

Попробуем по другому...
Разобьем изначальную задачу на несколько, более простых, а уже потом, поэтапно, попробуем объединить в одну:-)
Уберем "Команды", как очень усложняющее решение условие.
Первое условие, развести на четыре позиции в четырех турах N - участников. Тут все просто - решение имеется от N равном восемь и более. Для начала будем считать, что N всегда кратно четырем, чтобы на данном этапе не заморачиваться со стыковыми боями. Во вложении - простейший пример такой таблички.

Собственно, вопросы:
1. как переставить внутри туров участников, не выходя за рамки каждого тура и только внутри "своей" колонки, чтобы минимизировать повторы участников друг с другом?
2. сколько при N = восьми, может по минимуму остаться повторов?
3. Чему по минимуму должно равняться N (и соответственно, количество боев в туре - N / 4), чтобы развелось вообще без повторов - чтобы каждый участник в одном бою(строке таблицы), пересекся с каждым соперником не более одного раза за все четыре тура ?
Вложения
Тип файла: xlsx МинимальныйЭтап.xlsx (9.9 Кб, 11 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.09.2015, 18:13
Помогаю со студенческими работами здесь

Вывести результаты трёх лучших участников соревнований и их фамилии
В ЭВМ поступают фамилии и результаты N участников соревнований по плаванию и их фамилии. Вывести результаты трех лучших участников и их...

Известны результаты каждого из участников соревнований по лыжным гонкам
Известны результаты каждого из участников соревнований по лыжным гонкам (время, затраченное на прохождение дистанции гонки). Спортсмены...

Структуры:Задан список участников соревнований по плаванию и их результаты
Задан список участников соревнований по плаванию и их результаты. Расположите результаты и фамилии участников в соответствии с занятым...

Стуктуры.Есть информация о N участников спортивных соревнований по пятиборью
Есть информация о N участников спортивных соревнований по пятиборью. О каждом участнике известно: фамилия, место, занятое по каждому из...

Вывести результаты трёх лучших участников соревнований и их фамилии
В ЭВМ поступают фамилии и результаты N участников соревнований по плаванию и их фамилии. Вывести результаты трех лучших участников и их...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Работа с объемным DOM в javascript
Htext 04.04.2025
Сегодня прочитал статью тут о расходах памяти в JS, ее утечках и т. п. И вот что вспомнил из своей недавней практики. Может, кому пригодится. Хотя, в той статье об этом тоже есть. Дело в том, что я. . .
Оптимизация производительности Node.js с помощью кластеризации
run.dev 04.04.2025
Масштабирование приложений для обработки тысяч и миллионов запросов — обыденная задача для многих команд. Node. js, благодаря своей асинхронной событийно-ориентированной архитектуре, стал популярной. . .
Управление зависимостями в Python с Poetry
py-thonny 04.04.2025
Стандартный инструмент для установки пакетов в Python - pip - прекрасно справляется с базовыми сценариями: установил пакет командой pip install и используешь его. Но что произойдёт, когда разные. . .
Мониторинг с Prometheus в PHP
Jason-Webb 04.04.2025
Prometheus выделяется среди других систем мониторинга своим подходом к сбору и хранению метрик. В отличие от New Relic, который использует агентный подход и отправляет данные во внешнее хранилище,. . .
Пакет Context в Golang: Управление потоками и ресурсами
golander 04.04.2025
Работа с горутинами в Go часто напоминает управление непослушными детьми - они разбегаются кто куда, делают что хотят и не всегда завершаются вовремя. К счастью, в Go 1. 7 появился пакет context,. . .
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
std::mutex в C++: Советы и примеры использования
bytestream 03.04.2025
std::mutex - это механизм взаимного исключения, который гарантирует, что критический участок кода выполняется только одним потоком в каждый момент времени. Это простое, но могущественное средство. . .
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер