Проблема:Максимальное количество задач, выполняемых параллельно?
Нам дано множество из п задач, каждая из которых имеет целое время начала и время окончания . Каково максимальное количество задач, выполняемых параллельно в в любое время?
Алгоритм должен работать в O (n log n) время.
Это назначение школы, так что я не нужен прямой ответ, но любые фрагменты кода приветствуются, пока они находятся в Java или Scala (уступке предполагается записать в Скале.)
Некоторые подсказки говорят, что я должен использовать очереди Priority. Я прочитал документацию, но я не уверен, как их использовать, поэтому любые фрагменты кода приветствуются.
Вводимые данные могут быть, например, Array[Pair[Int,Int]] = Array((1000,2000),(1500,2200))
и т. Д.
Я действительно пытаюсь установить порядок очередей приоритетов, поэтому, если ничего другого, я надеюсь, что кто-то может мне помочь в этом.
PS: Предполагается, что очередь приоритетов будет инициализирована PriorityQueue() (ord).
Редактировать: я придумал решение с использованием очередей приоритетов, но спасибо за все ответы. Вы, ребята, помогли мне разобраться в логике!
Предположим, что у вас есть задачи в двух списках (один отсортированный по времени начала, другой конец времени) и вы поддерживаете индексы для «текущего» задачи в каждой из них. Затем вы знаете время, когда происходит следующий старт и следующий конец. Поэтому вам просто нужно пройти через массивы одновременно и запомнить максимум. Вы могли бы сделать аналогию с двумя очередями с приоритетом, но это, вероятно, медленнее, чем отсортированные массивы (это просто предположение, вам нужно было бы точно убедиться). –
@NicoSchertler Если я пойду через отсортированные массивы одновременно, то алгоритм будет работать в линейном времени? – Jonatan
Да, но сначала вам нужно отсортировать. Следовательно, n log n. –