C언어
[자료구조] 빅 오
옹홍
2021. 1. 6. 23:55
빅 오 표기법
만약 시간복잡도가 T(n) = n**2 + 2n +1 인 알고리즘이 있다고 해보자
빅 오 는 함수 T(n)에서 가장 영향력 있는 큰 부분을 찾아내는 것이다.
T(n) = n**2 + 2n +1 의 빅 오는 n**2이다.
| n | n**2 | 2n | T(n) | n**2의 비율 |
| 10 | 100 | 20 | 120 | 83% |
| 100 | 10000 | 200 | 10200 | 98% |
| 1000 | 1000000 | 2000 | 10002000 | 99.8% |
| 10000 | 100000000 | 20000 | 1000020000 | 99.98% |
빅 오 표기법의 일반화
T(n) = a*n**m + b*n**m-1 .... ->O(n**m)
대표적인 빅 오
O(l) 상수형 빅오 : 데이터 수에 상관없이 연산횟수가 고정인 유형
O(logn) 로그형 빅 오: 데이터 수의 증가율에 비해서 연삿횟수의 증가율이 훨씬 낮은 알고리즘
O(n) 선형 빅 오: 데이터수와 연산횟수가 비례
O(nlogn) 선형로그형 빅 오 : 데이터 수가 2배로 늘데, 연삿횟수는 2배를 조금 넘게 증가하는 알고리즘
O(n**2) 데이터 수의 제곱에 해당하는 연산횟수를 요구하는 알고리즘
O(n**3) 데이터 수의 3제곱 해당하는 연산횟수
O(2**n) 지수형 빅오, 사용하는데 무리가 있음