big O

big O표기법이란

  • 여러가지 코드를 일반적으로 서로 비교하고 성능을 평가하는 방법. 한 마디로 알고리즘의 효율성을 표기해주는 표기법

  • Big-O(또는 Big-Oh) 알고리즘의 시간 복잡도를 나타내는 표기법

코드를 짤 때 중요한 점

  • faster?

  • less memory-intensive?

  • more readable?

누적된  구하기

// 느린ver
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.`);
// Time Elapsed: 0 seconds.

// 빠른 ver
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.`);
// Time Elapsed: 0.9598000000119209 seconds.

빠른 ver은 addUpTo(n) 의 n에 어떤 숫자가 오더라도 3번의 연산만 하면 된다.

(n * (n + 1)) / 2; : * + /

그렇기 때문에 연산 시간은 매번 거의 같다.

빠른ver O(1)

느린ver O(n)


ex) 1

10n

O(n) 연산은 countUpAndDown(n) 의 n값에 바인딩된다.

ex) 2

여기서의 big O는 O(n^2)


big O 표현 단순화하기

O(2n) → O(n)

O(500) → O(1)

O(13n^2) → O(n^2)

  • O(500)은 연산 갯수가 어떤 상황에든 500개가 있다는 뜻


공간복잡도

ex 1)

total 변수에 0이라는 숫자 할당

i변수에 0이라는 숫자 할당

그러므로 O(1)공간

ex 2)

arr 의 길이가 50이면 newArr에 50의 길이만큼 리턴한다.

차지하는 공간은 입력된 배열의 크기와 비례해서 커진다. 그러므로 O(n) 공간

ex 3)

Last updated