알고리즘의 시간, 공간복잡도를 표기하는 방법
문제를 해결할 때 여러 방법이 있는데
여러가지 코드를 일반적으로 서로 비교하고 성능을 평가하기 위해 필요하다
시간 복잡도(Time Complexity)는 알고리즘의 절대적인 실행 시간을 나타내는 것이 아닌 알고리즘을
수행하는 데 연산들이 몇 번 이루어지는 지를 숫자로 표기
함수를 실행하는데 얼만큼이 시간이 소요되었는지 확인
function addUpTo(n) {
let total = 0;
for (let i = 1; i <= n; i++) {
total += i;
}
return total;
}
var t1 = performance.now();
addUpTo(1000000000);
var t2 = performance.now();
console.log(`Time Elapsed: ${(t2 - t1) / 1000} seconds.`)
function addUpTo(n) {
return n * (n + 1) / 2;
}
var time1 = performance.now();
addUpTo(1000000000);
var time2 = performance.now();
console.log(`Time Elapsed: ${(time2 - time1) / 1000} seconds.`)
위 두 함수는 같은 결과를 도출하지만 연산의 횟수에서 차이가 발생합니다
연산 개수를 정확하게 세는 것이 중요한 것이 아니라
연산이 어느정도로 발생하는지 추세를 확인하는 용도로 Big O 표기법을 사용합니다
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(2^n)등의 순서로 복잡하다
단순한 알고리즘이 가장 효율적인 알고리즘이라고 할 수 있다.
ex)
시간 복잡도 계산에 있어서 상수는 신경 쓰지않는다
2n, 500, 13n^2 를 비교하는 것이 아닌 단순화한 n, 1, n^2을 가지고 시간복잡도를 비교한다.