У нас есть N
задача, которую нужно запланировать для обработки. Каждая задача состоит из двух частей, которые необходимо выполнить по порядку. Первый защищен мьютексом, поэтому только одна задача может выполнять эту часть одновременно. Вторая часть не имеет такого ограничения, и любое количество задач может выполнять это одновременно. Для задачи i
мы знаем, сколько времени нужно потратить на каждую часть, а именно m i для охраняемой части и a i для части, которая может выполняться параллельно. .
Проблема состоит в том, чтобы найти такую перестановку задач, чтобы время, необходимое для их выполнения, было минимальным.
Моя интуиция подсказывает, что это можно решить с помощью жадного алгоритма, планирование задач в порядке убывания i .
Например, учитывая задачи с: м 1 = 3, а 1 = 9 м 2 = 2, а 2 = 7 m 3 = 6, a 3 = 10
Оптимальным решением является перестановка 3, 1, 2, где задачи перекрываются следующим образом (плюсы - затраченное время в части 1, а минус - время, потраченное на часть 2):
3 ++++++---------- (6, 10)
1 +++--------- (3,9)
2 ++------- (2,7)
Total time needed: 6+3+2+7: 18
Любая другая перестановка дает более высокое общее необходимое время, например:
1 +++--------- (3,9)
2 ++------- (2,7)
3 ++++++---------- (6, 10)
Total time needed: 3+2+6+10: 21
Однако у меня возникают проблемы с доказательством что жадное решение оптимально. Есть идеи, как это сделать?