![]() 0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 3
|
|
Жеребьевка. Максимально развести участников соревнований от повторов10.09.2015, 19:07. Показов 2203. Ответов 3
Метки нет Все метки)
(
Здравствуйте!
Есть некий вид авиамодельного спорта - Воздушный бой радиоуправляемых моделей самолетов. Для автоматизации проведения стартов, мною написана программа, некий АРМ секретаря стартов.(Как конфигурация 1С, но, это не принципиально, на чем мне проще было написать, на том и сделал, сути задачи это не меняет) Программа охватывает практически все аспекты организации стартов, подсчета итогов соревнований и т.д... Самый сложный и проблемный модуль программы - это жеребьевка. В файле вложения, подробное описание задачи, с необходимыми для ее понимания примерами-таблицами. Сейчас у меня ее алгоритм решен путем простого перебора комбинаций, с проверкой всех необходимых условий. До определенного времени, когда количество участников соревнований было порядка 40 и более, проблем не возникало - комбинаций было огромное число, и решение обычно находилось. Сейчас, в связи с кризисом, средний размер этапа стал 20-25 человек. И в такой ситуации, перебором уже не получается, надо придумать что-то более "научное", но, у меня к сожалению знаний в этой области не хватает... Очень прошу знающих людей помочь, дать "толчек", направление построения алгоритма, а дальше, я уже напишу код... В кратце, условия задачи: Константы: 1. Количество стартовых позиций - всегда 4. 2. Количество туров - всегда 4. Переменные: 1. Количество участников: От 8 и до.... бесконечности ![]() 2. Количество команд: от 1 и до Количества участников(если вдруг все команды будут состоять из 1 участника, чего, конечно на практике не бывает, обычно от 2 до 6). 3. Количество членов команды: аналогично с предыдущим, от 1 и до Количества участников, если команда одна(чего на практике, конечно не бывает, так же от 2 и до 6-7). Переменные 2 и 3 можно представить как один массив, с размером равным количеству команд, а каждый элемент которого, это команда с размером равным количеству членов команды. Условия: 1. Каждый участник должен отлетать 4 тура, по одному разу в каждом туре на одной стартовой позиции. 2. В одном бою надо развести по максимуму членов одной команды. 3. В течении всех 4-х туров, надо минимизировать количество повторов пересечений участников между собой. На выходе, нужно получить таблицу боев, на все 4 тура, с распределением участников согласно условий... Первые два условия, у меня и так сейчас выполняются, а вот третье неудовлетворительно... Надо как-то подсчитать, на основе входных данных, возможный результат(минимально-возможное количество повторов), и естественно получить конечную цель - таблицу жеребьевки... В файле-вложения подробно все расписано, и приведены таблицы одного из реальных этапов, с интересными комбинациями переменных. Результат - 7 повторов. Я чувствую, что это не предел, если более грамотно подойти к решению этой задачи. Да... По ходу, сложная задача... Или не интересная? Или описал плохо? В файле, описание значительно подробнее, с "расшифровкой" терминов, объяснением что и почему так, а не иначе, с таблицами примеров на основе реальных соревнований... Но, количество просмотров файла, за почти сутки - 1... Напишите, хоть что не так? Может не в тему? Это не комбинаторика? Тогда, подскажите, что? В другом разделе задам вопрос...
0
|
10.09.2015, 19:07 | |
Ответы с готовыми решениями:
3
Задан список участников соревнований по плаванию Приложение для сортировки участников соревнований |
11.09.2015, 12:07 | |
Не по теме: Вроде все нормально, но слишком много в одном сообщении содержится. За 5 минут не разглядишь и не поймешь. Нужно иметь солидный запас времени, чтобы разобраться. Ответы по существу скорее всего на выходных появятся. Сам с работы, сейчас по своему разделу пробегусь и спать наверно рухну.
0
|
![]() 0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 3
|
|
13.09.2015, 13:07 [ТС] | |
Вот, во вложении - файлы экселя на текущий момент, что у меня получаются...
Хочется понять - это максимум, что возможно, или все-таки есть еще варианты? По моему алгоритму, очень сильная зависимость от начального расположения строк в исходной таблице... Связано с разным размером и составом команд... Пробовал делать сортировку по размеру команд, в обе стороны, и по убыванию, и по возрастанию - бесполезно... Только хуже, чем та комбинация, которая случайно согласно занятых мест выстроилась... При таком расположении - 5 повторов, при сортировках 10 и 7, в зависимости от направления сортировки... Уловить какую-то закономерность, мне не удалось, поэтому задал цикл из 30 повторов с перемешиванием исходного списка с помощью генератора случайных чисел, с запоминанием лучшего достигнутого результата и выводом потом, после завершения, его... В случае удачи - разведения без повторов, цикл естественно прерывается и выводится результат. Почему 30? Из соображений разумного времени выполнения... И так, это делается, минут около 5-ти, на моем компе, на ноутбуке, в поле, будет дольше... После отработки этого алгоритма, остается 4 повтора... Значит, все-таки есть комбинация исходных строк, лучше, чем изначальная... ГСЧ, в этом случае - не верное решение, надо как-то избежать его использования, так, как комбинации могут повторяться, тратя время в никуда... Перебрать все варианты перестановок исходного списка, с запоминанием лучшего результата - тоже не реально, при 25 участниках, как я понимаю(может ошибаюсь?), это будет 25 в 25 степени... Это на неделю работа даже на хорошем компе... Нужно какой-то другой принцип... За исходную таблицу взята таблица реальных соревнований, но на момент после их завершения. То-есть, участники в таблице выстроились согласно занятых мест. На самом деле, на момент проведения жеребьевки(после завершения регистрации участников), строки в исходной таблице располагаются так, как заносит их секретарь стартов - по мере того, как подходят участники на регистрацию. Чаще всего, регистрируют по командам - подходит один представитель команды, и регистрирует сразу всех ее членов. Естественно, все это в разнобой, никак не связано ни с какими условиями.
0
|
![]() 0 / 0 / 0
Регистрация: 10.09.2015
Сообщений: 3
|
|
15.09.2015, 18:13 [ТС] | |
Ответов по существу нет... И скорее всего не будет. Я теперь сам понимаю, что задача слишком сложная... Только чтобы человеку далекому от темы "въехать" в смысл, уже надо времени уйму потратить.
Попробуем по другому... Разобьем изначальную задачу на несколько, более простых, а уже потом, поэтапно, попробуем объединить в одну:-) Уберем "Команды", как очень усложняющее решение условие. Первое условие, развести на четыре позиции в четырех турах N - участников. Тут все просто - решение имеется от N равном восемь и более. Для начала будем считать, что N всегда кратно четырем, чтобы на данном этапе не заморачиваться со стыковыми боями. Во вложении - простейший пример такой таблички. Собственно, вопросы: 1. как переставить внутри туров участников, не выходя за рамки каждого тура и только внутри "своей" колонки, чтобы минимизировать повторы участников друг с другом? 2. сколько при N = восьми, может по минимуму остаться повторов? 3. Чему по минимуму должно равняться N (и соответственно, количество боев в туре - N / 4), чтобы развелось вообще без повторов - чтобы каждый участник в одном бою(строке таблицы), пересекся с каждым соперником не более одного раза за все четыре тура ?
0
|
15.09.2015, 18:13 | ||||||
Помогаю со студенческими работами здесь
4
Вывести результаты трёх лучших участников соревнований и их фамилии Известны результаты каждого из участников соревнований по лыжным гонкам Структуры:Задан список участников соревнований по плаванию и их результаты Стуктуры.Есть информация о N участников спортивных соревнований по пятиборью
Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Работа с объемным 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
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
|