Вопрос проверяет знание ключевого приёма, лежащего в основе эффективных оконных алгоритмов.
Используется подход с накопленной суммой окна. При каждом сдвиге из суммы вычитается элемент, вышедший из окна, и добавляется новый. Среднее затем считается за константное время. Все операции выполняются за O(1) на шаг.
Обновление среднего за O(1) — ключевое свойство эффективного скользящего окна.
Обновление за O(1) — это выполнение фиксированного числа операций независимо от размера окна.
Алгоритм хранит:
текущую сумму окна,
размер окна k.
При каждом сдвиге:
window_sum -= outgoing_element
window_sum += incoming_element
average = window_sum / k
window_sum += data[right]
window_sum -= data[left]
average = window_sum / k
нет вложенных циклов,
нет повторных суммирований,
минимальное число операций.
обработка потоков данных,
временные ряды,
real-time аналитика.
Подход с накопленной суммой позволяет обновлять среднее при сдвиге окна за O(1) и является стандартным решением для оконных алгоритмов.