Это мой первый эксперимент с проблемой асимптотической сложности, хотя я доволен ответами полностью в коде, если они приходят с объяснением сложности времени.
У меня следующая проблема.
Рассмотрим задачи T_1, ... T_n и процы M_1, ..., M_m. Каждая задача занимает определенное количество времени для выполнения в зависимости от процедур.
Каждое задание также стоит определенной суммы для выполнения в зависимости от процедур.
Задачи должны выполняться в строгом порядке (их нельзя выполнять параллельно), и для изменения процедуры требуется время. Задание не может быть перемещено из одного процесса в другой после его запуска.
Наконец, каждое задание должно быть выполнено к определенному времени.
задание
Задача состоит в том, чтобы дать алгоритм (или некоторый код), который с учетом пяти таблиц в приведенной выше форме минимизирует общую стоимость выполнения всех задач, при этом гарантируя, что все задачи будут выполнены в установленные сроки. Если это невозможно, мы просто сообщаем, что это невозможно сделать.
Гол
Вы должны дать большую сложность своего решения в терминах переменных n, m и d, где d - последний срок. В вашей большой сложности не должно быть лишних констант. Таким образом, O (n / 1000) должно быть записано как O (n), например.
Ваша оценка рассчитывается просто путем установки n = 100, m = 100 и d = 1000 в вашей заявленной сложности. Вы хотите наименьшее возможное количество баллов.
прерыватель связи
В случае ничьей победит первый ответ.
добавленные заметки
log
во время сложности ответа будет принята основа 2.
табло
- 10 ^ 202 от KSFT ( Python ) Сначала отправлено, поэтому получает награду.
- 10 ^ 202 от Доминика Мюллера ( Скала )
O(m ^ n)
. Ни один алгоритм не будет «быстрее» этого. Обрезка, основанная на максимальном требуемом времени или стоимости, не меняет сложности алгоритма и не требует затрат в долларах и времени, следовательноd
, не является элементом сложности.Ответы:
Оценка: 10 ^ 202
Я бы хотел, чтобы у нас была поддержка LaTeX сейчас ...
Поскольку никто не ответил, я подумал, что попробую, хотя это не очень эффективно. Хотя я не уверен, что это за большой смысл.
Я думаю, что это работает. По крайней мере, это относится к единственному тестовому сообщению.
Он принимает ввод, как в вопросе, за исключением того, что без меток номера машины или задачи и с точками с запятой вместо разрывов строк.
источник
Проверить все - Scala
Ориентировочный балл: 2m ^ n
Я начинаю с каждой машины и перебираю все задачи для создания всех перестановок в задачах с разными машинами, которые соответствуют срокам. То есть, если бы все было вовремя, я бы получил 9 возможных путей с 2 машинами и 3 задачами. (m ^ n) После этого я выбираю путь с наименьшими затратами.
Ввод структурирован следующим образом (-> объясняет части и поэтому не должен вводиться):
И вот код:
У меня также была идея начать со спины. Так как вы всегда можете выбрать машину с наименьшей стоимостью, если время меньше, то разница от предыдущего срока до нового. Но это не уменьшит максимальное время выполнения, если задача с лучшими затратами займет больше времени, чем установлен последний срок.
Обновить
======
Вот еще одна установка. время:
Стоимость:
время переключения:
Стоимость переключения:
сроки:
Как вход в мою программу:
У этого есть два решения: время: 18, стоимость: 15, путь: список (M_1, M_1, M_1, M_2) время: 18, стоимость: 15, путь: список (M_2, M_1, M_1, M_1)
Что поднимает вопрос, как это должно быть обработано. Должны ли все быть напечатаны или только один? А что если время будет другим? Является ли тот, который имеет наименьшую стоимость и не пропущен крайний срок, достаточно ли, или он также должен быть с наименьшим временем?
источник
O(m^n)
время. Итерации по каждой машине для всех задач требуютO(n*m^n)
времени.O(n*m^n)
перебирает каждую задачу для каждого из путей? И перебирать каждую машину для каждой задачи что-то вродеO(n*m)
.O(n*m^n)
».O(m*m^n)=O(m^n+1)
. Это все тот же счет, хотя.