만족
[알고리즘] 점근적 표기법 본문
[알고리즘] 점근적 표기법
기타 CS 이론/Algorithm Satisfaction 2018. 11. 13. 18:20O 표기법
Big O 표기법이라고 읽는다.
알고리즘의 Time Complexity를 분석하는 데 가장 많이 쓰이는 표기법이다.
O(g(n)) = { f(n) | 충분히 큰 n에 관해서 f(n)<= c*g(n)인 양의 "상수" c가 존재한다 }
를 의미한다.
즉 n+100= O(n)이라고 하면
n에 2를 곱함으로써 충분히 큰 n에 관해서는 n+100 < 2n이 성립할 수 있다는 말이다.
그런데 정의에 의하면 f(n)<= c*g(n)만 성립하면 어떤 f, g가 와도 상관이 없으므로
극단적으로는 n+1= O(n^10)도 가능하다.
그래서 O표기법은 엄밀한 상한을 의미할 수도 있지만 위와 같이 여유있거나 극단적인 상한이 될 수도 있다.
그러나 일반적인 알고리즘의 시간복잡도를 분석하는데 사용하는 만큼 엄밀한 의미로 많이 쓰인다.
(ex- 복잡도가 2n*log n인 알고리즘에 대해 O(n^2), O(n^44) 등 많은 O표기법 후보가 존재하지만 주로 O(n*log n)으로 표기한다)
Big Omega 표기법
Big O 표기법과는 약간 반대의 성질을 띈다.
Omega(g(n)) = { f(n) | 충분히 큰 n에 관해서 f(n)>= c*g(n)인 양의 "상수" c가 존재한다 }
를 의미한다.
즉 알고리즘의 하한을 의미한다.
O표기법과 마찬가지로 이는 극단적으로도 사용이 가능하다.
2*n^2에 관해 Omega(n) 처럼 극단적인 하한으로 표기할 수도 있다.
Big Theta 표기법
Big O와 Big Omega로 표현된 점근적 증가량이 같게 표기된다면 Big Theta 표기법을 사용할 수 있다.
Big Theta= { Big O and Big Omega} 로 정의된다.
즉 Big O와 Big Omega처럼 극단적 예를 포함하지 않고 엄밀한 의미의 점근적 증가량을 나타낸다.
n^2+ 3*n+ 1023에 관해 Big Theta (n^2)처럼 표기한다.
'기타 CS 이론 > Algorithm' 카테고리의 다른 글
[알고리즘] 세그먼트 트리(Segment Tree) (0) | 2021.11.30 |
---|---|
[알고리즘] 버블 정렬 (Bubble Sort) (0) | 2021.07.24 |
[알고리즘] 이분 탐색(Binaray Search) (3) | 2018.01.16 |
[알고리즘] 퀵 정렬 (Quick Sort) (0) | 2018.01.15 |
[알고리즘] 병합 정렬(Merge Sort) (0) | 2018.01.14 |