자료구조 & 알고리즘

구간 합

kyoulho 2023. 12. 6. 16:59

구간 합은 합 배열을 이용하여 시간 복잡도를 더 줄이기 위해사용하는 특수한 목적의 알고리즘이다.

구간 합 알고리즘을 활용하려면 합 배열을 구해야 한다.

합 배열을 미리 구해 놓으면 기존 배열의 일정 범위의 합을 구하는 시간 복잡도가 O(N)에서 O(1)로 감소한다.

 

1차원 배열의 합 배열

1차원 합 배열 S 정의

S [i] = A [0] + A [1] +... + A [i-1] + A [i]

 

합 배열 S를 만드는 공식

S [i] = S [i-1] + A [i]

 

i-1에서 알 수 있듯 합 배열은 기존 배열보다 하나 크게 생성해서 1번 인덱스부터 값이 들어간다.

 

i에서 j까지의 합을 구하는 공식

S [j] - S [i-1]

 

1에서 3까지의 구간합 S [3] - S [0]

5에서 5까지의 구간합 S [5] - S [4]

 

 

2차원 배열의 합 배열

참고하면 이해하기 쉽다.

https://www.youtube.com/watch?v=KT864Aa3zE0

 

2차원 구간 합 배열 D [X][Y] 정의

D [X][Y] = 원본 배열의 (0,0)부터 (X, Y)까지의 사각형 영역 안에 있는 수의 합

 

2차원 합 배열 D를 만드는 공식

D [X][Y] = D [X][Y-1] + D [X-1][Y] - D [X-1][Y-1] + A [X][Y]

구하려는 위치 =  좌측 + 위 - 좌측 위 + 원본 배열의 수

 

(X1, Y1)에서 (X1, Y2)까지의 합을 구하는 공식

D [X2][Y2] - D [X-1][Y2] - D [X2][Y1-1] + D [X1-1][Y1-1]

구하려는 공간의 합 = 구하려는 공간까지의 전체 합 - 윗 공간의 합 - 좌측 공간의 합 + 윗 공간과 좌측 공간의 교집합

 

'자료구조 & 알고리즘' 카테고리의 다른 글

정렬  (0) 2023.12.11
재귀 알고리즘의 비재귀적 표현  (0) 2023.12.10
유클리드 호제법(Euclidean algorithm)  (0) 2023.12.09
경우의 수(조합, 순열)  (1) 2023.12.07
시간 복잡도  (1) 2023.12.06