구간 합(prefix sum)
배열이나 리스트에서 특정 구간의 합. 1차원 리스트에서 i 인덱스 부터 j 인덱스 까지의 합을 구하는 데 사용.
구간 합 알고리즘을 활용하려면 누적 합 배열을 알아야한다.
합 배열
만약 배열의 0부터 N까지의 합을 구한다면 시간 복잡도는 O(N)이다.
합 배열을 사용하면 O(1) 안에 해결할 수 있다.
S[3] = A[0] + A[1] + A[2] + A[3]
S[i] = A[0] + A[1] + A[2] + ... + A[i - 1] + A[i]
배열: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
위 배열의 S[5]를 구하면 1 + 2 + 3 + 4 + 5 + 6 = 21
배열의 합을 구하는 시간 복잡도는 O(N)이다.
만약 합을 반복하여 구해야한다면 O(N^2) 이상이 되는 경우가 생긴다.
누적 합 배열을 구하는 것도 O(N)의 시간 복잡도를 가진다.
하지만 누적합을 구해놓았기 때문에 부분 합을 구할 때는 O(1)의 시간 복잡도를 가진다.
합 배열 공식:
S[i] = S[i - 1] + A[i]
구간 합 공식:
S[j] - S[i - 1]
i에서 j까지의 구간 합
'파이썬 > 알고리즘' 카테고리의 다른 글
[자료구조] 파이썬 Queue 라이브러리 (2) | 2023.10.27 |
---|---|
[알고리즘] 자료구조, 배열과 리스트 (0) | 2023.10.21 |
댓글