Sliding window — это «скользящее окно»: приём, когда ты смотришь не на все данные сразу, а на ограниченный кусок, который постепенно сдвигается вперёд.
Главная идея:
есть окно размера N,
оно захватывает часть последовательности,
потом сдвигается на один или несколько шагов,
и ты пересчитываешь результат не с нуля, а обновляешь его.
Например, есть массив:
[1, 3, 2, 5, 4, 6]
Окно размера 3:
[1, 3, 2] 5 4 6
1 [3, 2, 5] 4 6
1 3 [2, 5, 4] 6
1 3 2 [5, 4, 6]
То есть окно как бы едет по данным.
Sliding window часто используют, когда нужно найти что-то в последовательности:
- максимальную сумму подмассива длины
k; - самую длинную подстроку без повторяющихся символов;
- среднее значение за последние N элементов;
- количество событий за последние N секунд.
Например: найти максимальную сумму трёх подряд идущих чисел.
Наивно можно каждый раз считать сумму заново:
1+3+2 = 6
3+2+5 = 10
2+5+4 = 11
5+4+6 = 15
Но sliding window делает умнее:
первая сумма = 1 + 3 + 2 = 6
сдвиг:
убираем 1
добавляем 5
новая сумма = 6 - 1 + 5 = 10
То есть не пересчитываем всё окно заново, а просто:
currentSum = currentSum - leftElement + newRightElement
Вот в этом смысл: экономия вычислений за счёт обновления состояния окна.
В сетях
В сетях sliding window — это механизм передачи данных, например в TCP.
Смысл такой: отправитель может послать не один пакет и ждать подтверждения, а сразу несколько пакетов в пределах разрешённого окна.
Например:
можно отправить пакеты 1, 2, 3, 4
ждём подтверждения
пришло подтверждение за 1
окно сдвигается
теперь можно отправить 5
То есть окно показывает:
сколько данных можно отправить, не дожидаясь подтверждения каждого отдельного пакета.
Это нужно для баланса между скоростью и контролем перегрузки.
В rate limiting
Sliding window часто используют для ограничения запросов.
Например:
не больше 100 запросов за последние 60 секунд.
Тут важно именно за последние 60 секунд, а не «с 12:00:00 до 12:01:00».
Окно всё время двигается вместе со временем:
текущее время: 12:00:45
окно: 11:59:45 — 12:00:45
текущее время: 12:00:46
окно: 11:59:46 — 12:00:46
Это более честный лимит, чем fixed window, потому что нельзя сделать 100 запросов в конце одной минуты и ещё 100 в начале следующей.
В контексте LLM / ChatGPT
Там sliding window может означать ограниченный контекст модели.
Например, модель может «видеть» только последние N токенов. Когда диалог становится длиннее, старые части начинают выпадать из активного окна.
Условно:
[старый контекст][средний контекст][новый контекст]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
активное окно
То есть модель не держит всю бесконечную историю буквально в одном активном поле, а работает с ограниченным окном контекста, которое сдвигается по мере продолжения разговора.
Коротко
Sliding window — это техника работы с последовательностью, где:
берём ограниченный фрагмент данных
двигаем его по последовательности
обновляем результат постепенно
не пересчитываем всё с нуля
Самая простая формула смысла:
новое окно = старое окно - то, что ушло слева + то, что пришло справа
По-русски нормально сказать:
«скользящее окно», «механизм скользящего окна», «алгоритм с двумя указателями / sliding window» — в зависимости от контекста.