
공간 복잡도(Space Complexity)는 알고리즘이 실행되는 동안 얼마나 많은 메모리를 사용하는지를 측정하는 지표입니다. 시간 복잡도와 함께 알고리즘의 효율성을 평가하는 데 중요한 역할을 하며, 특히 메모리 제약이 있는 환경에서 최적화가 필요할 때 고려됩니다.
공간 복잡도는 알고리즘이 입력 크기 𝑛에 따라 얼마나 많은 메모리를 사용하는지를 나타냅니다. 여기에는 입력 데이터의 저장 공간뿐만 아니라, 변수, 배열, 재귀 호출 스택 등 추가적으로 필요한 메모리 공간도 포함됩니다.
공간 복잡도는 다음 두 가지 주요 요소로 구성됩니다:
고정 공간 (Fixed Part): 입력 크기와 상관없이 항상 일정한 메모리 공간을 사용하는 부분입니다.
가변 공간 (Variable Part): 입력 크기에 따라 달라지는 메모리 공간입니다.
공간 복잡도도 시간 복잡도와 마찬가지로 Big-O 표기법으로 표현합니다.
| Big-O 표기 | 의미 | 예시 |
|---|---|---|
| O(1) | 상수 공간: 입력 크기와 관계없이 일정한 메모리 사용 | 변수 하나 사용, 단순 연산 |
| O(n) | 선형 공간: 입력 크기에 비례한 메모리 사용 | 배열, 리스트 |
| O(n^2) | 이차 공간: 입력 크기의 제곱에 비례한 메모리 사용 | 2차원 배열 |
int a = 10;
int b = 20;
int sum = a + b;
int[] arr = new int[n];
void recursiveFunction(int n) {
if (n == 0) return;
recursiveFunction(n - 1);
}
공간 복잡도와 시간 복잡도는 종종 트레이드오프 관계에 있습니다. 즉, 하나를 최적화하면 다른 하나가 증가할 수 있습니다.
| 상황 | 설명 | 예시 |
|---|---|---|
| 시간 최적화 | 더 많은 메모리를 사용하여 실행 시간을 줄임 | 캐싱, 메모이제이션 |
| 공간 최적화 | 적은 메모리를 사용하여 실행하지만 시간이 더 걸림 | In-place 알고리즘 |