알고리즘/기본 알고리즘 개념정리
Prefix Sum
도툐리
2023. 3. 12. 23:57
1. 구간 합 VS 부분 합
- Prefix sum(구간 합) : 구간 합이란 수들의 나열에서 특정 구간의 합을 의미한다. 구간 합 알고리즘은 보통 1차원배열에서 i~k 인덱스 사이의 값들의 합을 구하는데 사용한다.
- Partial sum(부분 합) : 부분 합이란 구간 합과 달리 처음부터 특정인덱스까지의 합을 의미한다. 즉 0~k 인덱스 사이의 값들의 합을 의미한다.
2. 구간 합 알고리즘
- 반복문을 사용하여 i~k사이의 값을 더하는 알고리즘의 시간복잡도는 O(n)이다.
- 이 같은 알고리즘을 사용할 경우 n의 값이 클 경우 이를 정해진 시간 내에 해결할 수 없다.
- 하지만 구간 합 알고리즘을 사용하여 구간합을 구하는 경우 O(1)의 성능을 갖는다.
- 구간 합 알고리즘은 현재 진행단계까지의 인덱스까지 값의 합을 저장하는 sum[]배열을 사용한다.
- j번째 바로 앞까지의 총합에 arr[j] 값을 더하면 j번째까지의 총합을 의미하므로 sum[j] = sum[j-1] + arr[j] 로 표현할 수 있다.
⇒ 포인트는 memoization 인듯
1차원 배열
arr을 순차 탐색하면서 sum 배열을 만들어주면 된다.
2차원 배열
2차원 배열도 같은 방식이다. arr을 순차 탐색하면서, sum배열을 만들어주면 된다.
Sum[i][j]는 arr[0][0]부터 arr[i-1][j-1]까지의 합이다.
sum 배열 만드는 공식
sumArray[i][j]=arr[i-1][j-1]+sumArray[i-1][j]+sumArray[i][j-1]-sumArray[i-1][j-1]
2차원 누적합 구하는 문제 풀때 꼭 한번 읽어봐야할 글
누적 합(prefix sum), 2차원 누적합(prefix sum of matrix) with java
목차 ※ 배열의 인덱스는 알다시피 0부터 시작한다. 예를들어 N개의 데이터가 있다면 0번 인덱스부터 N-1번 인덱스까지 존재한다. 다만 구현에 있어 누적 합을 구현할 때는 인덱스 1번부터 사용하
nahwasa.com
그 외 참고자료
[알고리즘] 구간 합 (Prefix Sum)
1. 구간 합 VS 부분 합 - Prefix sum(구간 합) : 구간 합이란 수들의 나열에서 특정 구간의 합을 의미한다. 구간 합 알고리즘은 보통 1차원배열에서 i~k 인덱스 사이의 값들의 합을 구하는데 사용한다. -
hroad.tistory.com
[알고리즘]Prefix sum 알고리즘이란?
누적합(Prefix sum)란? 나열된 수의 누적된 합을 말한다. 배열의 일부 구간에서 대한 합을 매우 빠르게 구할 수 있게 해준다. N개의 원소로 이루어진 배열이 주어졌을 때 반복문을 통해 부분 배열의
san-tiger.tistory.com