Есть массив отсчётов, последовательность вещественных чисел
, ему соответствует массив времён
, нужно эти отсчёты как-то сгладить. Один из способов состоит в следующем: нарисуем пары точек
на координатной плоскости
, рассмотрим их как как точки на графике некоторой (неизвестной нам) функции
, соединим эти точки последовательно ломаной (то есть просто берётся кусочно линейная интерполяция). за пределы отрезка
продолжим функцию константами: влево константой
, вправо
. Получившуюся кусочно-линейную функцию обозначим через
. Получившийся график не очень красив, хочется его сгладить, для этого зададимся некоторым числом
, и определим функцию:
Задача состоит в том, чтобы (эффективно) посчитать массив значений
.
Наивный алгоритм имеет асимптотику
, если немного улучшить его бинарным поиском, можно добиться асимптотики
.
Набросок решения за
.
Положим
.
Рассмотрим интеграл кусочно-линейной функции по некоторому отрезку
, интеграл это площадь под графиком, значит это сумма площадей трапеций. Он распадается на две части, первая - между двумя точками из сетки
, и два маленьких кусочка по краям (первая часть это часть между крайними точками сетки, которые попадают в отрезок).
Интеграл по двум маленьким кусочкам считается за
, а интеграл между узлами сетки можно подсчитать за
, если предподсчитать кумулятивные суммы
, тогда интеграл между узлами сетки
выразится как
(могу написать выкладку, как это получилось, подробно, если кратко - это получится, если в выражении для интеграла привести подобные члены по
).
Массив кумулятивных сумм считается за один проход, то есть
, потом за второй проход считаем интеграл.
Пока не ясен один момент - как определять
и
для данных
, если делать это бинарным поиском, то итоговая асимптотика получится
. Скорее всего их можно определять адаптивно, используя информацию на предыдущих шагах, но я пока не придумал, как именно.
Вопрос - можно ли решить эту задачу за
? И как её правильно решать? Если пытаться закодить вышеописанный алгоритм, получается какой-то монстр (походу я слишком криво его реализую). Возможно я изобретаю велосипед, и эта задача имеет решение каким-нибудь известным алгоритмом.