tmxklab
[알고리즘 기초] 01 알고리즘 정의 및 점근적 표기법 본문
1. 알고리즘 정의
어떤 입력을 어떤 출력으로 변환하는 일련의 잘 정의된 계산과정
- 알고리즘은 원하는 입/출력 관계를 구하기 위한 구체적인 계산과정을 설명
- 모든 입력 사례에 대해 항상 올바른 출력을 내고 종료할 경우 타당하다(correct)고 함
2. 점근적 표기법(Asymptotic Notation)
- 알고리즘의 점근적 효율성 : 입력 크기가 극한으로 증가할 때 어떤 알고리즘의 수행 시간이 어떻게 증가하는지 관심
- 알고리즘의 점근적 수행시간은 자연수들의 집합에 한해서 N={0, 1, 2,...}인 함수들로 정의
- 점근적 표기는 주로 알고리즘의 수행시간을 나타내기 위해 사용
1) $O$-Notation(Big-oh)
- Worst case
- 점근적 상한, $f(n) = O(g(n))$
- 정의 : $O(g(n))$ $=$ {$f(n)$ : 모든 $n \ge n_{0}$에 대해 $0 \le f(n) \le c \cdot g(n)$인 양의 상수 $c$, $n_{0}$가 존재한다}
2) $\Omega$-notation(omega)
- Best case
- 점근적 하한, $f(n) = \Omega (g(n))$
- 정의 : $ \Omega (g(n))$ $=$ {$f(n)$ : 모든 $n \ge n_{0}$에 대해 $0 \le c \cdot g(n) \le f(n)$인 양의 상수 $c$, $n_{0}$가 존재한다}
3) $\Theta$-notation(theta)
- 정의 : $ \Theta(g(n))$ $=$ {$f(n)$ : 모든 $n \ge n_{0}$에 대해 $0 \le c_{1} \cdot g(n) \le f(n) \le c_{2} \cdot g(n) $인 양의 상수 $c_{1}$, $c_{2}$, $n_{0}$가 존재한다}
- 충분히 큰 n에 대해 f(n)이 c1g(n)과 c2g(n)사이에 양의 상수 c1과 c2가 존재하면 f(n)은 집합(g(n))에 속함
+) Worst case running time에 관심을 가지는 이유?
- 최악의 경우 수행시간이 모든 입력의 수행시간에 대한 상한이 된다
- 최악의 경우가 빈번히 발생할 수 있다.
- 평균적인 경우가 최악의 경우만큼 거의 좋지 못한 상황일 때가 종종 있다.
'Algorithm' 카테고리의 다른 글
[정렬 알고리즘] 01 삽입 정렬(Insertion Sort)이론 및 구현 (1) | 2020.01.31 |
---|---|
[알고리즘 기초] 05 재귀 트리(Recursion Tree Method) (1) | 2020.01.29 |
[알고리즘 기초] 04 치환법(Substitution Method) (0) | 2020.01.29 |
[알고리즘 기초] 03 점화식(Recurrence) (0) | 2020.01.28 |
[알고리즘 기초] 02 알고리즘 설계(분할 정복) (0) | 2020.01.28 |
Comments