알고리즘/Algorithm Theory

[Time Complexity] 시간 복잡도

래울 2022. 6. 17. 02:46

Algorithm의 수행시간을 이론적으로 분석하기 위한 개념

수행시간은 환경에 따라 달라진다.(구현한 언어, 컴파일러, 컴퓨터의 스펙 등)

 

즉, 같은 환경적 요인들을 가졌을 때의 수행시간을 비교

 

아래 3가지에 대한 시간 복잡도를 주로 분석한다.

 

 

 

● Big-Oh  Notation

빅오 표기법, 주로 사용하는 표기법이다.

왜 빅오표기법을 주로 사용하는가?

  - 'A라는 알고리즘이 최선의 경우 1초만에 문제를 해결한다.' 하지만, 최악의 경우 inf의 시간이 걸린다면, 의미가 있다고 할 수 있을까? 이보다는 'A라는 알고리즘은 최악의 경우에도 10초만에 문제를 해결해' 가 더 의미있을 것이다.

 

 

- 두 함수 간의 관계를 나타내는 표기법

시간복잡도를 나타내는데 주로 쓰이지만, 별개로 함수의 증가속도(growth rate of functions)를 비교하기 위한 표기법이다.

• f(n) = O(g(n))  :  함수 f의 증가속도가 g보다 빠르지 않다. (즉 비슷하거나 느리다)
• f(n) = Ω(g(n))  :  함수 f의 증가속도가 g보다 느리지 않다. (즉 비슷하거나 빠르다)
• f(n) = Θ(g(n))  :  함수 f의 증가속도가 g와 비슷하다.

* 이때의 증가속도는 n이 무한으로 갈 때 누가 더 빨리 증가하는지

 

 

- 빅오, 오메가, 세타의 비교

f(n)이 다음과 같을 때... 아래와 같다.

 

f(n) = O(n) (x)

f(n) = O(n^2) (o)

f(n) = O(n^3) (o)

 

f(n) = Ω(n) (o)

f(n) = Ω(n^2) (o)

f(n) = Ω(n^3) (x)

 

f(n) = Θ(n) (x)

f(n) = Θ(n^2) (o)

f(n) = Θ(n^3) (x)

 

 

 

● 증가속도에 따른 함수들의 서열

1 상수함수
logn, log(logn), ... 로그함수(polylogarithm)
logn
(logn)^2, (logn)^3, ... 
n, n^2, n^3, ... 다항함수(polynomial)
2^n, 3^n, ... 지수함수(exponential)
n! (팩토리얼)
n^n(n의 n승)