Big-O 분석법 (Big-O analysis)
입력 값의 개수에 따라 알고리즘이 수행되는데 걸리는 시간을 바탕으로 알고리즘의 효율성을 평가하는 실행 시간 분석법.
Big-O 분석의 적용
- 입력 값이 무엇인지 확인하고 어떤 것을 n으로 놓아야 할지 결정한다.
- 알고리즘에서 수행해야 할 연산 횟수를 n의 식으로 표현한다.
- 차수가 제일 높은 항만 남긴다.
- 모든 상수 인수를 없앤다.
Big-O 알고리즘의 종류
O(1)
상수 실행 시간(constant running time)
가장 빠른 알고리즘이며 이 경우는 거의 없다.
|
|
O(log n)
로그 알고리즘(logarithmic algorithm)
실행 시간이 입력 크기의 log에 비례해서 늘어나는 알고리즘.
|
|
O(n)
선형 알고리즘(linear algorithm)
실행 시간이 입력크기에 비례하는 알고리즘.
O(n)
12345def linear(n, A):for i in xrange(n):if A[i] == 0:return 0return 1O(n + m)
1234567def linear(n, m):result = 0for i in xrange(n):result += ifor j in xrange(m):result += jreturn result
O(n log n)
초선형 알고리즘(superlinear algorithm)
속도가 선형 알고리즘과 다항식 알고리즘의 중간쯤이다.
O(n^2)
이차 알고리즘(quadratic algorithm)
입력 크기의 제곱으로 시간이 늘어난다.
|
|
O(n^c)
다항식 알고리즘(polynomial algorithm)
입력 크기가 늘어나면 실행 시간이 빠르게 늘어난다.
O(c^n)
지수 알고리즘(exponential algorithm)
다항식 알고리즘보다 실행 속도가 빠르게 늘어난다.
O(n!)
팩토리얼 알고리즘(factorial algorithm)
가장 느린 알고리즘으로 n의 값이 작다고 해도 사용이 힘든 수준으로 느려진다.