자바스크립트를 활용한 스터디 진행예정

시간복합성 / 공간복합성 / 빅오 표기법 / 알고리즘 / 로그 / 컴퓨터공학 / 수학적

빅오란?

프로그래밍과 cs에 대한 이해를 돕기위한 빅오에 대한 개념과 이해가 필요하다. 빅오에 필요성으로는 여러가지 코드를 일반적으로 서로 비교하고 성능을 평가하는 방법이다.

How can we detrmine which one is the "best"?

현실적으로 코드를 작성할 때 루프를 사용하거나 배열을 사용하거나 혹은 내장되어있는 메소드를 사용하는 등 다양한 접급 방법이 있을 것이다. 이러한 다양한 방법에 분류를 할 수 있다는 것이 빅오에 큰 장점이다. 빅오형식으로. 실제로 수많은 데이터와 이벤트들을 function으로 코드를 작성할때 성능은 필수적으로 다루어야할 것이다. 단순히 에러만을 찾는 것이아닌 시간이 오래 걸리는 문제들도 생각해봐야하는 관점이라는 것이다.

// 첫번째
function addUpTo(n) {
  let total = 0;
  for (let i = 1; i <= n; i++) {
    total += i;
  }
  //   루프가 끝나면 total의 값이 돌아옴
  return total;
}
console.log(addUpTo(6));

// 두번째
function addUpTo2(n) {
  return (n * (n + 1)) / 2;
}
console.log(addUpTo2(6));

이 자연수를 n만큼 더하는 코드에는 for로 더하는 코드와 수학적 공식으로 표현 코드가 있다. 하지만 어떤게 좋은 코드인지는 생각해봐야할 부분들이 많다.

Faster? Less memory-intensive? More readable?

정답은 상황마다 다르다. 속도, 메모리 측면, 가독성 모두 조율이 필요하다. 여기서 어떻게 해결방안을 가질 수 있는냐가 관건이다.

let t1 = performance.now();
addUpTo(1000000000);
let t2 = performance.now();
console.log(`소요시간 : ${(t2 - t1) / 1000} 초.`);

"소요시간 : 1.136652668000199 초"
연산에 시간이 소요되는 시간이라고 볼 수 있다.(루프 상 n번의 연산)

시간적인 측면에는 이런 코드로 시간을 확인할 수 있다. 하지만 이렇게 수동적인 방법으로 무엇이 효율적인를 논하는 것은 그렇게 좋은 방법은 아니다.

우리는 전체적인 추세를 보는 것이 중요하다!

Find out big picture

0개의 댓글