[알고리즘] 공간복잡도 - nokbeonlab/project_cubone GitHub Wiki

공간복잡도 의미

  • 얼마나 많은 저장 공간이 필요한지 측정하기 위한 척도
  • 프로그램을 실행 및 완료하는데 필요한 저장 공간의 양을 뜻함
  • 총 필요 저장 공간
    • 고정 공간 (알고리즘과 무관한 공간) : 코드 저장 공간, 단순 변수 및 상수
    • 가변 공간 (알고리즘 실행과 관련있는 공간) : 실행 중 동적으로 필요한 공간
    • S(P) = c + Sp(n)
      • c : 고정공간
      • Sp(n) : 가변 공간

공간 복잡도 계산

알고리즘에서 실제 사용되는 저장 공간을 계산한다.

공간복잡도 예제1

n! 팩토리얼을 반복문으로 구하기

int factorial(n) {
  
  int fac = 1;
  
  for (int i=0; i<n; i++) {
    fac = fac * i;
  }
  
  return fac;
}

위의 경우 n의 값에 상관없이 변수n, 변수 fac, 변수 i만 필요하다. 따라서 공간복잡도는 O(1)

공간복잡도 예제2

n! 팩토리얼을 재귀함수로 구하기

int factorial(n) {
  if (n > 1) {
    return n * factorial(n-1);
  } else {
    return 1;
  }
}

위의 경우 재귀함수를 사용하였으므로, n에 따라, 변수 n이 n개가 만들어지게 된다. 재귀함수로 n부터 1까지 호출하였을 경우 n부터 1까지 스택에 쌓이게 된다. 따라서 공간복잡도는 O(n)