Это вариация популярной проблемы El Goog.Scheduling, Greedy algorithm
Рассмотрите следующую проблему с планированием: есть n заданий, i = 1..n. Существует 1 суперкомпьютер и неограниченные ПК. Каждое задание необходимо предварительно обработать суперкомпьютером сначала, а затем обработать на ПК. Время, требуемое для работы i на суперкомпьютере, равно si, i = 1..n. Для ПК это pi, i = 1..n. ПК могут работать параллельно, но суперкомпьютер может работать только по одной задаче за раз. Создается расписание S, согласно которому суперкомпьютер будет обрабатывать задания. Время завершения Ti (S) в расписании S задается часовым временем, на котором задание заканчивается на ПК. Мы хотим найти график, который минимизирует Maxi [Ti (s)] (для чтения: нам нужно найти расписание, которое минимизирует наивысшее время окончания). Предлагается следующий жадный алгоритм: упорядочить задания в порядке убывания времени обработки на ПК. Сложность этого алгоритма O (nlogn). Либо докажите, что этот алгоритм создает оптимальное решение, либо обеспечивает встречный пример, чтобы показать, что он этого не делает.
Мое решение (не уверен, что это правильно): Я не думаю, что важно, как мы заказываем работу. Самое высокое время окончания будет по-прежнему одинаковым. Рассмотрим этот пример времени обработки на ПК для списка заданий: < 5, 7, 17, 8, 10>. Это даст время окончания, как < 5, 12, 29, 37, 47>. В соответствии с алгоритмом мы отсортируем список как < 17, 10, 8, 7, 5> и дадим время окончания < 17, 27, 35, 42, 47>. Поэтому, в то время как технически, жадный алгоритм дает оптимальный порядок, для этого требуется nlogn time, а просто повторение списка заданий дает нам тот же результат.
Если кто-то думает, что жадный алгоритм будет работать лучше или что мой подход испорчен, я буду благодарен за ваши мысли. Спасибо!
Update: Я думаю, что, возможно, есть ответ. Время, затраченное суперкомпьютером, не имеет значения. Ключом здесь является то, что ПК работают в параллельно. Из исходного примера pi = < 5, 7, 17, 8, 10>, добавим si = < 8, 5, 1, 12, 9>. Теперь в неустановленном порядке по умолчанию у нас будет время обработки < 13, 20, (8 + 5 + 1 + 17 =) 31, 34, 45>. Так что 45 - это время завершения. Предположим, что отсортированный порядок, в котором pi уменьшаются. Выход: < 18, 20, 30, 34, 40>. [Отсортированный вход: pi = < 17, 10, 8, 7, 5>, si = < 1, 9, 12, 5, 8>].
Вот пример, который, вероятно, очищает все это: si = < 17, 10>, pi = < 10, 17>. Вывод в несортированном случае (который также сортируется в порядке убывания si) будет < 27, 44>. Сортировка на основе pi, входной сигнал: si = < 10, 17>, pi = < 17, 10>. Выход: < 27, 37>. Поскольку ПК работают параллельно, вы хотите отправить самое короткое задание последним.
Как вы полностью оправдываете игнорирование значений pi в своем решении? –
@AliFerhat: Я думаю, что тот же аргумент справедлив и для суперкомпьютера? Изменение порядка pi, похоже, не влияет на время завершения последней работы, но я могу ошибаться. – user183037