본문 바로가기
TYLER SONG2026
블로그 목록
CS학습

공간 복잡도: 알고리즘 실행에 필요한 메모리 공간의 양을 분석하는 방법

공간 복잡도는 알고리즘이 사용하는 메모리 크기를 나타낸다. 알고리즘의 효율성을 평가하는 중요한 지표이며, 특히 대규모 데이터를 처리할 때 성능에 큰 영향을 미친다. 입력 크기에 따라 메모리 사용량이 어떻게 증가하는지 이해하는 것이 핵심이다.

송민성3분 읽기

1. 개념

공간 복잡도(Space Complexity)는 알고리즘이 문제를 해결하기 위해 사용하는 메모리 공간의 양을 입력 크기에 대한 함수로 표현한 것이다. 시간 복잡도와 마찬가지로 점근 표기법(Asymptotic Notation)을 사용하여 최악의 경우(Worst Case)를 기준으로 분석한다. 주로 추가 공간(Auxiliary Space)을 의미하며, 알고리즘이 입력 외에 사용하는 메모리 양을 나타낸다.

2. 왜 사용하는가

공간 복잡도 분석은 다음과 같은 이유로 중요하다.

  • 성능 예측: 알고리즘의 공간 복잡도를 알면 입력 데이터 크기가 커짐에 따라 메모리 사용량이 어떻게 증가하는지 예측할 수 있다.
  • 자원 효율성: 제한된 메모리 환경에서 실행되는 알고리즘의 경우, 공간 복잡도가 성능에 직접적인 영향을 미친다.
  • 최적화: 공간 복잡도가 높은 알고리즘은 메모리 사용량을 줄이기 위한 최적화가 필요할 수 있다.

3. 동작 원리

공간 복잡도는 알고리즘이 사용하는 변수, 자료구조, 함수 호출 스택 등의 메모리 사용량을 고려하여 결정된다.

  • 상수 공간(Constant Space) - O(1): 입력 크기에 관계없이 일정한 크기의 메모리를 사용한다. 예를 들어, 한두 개의 변수를 사용하는 알고리즘이다.
  • 선형 공간(Linear Space) - O(n): 입력 크기에 비례하여 메모리 사용량이 증가한다. 예를 들어, 입력 크기 n의 배열을 복사하는 알고리즘이다.
  • 2차 공간(Quadratic Space) - O(n^2): 입력 크기의 제곱에 비례하여 메모리 사용량이 증가한다. 예를 들어, 2차원 배열을 사용하는 알고리즘이다.

4. 코드 예제

다음은 Python으로 구현된 간단한 리스트 합산 함수의 공간 복잡도 분석 예제이다.

python
def sum_list(numbers): """ 리스트의 모든 숫자를 더하는 함수 """ total = 0 # 상수 공간 O(1) for number in numbers: # 입력 크기 n에 비례하는 반복 total += number return total

위 코드에서 total 변수는 상수 공간을 사용하며, numbers 리스트를 반복하는 동안 추가적인 메모리를 사용하지 않으므로 공간 복잡도는 O(1)이다.

5. 시간 복잡도 또는 성능 특성

공간 복잡도는 시간 복잡도와 함께 알고리즘의 성능을 평가하는 중요한 지표이다. 시간 복잡도가 낮더라도 공간 복잡도가 높으면 메모리 부족으로 인해 성능이 저하될 수 있다. 특히, 대규모 데이터를 처리하는 알고리즘의 경우, 시간 복잡도와 공간 복잡도를 모두 고려하여 최적의 알고리즘을 선택해야 한다.

6. 실무 사용 사례

  • 이미지 처리: 대용량 이미지 데이터를 처리하는 알고리즘은 메모리 사용량을 최소화해야 한다.
  • 데이터베이스 쿼리: 복잡한 조인을 사용하는 쿼리는 많은 메모리를 사용할 수 있으므로, 인덱싱과 최적화를 통해 공간 복잡도를 줄여야 한다.
  • 머신 러닝: 모델의 크기가 커질수록 메모리 사용량이 증가하므로, 모델 압축 및 최적화 기법을 사용하여 공간 복잡도를 줄여야 한다.

7. 주의할 점

  • 재귀 호출: 재귀 호출은 함수 호출 스택을 사용하여 메모리를 사용하므로, 깊은 재귀 호출은 스택 오버플로우를 발생시킬 수 있다.
  • 자료구조 선택: 사용하는 자료구조의 공간 복잡도를 고려해야 한다. 예를 들어, 해시 테이블은 빠른 검색 속도를 제공하지만, 많은 메모리를 사용할 수 있다.
  • 불필요한 데이터 저장: 불필요한 데이터를 저장하지 않도록 코드를 최적화해야 한다.

8. 핵심 정리

공간 복잡도는 알고리즘의 효율성을 평가하는 중요한 지표이다. 알고리즘의 공간 복잡도를 분석하고 최적화함으로써, 메모리 사용량을 줄이고 성능을 향상시킬 수 있다. 시간 복잡도와 함께 고려하여 최적의 알고리즘을 선택하는 것이 중요하다.

© 2026 Tyler Song