차수(Order)
복잡도 함수 표기법
- asymptotic
- 점근적
- f(n) 의 asymptotic behavior는 n이 큰 수가 될 때의 f(n)이 갖는 특성
- ex) f(n)=n1 일 때 limn→∞n1=0
1. Big O notation -> O()
- asymptotic upper bound (점근적 상한)
- 정의: 주어진 복잡도 함수 f(n)에 대하여 g(n)∈O(f(n)) 이면 n≥N인 모든 정수 n에 대하여 0≤g(n)≤c×f(n) 이 성립하는 양의 실수 c와 음이 아닌 정수 N이 존재한다.
- 입력의 크기 n에 대해서 해당 함수를 사용하는 알고리즘의 수행시간은 아무리 늦어도 cf(n)이 된다. -> cf(n) 보다 절대로 느릴 수 없다.
- ex1) n2+10n∈O(n2) 성립 (c=2,N=10) 인 경우
ex2) n3∈O(n2) 은 성립하지 않음
2. Omega notation -> Ω()
- asymptotic lower bound (점근적 하한)
- 정의: 주어진 복잡도 함수 f(n)에 대하여 g(n)∈O(f(n)) 이면 n≥N인 모든 정수 n에 대하여 g(n)≥c×f(n)≥0 이 성립하는 양의 실수 c와 음이 아닌 정수 N이 존재한다.
- 입력의 크기 n에 대해서 해당 함수를 사용하는 알고리즘의 수행시간은 아무리 빨라도 cf(n) 밖에 되지 않는다. -> cf(n)보다 절대로 더 빠를 수 없다.
- ex1) n2+10n∈Ω(n2) 성립 (c=1,N=0) 인 경우
3. Theta notation -> Θ()
- asymptotic tight bound
- 정의: 주어진 복잡도 함수 f(n)에 대해서 Θ(f(n))=O(f(n))∩Ω(f(n))
n≥N인 모든 정수 n에 대하여 c×f(n)≤g(n)≤d×f(n) 이 성립하는 양의 실수 c와 d, 음이 아닌 정수 N이 존재한다.
- Omega와 Big O를 둘 다 만족하는 것
ex) T(n)=2n(n−1) : O(n2) 이면서, Ω(n2)이다.
-> 따라서 Θ(n2)이다.
4. Small O notation -> o()
- upper bound that is not asymptotically tight
- 복잡도 함수 끼리의 관계를 나타내기 위한 표기법
- 정의: 주어진 복잡도 함수 f(n)에 대하여 g(n)∈o(f(n)) 이면 모든 양의 실수 c에 대해, n≥N인 모든 n에 대해서 0≤g(n)≤c×f(n)) 이 성립하는 음이 아닌 정수 N이 존재한다.
- Big O랑 같지만 다른 점은 모든 양의 실수 c에 대해 성립한다는 점!
- g(n)∈o(f(n)) 은 g(n)이 cf(n)보다 훨씬 낫다는 의미
- ex1) n∈o(n2) 성립(n>10000)인 경우
ex2) n∈o(5n) 성립하지 않음
5. Small Omega notation -> ω()
- lower bound that is not asymptotically tight
Big O VS Small O
- Big O: 실수 c>0 중에서 하나만 성립해도 된다.
- Small O: 모든 실수 c>0에 대해서 성립해야 한다.
복잡도 함수 순서 나열
k>j>2이고, b>a>1 일때
Θ(logn), Θ(n), Θ(nlogn), Θ(n2), Θ(nj), Θ(nk), Θ(an), Θ(bn), Θ(n!)
- 이때 g(n)이 f(n)보다 왼쪽에 존재하면, 무조건 g(n)∈o(f(n))이다.
- c≥0, d>0, g(n)∈O(f(n)) and h(n)∈Θ(f(n))이면,
c×g(n)+d×h(n)∈Θ(f(n))
극한 이용하여 차수 구하기
n→∞limf(n)g(n)=⎩⎪⎪⎨⎪⎪⎧c>0이면0이면∞이면g(n)∈Θ(f(n))g(n)∈o(f(n))f(n)∈o(g(n))
로피탈 법칙
limn→∞f(n)g(n)=limn→∞(f′(n)g′(n))