ОК, вот сделка. У меня есть набор линейных функций, * * + b.Найти минимальные функции
Моя цель - ответить на следующий вопрос/вопрос: Какова минимальная функция при x = q?
Например: Если у меня есть функции f (x) = 3 * x + 2, g (x) = 5 * x - 6 и h (x) = 2 * x + 1, я отвечу, например:
при х = 4, функция Н
при х = 2, функция г
при х = 1, функция г
Моя идея выглядит следующим образом:
Сортировать функции по коэффициенту х, в порядке убывания.
Сортировать запросы в порядке возрастания
Избавиться от параллельных функций, сохранить те, с наименьшим постоянным слагаемым (например: если я f (х) = 2 * х + 4 и г (x) = 2 * x + 2, f (x) никогда не будет меньше g (x), поэтому мне не нужно f (x)).
Прямо сейчас я нахожусь на интервале от -inf некоторого вещественного числа, назовем его w1, и я знаю, что на этом отрезке функция с наивысшим коэффициентом линейного является наименьшим
Найти w1, находя наименьшая x1-я f (x1) = g (x1), где f - моя текущая функция, и g проходит через все другие функции с меньшим линейным коэффициентом, w1 = x1
Повторяйте до тех пор, пока мой запрос находится в интервале (-inf, w1): вывести текущую функцию, а затем перейти к следующему запросу.
Если у меня все еще есть запросы, на которые нужно ответить, пусть текущая функция будет той, которая пересекает мою текущую текущую функцию в x = w1, а вместо -inf put w1 повторите те же шаги.
Однако моя реализация или идея не достаточно быстро. Есть ли что-то, чего я не заметил, что может ускорить мою программу?
Заранее спасибо.
Не могли бы вы немного объяснить, что вы подразумеваете под «каждым интервалом»? –
@RobertBadea, конечно. – goat
Я считаю, что построение этих интервалов будет стоить «N^2», если вы проверяете каждое пересечение. Каково отношение функций к запросам? Это даст представление о том, какой предварительный расчет является разумным. –