카테고리 없음
[알고리즘] Big-O 표기법 : 공간복잡도
보간
2025. 4. 20. 22:22
이전 글에서는, 빅오 표기법의 시간 복잡도에 대해 설명했다.
알고리즘들이 얼마나 빨리 실행되는지, 그 시간을 검사하는 척도가 시간 복잡도(time complexity)이다.
이제는 시간 대신에 공간, 사용되는 메모리를 주목해보자.
공간 복잡도(auxiliary space complexity)
입력을 제외하고, 알고리즘 자체에서 요구되는 공간을 의미한다.
공간 복잡도 특징
- boolean, 숫자형, undefined, null은 js에서 변하지 않는 공간이다. 1과 1000이라고 해도, 차지하는 공간은 같다.
- 문자열은 O(n)공간이 필요하다. 문자열은 문자열의 길이에 따라 차지하는 공간이 달라지기 때문이다.
- 참조 타입, 배열, 객체도 대부분 O(n)공간이 필요하다.
Example.1
function sum(arr){
let total = 0; // (1)
for (let i = 0; i < arr.length; i++){ // (2)
total += arr[i];
}
return total;
}
1. total 변수에 한 공간이 할당된다.
2. 시간은 신경쓰지 않고, 이미 할당된 공간만 구한다. (let i = 0;)
arr.length가 아무리 커진다 해도, 숫자형 변수 i와 total의 공간은 변하지 않으므로 입력의 크기가 차지하는 공간과는 아무런 상관이 없다.
즉, O(1)의 공간 복잡도를 가진다.
Example.2
function double(arr){
let newArr = []; // (1)
for (let i = 0; i < arr.length; i++){ // (2)
newArr.push(2 * arr[i]); // (2)
}
return newArr;
}
1. newArr 변수에 배열공간이 할당된다.
2. 배열 변수를 사용했기 때문에 arr의 크기(n)에 따라 공간을 더욱 차지하게 된다.
따라서, O(n)의 공간 복잡도를 가진다.