Size: a a a

2020 March 21

Д🍋

Димон 🍋 in pro.algorithms
Не было сказано/не уточнил
источник

MB

Mikail Bagishov in pro.algorithms
Димон 🍋
Имел ввиду оптимальный алгоритм вставки нового процесса для выполнения
Все еще непонятно, что именно мы оптимизируем или какие у нас ограничения
источник

MB

Mikail Bagishov in pro.algorithms
Мы должны добавить отрезок заданной длины так, чтобы все еще процессор мог их выполнить?
источник

Д🍋

Димон 🍋 in pro.algorithms
Mikail Bagishov
Мы должны добавить отрезок заданной длины так, чтобы все еще процессор мог их выполнить?
Да все верно
источник

Д🍋

Димон 🍋 in pro.algorithms
Не только длины а скорее в заданном интервале времени
источник

MB

Mikail Bagishov in pro.algorithms
Димон 🍋
Не только длины а скорее в заданном интервале времени
Но при этом ограничение на длину есть?
источник

MB

Mikail Bagishov in pro.algorithms
Иначе выгодно вставлять отрезок длины 0
источник

MB

Mikail Bagishov in pro.algorithms
То есть мы хотим понять: есть ли на интервале (a,b) точка, покрытая менее чем k отрезками из набора. Давай каждый отрезок разделим на два события: начало и конец.
События отсортируем по координате и будем по ним идти, поддерживая счетчик открытых отрезков (видим событие начала - делаем +1; видим событин конца - делаем -1).

Пусть мы для какой-то точки обработали все события начала отрезка, относящиеся к ней.
Если счетчик > K, то текущий набор уже некорректен.
Если счетчик <K,  и эта точка лежит в допустимом интервале, то мы победили: вставим новый нулевой отрезок сюда
источник

Д🍋

Димон 🍋 in pro.algorithms
Mikail Bagishov
Иначе выгодно вставлять отрезок длины 0
Нет конечно)
Ну отрезок ненулевой длины разумеется
Поступает на вход функции в виде [время_начала, время_конца]
Я извиняюсь
Наверное не очень сформулировал
>[время_начала, время_конца]

Проверить, можно ли выполнить такой процесс и если да то добавить в очередь
источник

p

pirat in pro.algorithms
Наверное, это просто до
источник

p

pirat in pro.algorithms
Тогда
источник

MB

Mikail Bagishov in pro.algorithms
Описанный выше алгоритм позволяет нам выделить набор отрезков, в которые процессор будет загружен на максимум.
Когда мы увеличили счетчик, и он стал равен K, начинается как раз "критический период". Когда мы его уменьшили, и он был K, период закончился.
источник

MB

Mikail Bagishov in pro.algorithms
Осталось проверить, что ни один из таких критических отрезков не пересекается с новым.
источник

Д🍋

Димон 🍋 in pro.algorithms
pirat
Наверное, это просто до
ДП в смысле? Не очень понял
источник

MB

Mikail Bagishov in pro.algorithms
Дерево отрезков
источник

MB

Mikail Bagishov in pro.algorithms
Но оно тут не нужно
источник

Д🍋

Димон 🍋 in pro.algorithms
Ну все равно почитаю
Не разбирал эту тему
источник

MB

Mikail Bagishov in pro.algorithms
Если вкратце - это штука, которая выполняет операции на целом отрезее массива, но довольно быстро.
источник

MB

Mikail Bagishov in pro.algorithms
Например, тут ее можно так воткнуть:
Для каждого имеющегося отрезка [l,r] сделаем +1ко всем числам на отрезке [l,r].
Теперь отрезок [a,b] можно вставить, если на нем все числа меньше K.
источник

Д🍋

Димон 🍋 in pro.algorithms
Mikail Bagishov
То есть мы хотим понять: есть ли на интервале (a,b) точка, покрытая менее чем k отрезками из набора. Давай каждый отрезок разделим на два события: начало и конец.
События отсортируем по координате и будем по ним идти, поддерживая счетчик открытых отрезков (видим событие начала - делаем +1; видим событин конца - делаем -1).

Пусть мы для какой-то точки обработали все события начала отрезка, относящиеся к ней.
Если счетчик > K, то текущий набор уже некорректен.
Если счетчик <K,  и эта точка лежит в допустимом интервале, то мы победили: вставим новый нулевой отрезок сюда
>есть ли на интервале (a,b) точка

все так
источник