Я пытаюсь решить вариацию задачи планирования интервалов: учитывая набор из n заданий, каждое из которых требует 1 единицу обработки до конечной sh, и у каждого задания есть интервал доступности (время начала и время окончания между которыми оно может быть выполнено), для которого оно доступно, найдите максимальное количество заданий, которое можно запланировать.
Решением, которое я пробовал, была сортировка заданий и всегда выбор из них с самым ранним временем окончания доступность при удалении заданий, которые недоступны после каждой итерации.
while jobs are not empty:
remove jobs that are not available
find the job with earliest end_availability_time
execute the job
Я использую очередь с приоритетами, в которую я вставляю все задания в начале, а не сортирую. Временная сложность этого решения составляет O(nlogn)
(каждое задание вставляется один раз в приоритетную очередь и извлекается один раз из приоритетной очереди).
Существует ли оптимальный способ решения этой проблемы?