728x90
Big-O (or Big-oh) notation
계산 복잡도 이론에서 사용되는 점근 표기법. 입력 데이터의 크기와 알고리즘의 소요 시간 또는 메모리의 상관관계를 나타낸다.
1.1. 정의
모든 n(n은 어떤 n0보다 크거나 같다)에 대해 |f(n)|=<c|g(n)|인 조건을 만족하는 두 양의 상수 c와 n0가 존재한다면 f(n) 은 o(g(n))에 속하게 된다.1.2. 설명
프로그램을 돌렸을 때, 프로그램이 돌아가는 정확한 단계(step) 수를 결정하는 작업은 매우 어렵다. 단계 수를 정확히 결정하는 데 드는 비용은 '단계'의 개념 자체가 부정확하기 때문에 낭비를 초래할 수 있다.[1] 그런데, 입력 데이터 개수 n에 대해 두 프로그램의 단계 차이가 5n+7 이라든가 n²+25인 경우는 비교의 가치가 생긴다. 그러나 이 경우에도 마찬가지로 굳이 사용자가 5n+7이라는 것을 정확히 알기 보다는 그냥 5n 정도라고 생각해도 되지 않을까? n값이 10억개의 데이터라면 반드시 '예, 이 프로그램은 10억개를 넣으면 50억 7개의 스텝을 진행합니다' 라고 얘기해야 하는가? 그냥 '대략 5n 정도 필요하구나' 하고 인식하면 충분히 큰 n에 대해서는 그게 그거라는 것을 알 수 있다. 마찬가지로, 굳이 5n이라고 하기보다는 '아, n값에 비례하는구나, n의 제곱에 비례하는구나' 정도로 생각해도 충분하다는 것이다.
결국 정의와 연관시켜서 생각하면 O(5n+7) = O(5n) = O(n)이 되고, O(n²+25)=O(n²)이 된다는 뜻이다. 여기서 = 기호를 '같다(equals)'가 아니라 '~이다(is)', '~쯤 된다'라고 해석하면 기호의 혼란을 피할 수 있다. 경우에 따라 O(g(n))을 하나의 집합으로 보고 f(n) ∈ O(g(n))으로 표기하기도 한다. 일반적으로 알고리즘의 시간복잡도를 나타내는데, Big-O 표기법은 해당 알고리즘의 시간 복잡도 중 해당 차수의 시간복잡도를 알고리즘이 가지거나, 혹은 그 보다 더 낮은 차수의 시간복잡도의 알고리즘을 가진다는 이야기인데.. 쉽게 풀어 설명하면, 알고리즘의 성능을 결정하는 시간복잡도는 아래 순이다. (위로 갈수록 간단하고, 아래로 갈수록 복잡해지며, log N은 log₂N을 뜻한다)- O(1) 과 같은 상수형태 - O(log n) 과 같은 로그 형태 - O(n) 과 같은 선형[2] - O(n log n) 과 같은 선형로그 형태 - O(n²), O(n³)과 같은 다차 형태 - O(2ⁿ), O(3ⁿ)과 같은 지수 형태[3] - O(n!) 과 같은 팩토리얼
여기서, 일반적으로 위로 갈수록 알고리즘이 매우 빨라지며, 아래로 갈수록 n의 값이 커질 때 마다, 급격하게 알고리즘의 수행 시간이 증가한다.
예를 들어, O(log n), O(n), o(n log n), o(n²), o(n³), o(2ⁿ), o(n!)를 비교하면,
n | 1 | 2 | 3 | 4 | 8 | 16 | 32 | 64 | 1000 |
log n | 0 | 1 | 1.73 | 2 | 3 | 4 | 5 | 6 | 9.97 |
n | 1 | 2 | 3 | 4 | 8 | 16 | 32 | 64 | 1000 |
n log n | 0 | 2 | 5.19 | 8 | 24 | 64 | 120 | 384 | 9966 |
n² | 1 | 4 | 9 | 16 | 64 | 256 | 1024 | 4096 | 1000000 |
n³ | 1 | 8 | 27 | 64 | 512 | 4096 | 32768 | 262144 | 10억 |
2ⁿ | 2 | 4 | 8 | 16 | 256 | 65536 | 4294967296 | 약 1844경 | 약 1.07 x 10^301 |
n! | 1 | 2 | 6 | 24 | 40320 | 20922789888000 | 약 2.63 x 10^35 | 약 1.27 x 10^89 |
약 4.02 x 10^2567 |
<출처 :엔하위키미러>
'컴퓨터과학[2-1] > knou_[2-1]이산수학' 카테고리의 다른 글
촘스키 계층구조Chomsky Hierarchy (0) | 2015.05.21 |
---|---|
이산수학 - 오토마타[Automata]개념정리 (0) | 2015.05.19 |
Algorithms 알고리즘의 정의 (0) | 2015.05.03 |
이산수학 조합이론 [조합: Combination] (0) | 2015.05.03 |
이산수학 조합이론 [순열: Permutation] (0) | 2015.05.03 |
댓글