시간복잡도, 공간복잡도 - algorithm[0]

시간복잡도, 공간복잡도 - algorithm[0]

Tag
Algorithm
학교에서 자료구조 수업을 들은 기억이 있다.
알고리즘에서 쓰이는 개념들을 어느정도 배웠었지만, 코딩테스트 준비는 심심할때마다 하는 것이 좋을 듯 하여 문서화해서 공부해보려 한다.

시간복잡도와 공간복잡도

컴퓨터는 보통 1초에 3~5억개 정도의 연산을 처리할 수 있다고 한다.
물론 우리가 High Level Language로 개발을 하면 복잡한 연산도 하나로 생각할 수 있겠지만,
컴파일 된 이후 어셈블리 언어에서는 instruction이 몇개가 나오냐는 다를 수 있기 때문에 대충 그렇다고 생각만 하면 좋을 것 같다.
 
const func = (arr, n) => { let count = 0; for (let i = 0; i < n; i++) { if (!(arr[i] % 5)) { count++; } } return count; };
  1. count를 선언하고 0을 대입하는 과정에서 연산 1번
  1. i에 값이 대입되는 시점에 연산 1번
  1. 0부터 n-1 까지 n번에 걸쳐 i가 n보다 작은지 확인하고 i를 1 증가시키니 연산 3번
  1. 5로 나눈 나머지를 계산하고 0과 일치하는지 확인할 때 연산 2번
  1. 5의 배수라면 count를 증가시키니 연산 1번
  1. 마지막에 count를 반환할 때 연산 1번
⇒ 5n + 3번의 연산이 필요하다.
📌
적당히 n번의 연산이 필요하다 라고 생각하면 된다.
 

시간복잡도 (Time Complexity)

입력의 크기와 문제를 해결하는데 걸리는 시간의 상관관계
 

빅오표기법 (Big-O Notation)

주어진 식을 값이 가장 큰 대표항만 남겨서 나타내는 방법
O(N): 5N + 3, 2N + 10logN, 10N O(N^2): N^2 + 2N + 4, 6N^2 + 20N + 10logN
 
대표적인 시간복잡도의 그래프
대표적인 시간복잡도의 그래프
문제에서 요구하는 시간복잡도를 어느정도 파악할 수 있는 지표
문제에서 요구하는 시간복잡도를 어느정도 파악할 수 있는 지표
 

공간복잡도 (Space Complexity)

입력의 크기와 문제를 해결하는데 필요한 공간의 상관관계
 
크기 N짜리 2차원 배열 ⇒ O(N^2)
배열이 필요 없음 ⇒ O(1)
 

Reference