Running time
알고리즘의 Running time은 알고리즘이 특정 입력을 처리하는 데 걸리는 시간을 의미하며, 알고리즘의 효율성을 평가하기 위해 사용됨
- 알고리즘의 Running time(T)에 영향을 끼치는 요소
- input 값의 크기(n)와 정렬된 정도
- 해당 알고리즘의 연산 수


Machine-independent time
Running time을 측정하기 위해 실제 실행 시간을 측정하는 방법을 사용할 수 있으나 사실상 사용되지 않음
왜냐하면, 한 알고리즘을 같은 장치에서 측정할 때의 Relative Speed와 다른 장치에서 측정할 때의 Absolute Speed 간의 Machine-dependent 상수가 존재하게 됨 (장치 별 하드웨어, 컴파일러 등 실행 환경 차이 존재)
따라서, Machine-dependent 상수를 무시하고 알고리즘의 실행 시간을 수학적으로 분석하는 방법을 사용
수학적 분석 방식은 알고리즘의 반복문, 조건문, 함수 호출 등을 추적하여 연산의 총 횟수를 계산함
이후 입력 크기 n값에 따른 T(n) 값의 변화를 관찰하여 함수로 나타내는 점근적 분석(Asymptotic Analysis) 방식
시간복잡도(Time complexity)
알고리즘의 실행 시간은 아래의 시간 복잡도 분류에 따라 분석함
- Worst-case (usually)
- 가장 불리한 입력에서의 알고리즘의 실행 시간
- T(n) = 크기가 n인 입력값에 대한 알고리즘의 최대 시간
- Average-case (sometimes)
- 모든 가능한 입력에 대한 알고리즘 실행 시간의 평균값
- T(n) = 크기가 n인 모든 입력값에 대한 알고리즘의 예상 시간
- 입력값의 통계적 분포에 대한 가정이 필요함, 분석하기 어려움
- Best-case (bogus)
- 가장 유리한 입력에서의 알고리즘의 실행 시간
- 특정 입력값에서 빠르게 작동하는 느린 알고리즘을 이용한 속임수
시간복잡도 표기법(notation) & Growth of Function
시간복잡도에 따른 Growth of Function(n값에 따른 함수의 추이)에 대한 Asymptotic notation을 사용
최고차항 미만의 낮은 차수의 항과 상수항은 무시하며, 로그 함수의 밑은 모두 동일하게 취급
- 𝛰 - notation (Big-O notation)
- 𝛰(g(n)) = f(n)
- g(n)은 f(n)의 최악의 경우에 대한 상한선 (asymptotic upper bound)
- n ≥ n0인 모든 n에 대해 0 ≤ f(n) ≤ c g(n)인 양의 상수 c와 n0가 존재함

- Ω - notation (Big-Omega notation)
- Ω(g(n)) = f(n)
- g(n)은 f(n)의 최선의 경우에 대한 하한선 (asymptotic lower bound)
- n ≥ n0인 모든 n에 대해 0 ≤ c g(n) ≤ f(n)인 양의 상수 c와 n0가 존재함

- Θ - notation (Big-Theta notation)
- Θ(g(n)) = f(n)
- g(n)은 f(n)의 근사치 (asymptotic tight bound)
- n ≥ n0인 모든 n에 대해 0 ≤ c1 g(n) ≤ f(n) ≤ c2 g(n)인 양의 상수 c1, c2, n0가 존재함

+) 비주류 notation
- 𝜊 - notation (Little-o notation)
- o(g(n)) = f(n)
- n ≥ n0인 모든 n에 대해 0 ≤ f(n) < c g(n)인 양의 상수 c와 n0가 존재한다.
- n^1.999 = 𝜊(n^2)
- n^2 != 𝜊(n^2)
- 𝜔 - notation (Little-omega notation)
- 𝜔(g(n)) = f(n)
- n ≥ n0인 모든 n에 대해 0 ≤ c g(n) < f(n)인 양의 상수 c와 n0가 존재한다.
- n^2.001 = 𝜔(n^2)
- n^2 != 𝜔(n^2)

𝛰 - notation(Big-O 표기법)과 실행 시간 표현 예시
시간복잡도 표현에 주로 𝛰 - notation을 사용하며 아래는 주요 𝛰 - notation 표기법 예시임
- O(1): 상수 시간 (입력 크기 n에 관계없이 일정)
배열의 특정 요소 접근 - O(log n): 로그 시간
이진 탐색 - O(n): 선형 시간
배열의 모든 요소 순회 - O(n log n): 로그-선형 시간
효율적인 정렬 알고리즘(퀵 정렬, 병합 정렬 등) - O(n²): 이차 시간
중첩된 이중 루프 - O(2ⁿ): 지수 시간
일부 재귀 기반 알고리즘(피보나치 수열)
Comparing Functions
- Transitivity (이행성)
- f(n) = Θ(g(n))이고 g(n) = Θ(h(n))이면 f(n) = Θ(h(n)) 이다
- Reflexivity (반사성)
- f(n) = Θ(f(n)) 이다
- Symmetry (대칭성)
- g(n) = Θ(f(n)) 이면, f(n) = Θ(g(n)) 이다.
- Transpose Symmetry (전치 대칭성)
- g(n) = Ω(f(n)) 이면, f(n) = O(g(n)) 이다.
| Big-O | Big-Ω | Big-Θ | Little-o | Little-𝜔 | |
| Transitivity | 가능 | 가능 | 가능 | 가능 | 가능 |
| Reflexivity | 가능 | 가능 | 가능 | 불가능 | 불가능 |
| Symmetry | 불가능 | 불가능 | 가능 | 불가능 | 불가능 |
| Transpose Symmetry | 가능 | 가능 | 불가능 | 불가능 | 불가능 |
'Algorithm' 카테고리의 다른 글
| [알고리즘] 알고리즘(Algorithm)의 기본 개념 (3) | 2025.01.07 |
|---|