본문 바로가기
the others/Algorithm

01 Big O Notation ( in JavaScript )

by ciocio 2021. 9. 3.

Udemy | JavaScript Algorithms and Data Structures Masterclass

 

01 Big O Notation

 

● Big O Notation 이란 ??

 

좋은 코드, 더 나은 코드란 무엇일까? 란 질문을 던졌을 때 우리는 3가지 정도를 고려해 볼 수 있다.

 

01  기존 코드보다 처리 속도가 더 빠른가?

02  기존 코드보다 메모리를 덜 잡아먹는가?

03  기존 코드보다 로직이 더 직관적인가?

 

1번 조건을 평가하기 위해 쓰이는 도구가 바로 Big O Notation이다.

"시간 복잡도"라고 부르기도 한다. 알고리즘의 수행 시간을 분석할 때 이 시간 복잡도를 사용한다.

수행 시간은 실행 환경에 따라 다르게 측정되므로, 기본 연산의 실행 횟수로 수행 시간을 평가한다.

 

Big O 표기법은 '최악의 경우'를 나타낼 때 쓰인다.

진짜 이것보다 더 걸리진 않아  -->  마지노선의 느낌이랄까.

그치만 최악의 경우로 알고리즘을 평가해야 부수적인 효과들을 줄일 수 있지 않을까. 생각

 

 

● 속도 비교 

보통은 O( ) 이렇게 소괄호 안에 표기를 다르게 해서 표현한다.

우리는 앞으로 최대한 O(1)에 가깝게...^^ 코드를 리팩토링해야한다 ^___^

그래서 이게 무슨 말이냐 ?? 코드를 통해 알아보자

 

● O(1)

 

매개변수 n의 크기에 상관없이 표현식의 개수만큼만 수행될 때 O(1). 제일 빠름 호도도도

 

 

● O(n)

 

매개 변수 n만큼 표현식이 수행될 때 O(n).

 

 

n의 크기가 엄청나게 작든, 엄청나게 크든 n만큼 수행된다는 표기법이기 때문에 2n이든 10n+200이든 O(n)이다.

 

 

● O(n^2)

 

매개변수 n에 n을 곱한만큼 표현식이 수행될 때 ;;;  제일 별로인 아이 O(n^2).

알고리즘 풀면서 이중 for문 많이 썼었는데 자제좀 !! ( 그렇지만 쓰일 때가 또 있답니다 하핳 )

 

 

02  Space Complexity

 

● Space Complexity란??

 

2번 조건을 평가하기 위해 쓰이는 아이다. 

Spcae Complexity는 보조 공간과 입력 공간을 합친 포괄적인 개념으로, 알고리즘에서 사용하는 메모리 양을 나타낸다.

( 메모리 양을 계산한다고 해서 하드웨어가 알고리즘을 수행할 때 쓰는 메모리를 계산한다는 뜻은 절대 아니다 ! )

( 그저 알고리즘 안에서 평가되는 것뿐 ...! ) 

 

보통 원시 타입의 값들은 일정한 메모리를 차지한다.

그런데 객체 타입의 아이들.

배열이나 객체 안에 값이 무한히 들어갈 수 있는 아이들은 메모리 양을 가늠할 수가 없지 !!! 문제가 되지 !!! 

 

 

● O(1)

 

리턴되는 값이 원시 타입 하나다 ! O(1) !

 

 

● O(n)

 

리턴되는 값이 배열이다. 객체였어도 O(n)이었다. 왜냐하면 조건문에 의해 값이 계속 i만큼 추가되거든 !!

반응형

댓글