⚙️
차수, Big-O 표기법
March 15, 2023
차수(Order)
- 알고즘이 얼마나 복잡한지를 정량적으로 다루기 위한 개념
- 항시 어떤 알고리즘이 좋다고 이야기할 수 없다.
- 어떤 알고리즘이 효율적인지 척도가 필요하다.
- 일반적으로 입력 크기 n이 매우 크다고 가정한다.
Ο(f(n)) - At most as fast as f
Ω(f(n)) - At least as fast as f
Θ(f(n)) - At the rate of f
Big-O 표기법
- 정의 : 점근적 상한(Asymptotic Upper Bound)
- 주어진 복잡도 함수 f(n)에 대해서 g(n)∈ O(f(n))이면 다음을 만족한다.
- n ≥ N인 모든 정수 n에 대해서 g(n) ≤ c ×f(n)이 성립하는 실수 c > 0 와 음이 아닌 정수 N이 존재한다
- g(n) ∈ O(f(n))
- g(n)은 f(n)의 큰 O이다.
- 어떤 함수 g(n)이 O(n^2)에 속한다는 말은
- 함수 g(n)는 궁극에 가서는 (즉, 어떤 임의의 N값보다 큰 값에 대해서는 어떤 2차함수 cn^2보다는 작은 값을 가지게 된다는 것을 뜻한다
- 다시 말해서, 그 함수 g(n)은 어떤 2차함수 cn^2보다는 궁극적으로 좋다고 말할 수 있다.
- 어떤 알고리즘의 시간 복잡도가 O(f(n))이라면
- 입력의 크기 n에 대해서 이 알고리즘의 수행시간은 아무리 느려고 cf(n) 보다는 빠르다.
- n^2 + 10n ∈ O(n^2) (예제 1.9)
- n ≥ 10인 모든 정수 n에 대해서 n^2 + 10n ≤ 2n^2이 성립한다. 그러므로, c=2와 N=10을 선택하면 Big O 정의에 의해서 n^2 + 10n ∈ O(n^2)이라고 결론지을 수 있다.
- n≥1인 모든 정수 n에 대해서 n^2 + 10n ≤ n^2 + 10n^2 = 11n^2이 성힙한다. 그러므로, c =11와 N=1을 선택하면 Big O의 정의에 의해서 n^2 + 10n ∈ O(n^2)이라고 결론지을 수 있다.
💡 Big O를 보이는데 단 한가지 해답이 있는 것이 아님
Omega(Ω) 표기법
- 정의 : 점근적 하한(Asymptotic Lower Bound)
- 주어진 복잡도 함수 f(n)에 대해서 g(n) ∈ Ω(f(n))
- 어떤 함수 g(n)이 Ω(n^2)에 속한다는 말은
- 그 함수는 궁극에 가서는 (즉 어떤 임의의 N값보다 큰 값에 대해서는) 어떤 2차 함수 cn^2의 값보다는 큰 값을 가지게 된다는 것을 의미
- 5n^2 ∈ Ω(n^2) (예제 1.12)
Theta(Θ) 표기법
- 정의 : (Asymptotic Tight Bound)
Small o(o) 표기법
- 정의 : 복잡도 함수 f(n)에 대해서 o(f(n))은 모든 양의 실수 c에 대해서 n ≥ N인 모든 n에 대해서 다음 부등식을 만족하는 음이 아닌 정수 N이 존재하는 모든 복잡도 함수 g(n)의 집합이다.
💡 g(n)≤c×f(n)차
차수의 특성
g(n) ∈ O(f(n)) iff f(n)∈Ω(g(n))
g(n) ∈ Θ(f(n)) iff f(n) ∈ Θ(g(n))