recursion : 어떤 문제를 해결하는 과정에서 자신과 똑같지만 크기가 다른 문제를 발견하고 이들의 관계를 파악함으로써 문제 해결에 접근하는 방식

 

ex) 하노이의 탑

Hanoi(n, from, temp, to) {
	if n = 1 then print("move ring on" from "to" to);
	if n > 1 then {
		Hanoi(n-1, from, to, temp);
		Hanoi(1, from, temp, to);
		Hanoi(n-1, temp, from, to);
	}
}

 

induction method : 자신보다 작은 문제에 대해 결론이 옳음을 가정하고 자신과 이 작은 문제의 관계를 통해서 자신에게도 결론이 옳음을 보이는 것

 

ex) 하노이의 탑 원판 이동 횟수

H(n) : 하노이 탑 원판 개수가 n일때 최소 원판 이동 횟수

H(1) = 1

H(n) = H(n-1) + H(n-1) = 2H(N-1) + 1

 

점근적 분석 (Asymptotic Analysis)

$$O-표기법$$

$$O(g(n)) = \{f(n)~|~ \exists c > 0,~n_0 > 0~s.t.~\forall n\ge n_0 ,~f(n) \le cg(n) \}$$

$$\Omega-표기법$$

$$\Omega(g(n)) = \{f(n)~|~\exists c > 0,~n_0 > 0~s.t.~\forall n\ge n_0 ,~cg(n) \le f(n) \}$$

$$\Theta-표기법$$

$$\Theta(g(n)) = O(g(n)) \cap \Omega(g(n))$$

$$\Theta(g(n)) = \{f(n)~|~\exists c_1 ,~c_2 > 0,~n_0 > 0,~s.t.~\forall n\ge n_0 ,~c_1 g(n) \le f(n) \le c_2 g(n)\}$$

$$o-표기법$$

$$o(g(n)) = \{f(n)~|~\displaystyle \lim_{n \to \infty} \frac{f(n)}{g(n)} =0\}$$

$$o(g(n)) = \{f(n)~|~\exists n_0 > 0~s.t.~\forall c >0~and~n\ge n_0,~f(n)<cg(n)\}$$

$$\omega-표기법$$

$$\omega(g(n)) = \{f(n)~|~\displaystyle \lim_{n \to \infty} \frac{f(n)}{g(n)} =\infty\}$$

$$\omega(g(n)) = \{f(n)~|~\exists n_0 > 0~s.t.~\forall c > 0~and~\forall n\ge n_0,~cg(n) < f(n)\}$$

'쉽게 배우는 알고리즘' 카테고리의 다른 글

04 정렬 (2)  (0) 2018.10.21
04 정렬 (1)  (0) 2018.10.21
03 점화식과 알고리즘 복잡도 분석  (0) 2018.10.20
01 알고리즘이란  (5) 2018.10.18
[쉽게 배우는 알고리즘] 책소개  (0) 2018.10.18

+ Recent posts