Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Math: sliding, window

Как оптимизировать алгоритм скользящего среднего до линейной сложности?

Вопрос проверяет понимание устранения избыточных вычислений и перехода от наивных алгоритмов к оптимальным.

Короткий ответ

Алгоритм оптимизируют, если перестают пересчитывать сумму окна целиком. Вместо этого поддерживают текущую сумму и обновляют её при сдвиге окна. Такой подход позволяет обрабатывать каждый элемент один раз. В результате временная сложность становится линейной — O(n).

Длинный ответ

Оптимизация скользящего среднего основана на повторном использовании уже вычисленных значений.

Определение

Линейная сложность O(n) означает, что каждый элемент входных данных обрабатывается не более одного раза.

Идея оптимизации

При сдвиге окна:

  1. один элемент вычитается из суммы,

  2. один элемент добавляется в сумму,

  3. среднее считается за константное время.

Оптимизированный подход

window_sum = sum(data[:k])

for i in range(k, len(data)):
    avg = window_sum / k
    window_sum += data[i]
    window_sum -= data[i - k]

Комментарии опущены для краткости: важен сам принцип обновления суммы.

Анализ сложности

  • инициализация окна: O(k),

  • основной цикл: O(n),

  • итоговая сложность: O(n).

Практический эффект

  • подходит для больших потоков данных,

  • используется в аналитике и мониторинге,

  • хорошо масштабируется.

Вывод

Линейная сложность достигается за счёт хранения промежуточного состояния и отказа от полного пересчёта окна.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Math

    Math

Ключевые слова

#sliding

#window

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.