-
Notifications
You must be signed in to change notification settings - Fork 0
Sliding Window Algorithm
Taehyeon Kim edited this page Jan 13, 2023
·
6 revisions
- N개의 원소를 가지는 배열
- W의 크기를 가지는 창문(윈도우, 특정 구간...)
- 이 때, N과 W는 상수(고정 값)
- 고정된 사이즈의 윈도우를 이동시키면서 윈도우 내에 있는 데이터를 이용해서 문제를 풀이하는 알고리즘
- 교집합의 정보를 공유하고, 차이가 나는 양쪽 끝의 원소만 갱신하는 방법
- 이렇게 되면 구간합을 구할 때, 최초에만 O(W)의 시간복잡도가 걸리고 이후에는 양쪽 끝 원소만 갱신하면 되기 때문에 O(1)의 시간복잡도가 걸림
- 배열의 일정 범위의 값을 비교할 때 사용하면 매우 유용함
- 투 포인터(Two pointer)알고리즘과 연동해서 많이 사용
- 투 포인터와의 차이점은 구간의 넓이가 항상 고정되어 있다는 것
- 구간합
- Anagram
- 구간 최소값
윈도우를 옮길때마다 구간 합을 구하려고 하면 W(윈도우의 크기)만큼 원소를 모두 더하는 작업을 일반적으로 떠올리게 된다. 이렇게 되면 N개의 원소를 가진 배열에서 W크기의 구간합을 모두 구하려고 한다면 O(N * W)의 시간 복잡도를 가진다. 하지만 슬라이딩 윈도우 알고리즘의 아이디어를 적용하게 된다면 윈도우를 옮길때마다 O(1)에 구간 합을 구할 수 있기 때문에 최종적으로 O(N)의 시간 복잡도가 걸리게 된다.