본문 바로가기

개발공부

시간복잡성(Time Complexity)

시간복잡성이란??

시간복잡성이란 어떤 문제를 해결하는데 걸리는 시간과 입력의 함수관계를 의미한다.

이때 실행시간을 기준으로 잡지 않고 연산의 횟수로 기준을 잡는데 그 이유는 실행시간은 플랫폼마다 다른 실행시간이 나오기 때문이다.

 

시간복잡성 표기법

시간복잡성의 표기는 다음과 같이 3가지가 있다.

  • 최상의 경우 : 오메가 표기법 (Big-Ω Notation)
  • 평균의 경우 : 세타 표기법 (Big-θ Notation)
  • 최악의 경우 : 빅오 표기법 (Big-O Notation)

이 중에서 가장 많이 쓰이는 것은 빅오 표기법이다.

빅오 표기법은 만약 0(log n) O(n) O(n^2) 세가지 경우가 나올 때 가장 느린 속도를 대표로 하는 것이다.

 

Big-O의 표기의 종류

Big-O에서의 시간복잡성 종류는 다음과 같다.

  • O(1) – 상수 시간(constant time) : 문제를 해결하는데 오직 한 단계만 처리하는 가장 빠른 시간복잡도이다.
    ex)배열에서 특정인덱스의 값 읽기
  • O(log n) – 로그 시간(logarithmic time) : 문제를 해결하는데 필요한 단계들이 연산마다 특정 요인에 의해 줄어듬.
    ex)이진트리에서 특정 값 찾기
  • O(n) – 직선적 시간(liner time) : 문제를 해결하기 위한 단계의 수와 입력값 n이 1:1 관계를 가짐.
    ex)일반적인 반복문이나 이를 이용한 배열, 링크드리스트의 특정 값 찾기
  • O(n log n) -선형로그 시간(linerithmic time) : 문제를 해결하기 위한 단계의 수가 N*(log2N) 번만큼의 수행시간을 가진다.
  •  O(n^2) –다항 시간(quadratic time) : 문제를 해결하기 위한 단계의 수는 입력값 n의 제곱
    ex)이중for문일 경우를 예로 들 수 있다.
  • O(C^n) – 지수 시간(exponential time) : 문제를 해결하기 위한 단계의 수는 주어진 상수값 C 의 n 제곱으로 최악의 시간복잡도이다.

 

자료구조별 시간복잡도

각 자료구조별 시간복잡도를 쉽게 볼 수 있는 표가 있다.

 

시간복잡도를 왜 사용할까??

시간복잡도를 왜 사용하는지에 대한 나의 생각은 바로 적절한 상황에 맞는 자료구조를 이용하기 위해서다.

각 자료구조마다 빠르거나 느리거나 하는 특징이 있기 때문에 어떠한 상황에서 어떤 자료구조를 쓸 것인지에 대한 기준을

정할 수 있다.

 

 

'개발공부' 카테고리의 다른 글

Web Architectures  (0) 2020.01.13
ES6 class와 super  (0) 2020.01.03
JS Instantiation Patterns  (0) 2019.12.28
자료구조 stack, queue  (0) 2019.12.27
ESLint  (0) 2019.12.26