λ°˜μ‘ν˜•
κ΅­λ―ΌλŒ€ν•™κ΅μ—μ„œ "μ‰½κ²Œ λ°°μš°λŠ” μ•Œκ³ λ¦¬μ¦˜" ꡐ재λ₯Ό μ΄μš©ν•œ
 λ°•ν•˜λͺ… κ΅μˆ˜λ‹˜μ˜ κ°•μ˜ κ΅μ•ˆμ„ μ΄μš©ν•˜μ—¬ μˆ˜μ—… λ‚΄μš©μ„ μ •λ¦¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€

 

 

 

Complexity of Recursive Functions

 

 

 

Algorithm1 은 νŒ©ν† λ¦¬μ–Όμ„ μž¬κ·€μ μœΌλ‘œ λ‚˜νƒ€λ‚΄κ³  있고 

Algorithm2 λŠ” 탐색 λ²”μœ„λ₯Ό 반으둜 λ‚˜λˆ„μ–΄ ν•΄λ‹Ή 숫자λ₯Ό νƒμƒ‰ν•˜κ³  있음

 

그럼 λ³΅μž‘λ„λŠ” μ–΄λ–»κ²Œ 될까..?

 

λ°”λ‘œ λ³΅μž‘λ„λ₯Ό κ΅¬ν•˜κΈ°λŠ” νž˜λ“€κ³  μš°μ„  λ³΅μž‘λ„ ν•¨μˆ˜μ˜ 점화식 (Recurrence Relation)을 ꡬ해볼 수 있음

 

각각 μ™Όμͺ½λΆ€ν„° Algorithm1, 2에 λŒ€ν•œ λ³΅μž‘λ„ ν•¨μˆ˜μ˜ 점화식

 

=> μ΄λŠ” λ³΅μž‘λ„ ν•¨μˆ˜λ₯Ό μž¬κ·€μ μœΌλ‘œ μ •μ˜ν•œ 식 

 

Solving Recurrences

 

λ³΅μž‘λ„λ₯Ό κ΅¬ν•˜κ³  싢은데 점화식은 또 μ–΄λ–»κ²Œ ν’€ 수 μžˆμ„κΉŒ..?

 

 

점화식을 ν‘Όλ‹€ = 점화식을 해석적 ν•΄λ‘œ λ³€ν™˜

 

=> 해석적 ν•΄(Closed solution) λž€ μœ ν•œν•œ 수의 κΈ°λ³Έμ—°μ‚°μœΌλ‘œ ν‘œν˜„ν•œ 식

 

각각 μ™Όμͺ½λΆ€ν„° Algorithm1, 2에 λŒ€ν•œ λ³΅μž‘λ„ ν•¨μˆ˜μ˜ 점화식

 

점화식에 μ°¨λ‘€μ°¨λ‘€ n을 쀄여가며 λŒ€μž…ν•˜λ©΄ 해석적 ν•΄λ₯Ό ꡬ할 수 있음 

 

=> λ„ˆλ¬΄ κ³ λ‹¨ν•œ μž‘μ—…μž„

 

점화식을 직접 λŒ€μž…ν•˜μ§€ μ•Šκ³  μ–΄λ–»κ²Œ ν’€ 수 μžˆμ„κΉŒ?

 

Substitution Method (μΆ”μ • ν›„ 증λͺ…)

 

 

 

μœ„μ™€ 같은 점화식이 μžˆμ„ λ•Œ Substitution Methodλ₯Ό μ΄μš©ν•΄λ³΄λ©΄

 

1. μΆ”μΈ‘ν•˜κΈ° : T(n) = O(nlogn) 일 것이닀.

 

2. λŒ€μž…ν•˜μ—¬ 증λͺ…ν•˜κΈ° (μˆ˜ν•™μ  귀납법 μ‚¬μš©) : n >= n0 일 λ•Œ T(n) <= c * nlogn 인 c와 n0 μ°ΎκΈ°

 

과정을 거쳐야함

 

μ›λž˜λŠ” n0 <= k < n 인 λͺ¨λ“  k에 λŒ€ν•΄ T(k) <= c * klogk μž„μ„ λ³΄μ—¬μ£ΌλŠ” Base caseλ₯Ό 증λͺ…해야함
(n0 = 1은 log ν•¨μˆ˜μ˜ μ •μ˜κ°€ 문제λ₯Ό μΌμœΌν‚€λ―€λ‘œ μ‚¬μš© X)

ν•˜μ§€λ§Œ, aκ°€ μƒμˆ˜μΌ λ•Œ T(a)λŠ” Θ(1) μ΄λ―€λ‘œ (μ’…λ£Œκ°€ λ˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λΌλ©΄ μƒμˆ˜λ‘œ λ³Ό 수 있기 λ•Œλ¬Έ), 귀납적 증λͺ… μ‹œ Base caseλ₯Ό 증λͺ…ν•˜μ§€ μ•Šμ•„λ„ 됨!

 

μˆ˜ν•™μ  귀납법을 μ΄μš©ν•΄λ³΄λ©΄

 

Induction case 

 

n = 1, 2, ..., k 일 λ•Œ T(n) <= c * nlogn 을 λ§Œμ‘±ν•œλ‹€ κ°€μ •ν•˜κ³ 

n = k + 1 일 λ•Œλ„ T(n) <= c * nlogn μž„μ„ 증λͺ…

 

