2024-04-03-04. 점근적 표기, 시간복잡도
점근적 표기
 O(g(n)) = {f(n) | 충분히 큰 모든 n에 대하여 f(n)<=c*g(n)인 양의 상수 c가 존재}
 ex) {3n2, n2+n+3, n+2, nlogn, 3} ⊂ O(n2)
 
 Ω(g(n)) = {f(n) | 충분히 큰 모든 n에 대하여 c*g(n)<=f(n)인 양의 상수 c가 존재}
 ex) {n3, n2+3, 3n+2} ⊂ Ω(n)
 
 Θ(g(n)) = O(g(n)) ∩ Ω(g(n))
 = {f(n) | 충분히 큰 모든 n에 대하여 c1*g(n)<=f(n)<=c2*g(n)인 양의 상수 c1, c2가 존재}
 ex) {n2+n+3, 2n2+3} ⊂ Θ(n2)
 
 
시간복잡도
일반적으로 입력 크기가 커질수록 알고리즘의 수행시간이 증가하므로, 수행시간을 입력 크기 n에 대한 함수로 표현한다. 이러한 표현을 시간복잡도라고 한다.
시간복잡도는 주로 점근적 상한 표기법(빅-오 표기법)으로 표현된다.
시간복잡도에서 log
시간복잡도에서 로그의 밑 2가 생략되는 경우가 많다.
 
k = logn <=> 2k = n
따라서 logn은…
- 2를 몇 번 곱하면 n이 되느냐의 질문에 대한 답
- n을 2로 몇 번 나누면 1이 되느냐의 질문에 대한 답
로그함수는 지수함수의 역함수
 
이를 이용해 이진 탐색(재귀)의 시간복잡도를 구할 수 있다.
T(n) = 1+T(n/2) = 1+1+T(n/4)= …
= T(2logn) = 1+T(2logn-1) = 1+1+T(2logn-2) = ... = logn
∴T(n)=O(logn)
 
logn은 n보다 월등히 작다