티스토리 뷰
Prefix Sums
array의 어떠한 slice라도 sum을 빠르게 계산할 수 있도록 해주는 방법이다. 예를 들어 어떤 배열의 인덱스 i부터 j까지의 합을 구하려고 할 때 for문을 써서 일일이 접근해서 더하면 O(N)
이지만, 이 방법을 사용하면 O(1)
이다.
def prefix_sums(A):
n = len(A)
P = [0] * (n + 1)
for i in range(1, n + 1):
P[i] = P[i - 1] + A[i - 1]
return P
점화식: P[i] = P[i - 1] + A[i - 1]
A라는 배열이 있을 때, A 배열의 sum의 누적값을 계산해서 P에 넣는 것이다. P[i] = P[i - 1] + A[i - 1]
으로 계산되고, P[i]는 A 배열의 i번째 원소(인덱스로는 i-1)까지의 합이라고 할 수 있다.
앞에서부터 누적값을 계산하므로 Prefix sums라는 이름이 붙은 것이고, 반대로 뒤에서부터 누적값을 계산하는 경우는 Suffix sums라고 한다. Prefix sums든, Suffix sums든 둘 다 P 배열을 완성시키고나면 array의 slice의 sum을 O(1)로 계산할 수 있다는 장점이 있다.
예를 들어 A 배열의 5번째 값부터 10번째 값까지의 sum을 구하고 싶다면 P[10] - P[4] 를 계산하면 알 수 있다. P를 계산하는 데에는 O(n)의 시간 복잡도가 들고, 이 후 array sum을 계산할 때에는 O(1) 이므로 m 번을 계산하면 총 시간복잡도는 O(n + m)이다. 반면 이 방법을 사용하지 않고 일일이 계산할 경우, O(n * m) 만큼의 시간복잡도가 든다.
Ref
'Data Structure & Algorithm' 카테고리의 다른 글
[Codility] GenomicRangeQuery (0) | 2021.03.02 |
---|---|
Dynamic Programming - 1 (0) | 2021.01.31 |
Rotation point 찾기 문제(ft. Binary Search) (0) | 2019.12.03 |
퀵 정렬(Quick sort) (0) | 2019.12.02 |
선택 정렬(Selection Sort) (0) | 2019.11.30 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- JavaScript
- Conflict
- til
- Redux
- react
- 제네릭스
- Data Structure
- c언어
- Session
- this
- linkedlist
- CSS
- Prefix Sums
- GIT
- Java
- rxjs
- 알고리즘
- jQuery
- 자바
- youtube data api
- 리덕스
- oracle
- useEffect
- 깃
- 포인터 변수
- package.json
- SQL
- getter
- 개발 공부
- 인스턴스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함