T(n) = 2T(⌊n/2βŒ‹) + n

<= 2c⌊n/2βŒ‹log⌊n/2βŒ‹ + n

<= cn log (n/2) + n                    ...                ⌊n/2βŒ‹ <= n/2 μ΄λ―€λ‘œ

= cn log n - cn + n

<= cn log n                            ... -cn + n 이 μŒμˆ˜κ°€ 되게 μ„€μ •ν•œλ‹€λ©΄

λ”°λΌμ„œ, T(n) = O(nlogn)

 

 

Substitution Method의 μ—¬λŸ¬ case

 

 

 

T(n) = O(n) 라고 μΆ”μΈ‘ν•˜κ³  Substitution Methodλ₯Ό μ΄μš©ν•΄λ³΄λ©΄

 

T(n) <= cn μž„μ„ 증λͺ…ν•΄μ•Ό ν•˜λŠ”λ° T(n) <= cn + 1이 λ‚˜μ™€μ„œ 증λͺ…이 μ‹€νŒ¨ν•¨

 

=> 이럴 경우 T(n) <= cn - b λ₯Ό 증λͺ…ν•˜λ©΄ 됨

 

μ™œλƒλ©΄ T(n) = O(n - k) = O(n) μž„μ„ 증λͺ…ν•˜λ©΄ λ˜λ‹ˆκΉŒ

 

 

 

 

이런 κ²½μš°λŠ” log n = m 으둜 두고, m에 λŒ€ν•œ μˆ˜μ‹μœΌλ‘œ λ³€κ²½ν•˜μ—¬ 점화식을 ν’€ 수 있음

 

 

 

Recursion-Tree Method (반볡 μ „κ°œ, Tree둜 ν‘œν˜„)

 

 

μœ„ 점화식을 μ „κ°œν•˜μ—¬ ν’€λ©΄

 

 

 

μ΄λŸ°μ‹μœΌλ‘œ μ „κ°œκ°€ 될텐데 이 μ „κ°œ 과정을 Recursion Tree둜 ν‘œν˜„ν•˜λŠ” 것이 Recursion-tree Method μž„!

 

이 λ•Œ 각 정점은 각 ν•˜μœ„λ¬Έμ œμ˜ λ³΅μž‘λ„λ‘œ ν‘œν˜„λ¨

 

 

 

=> T(n) = 3T(n/4) + n^2 μ—μ„œ n^2κ°€ μ–Όλ§ˆλ‚˜ κ³„μ‚°λ˜λŠ”μ§€ 트리의 λ…Έλ“œλ‘œ 적어 λ†“μŒ

전체 treeλŠ” μ΄λŸ°μ‹μœΌλ‘œ ꡬ성됨

 

 

트리의 κΉŠμ΄κ°€ log4(n) 인데 μ΄λŠ” 문제 크기가 μž¬κ·€ 호좜이 ν•œ 단계 진행될 λ•Œ λ§ˆλ‹€ 1/4 둜 쀄어듀기 λ•Œλ¬Έμ— n이 n/4둜 μ€„μ–΄λ“œλŠ” 과정을 k번 λ°˜λ³΅ν•΄μ„œ 1에 λ„λ‹¬ν•˜λŠ” 깊이인 log4(n) μž„

 

트리의 κΉŠμ΄κ°€ 항상 λ™μΌν•˜κ²Œ λ‚˜μ˜€λŠ”κ±΄ μ•„λ‹ˆλΌλŠ” 사싀을 μ•Œκ³  μžˆμ–΄μ•Όν•¨!

 

 

Master Method (Master theorem 이용)

 

T(n) = aT(n/b) + f(n) μ™€ 같은 ν˜•νƒœμ˜ 점화식은 Master Theorem을 μ΄μš©ν•˜μ—¬ κ°„λ‹¨νžˆ ν’€ 수 있음!

(a >= 1 와 b > 1λŠ” μƒμˆ˜)

 

Master Theorem은 μ„Έ κ°€μ§€ 경우둜 λ³Ό 수 μžˆλŠ”λ°

 

n^logb(a) 에 λŒ€ν•΄ μƒλŒ€μ μœΌλ‘œ

 

f(n)이 μž‘μ„λ•Œ, 적당할 λ•Œ, 클 λ•Œμ˜ 경우둜 λ‚˜λˆŒ 수 있음

 

 

 

μ˜ˆμ‹œλ‘œ T(n) = 9T(n/3) + n λŠ” Master Method의 ν˜•νƒœμ™€ μΌμΉ˜ν•˜μ—¬

 

a = 9, b = 3이기 λ•Œλ¬Έμ— n^log3(9) = n^2 이 λΉ„κ΅λŒ€μƒμ΄ 되고, f(n) = n μ΄λ―€λ‘œ

case 1에 λΆ€ν•©ν•˜μ—¬ Θ(n^log3(9)) = Ξ˜(n^2) 이 λœλ‹€!

λ°˜μ‘ν˜•

'πŸ”₯ Algorithm' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

L05 - Heapsort  (2) 2024.10.06
L04 - Merge Sort & Quicksort  (2) 2024.09.27
L03 - Basic Sorting Algorithms  (1) 2024.09.25
L01 - Algorithm Analysis  (1) 2024.09.14
μ‹œκ°„λ³΅μž‘λ„μ™€ 디버깅  (3) 2024.01.17