๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿš— Major Study (Bachelor)/๐ŸŸจ Algorithm

์•Œ๊ณ ๋ฆฌ์ฆ˜ 3์ฃผ์ฐจ ์›”์š”์ผ ๊ฐ•์˜

by UKHYUN22 2022. 3. 14.
728x90

Exercise1

ํ–‰๋ ฌ ๊ณฑํ•˜๊ธฐ ๋ฌธ์ œ: Iterative solution ์ด ์‚ฌ์šฉ๋œ๋‹ค.

A์™€ B๊ฐ€ ๊ฐ๊ฐ nxn ํ–‰๋ ฌ์ด๋ผ๊ณ  ๊ฐ€์ •.

3๋ฒˆ๋ถ€ํ„ฐ 7๋ฒˆ๊นŒ์ง€๊ฐ€ ๊ณฑํ•˜๊ฒŒ ๋˜๋Š” ๊ณผ์ •. 3๊ฐœ์˜ for loop์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.

7๋ฒˆ ๋ผ์ธ์—์„œ ๊ณฑํ•˜๊ฒŒ ๋œ๋‹ค. C ํ–‰๋ ฌ์€ A์˜ row์™€ B์˜ column์„ ๋ชจ๋‘ ๊ณฑํ•˜๊ฒŒ ๋˜๋Š” ๊ณผ์ •์ด ์žˆ๋‹ค.

Time Complexity๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์€ for loop์ด๋ฉด ๊ตฌํ•˜๊ธฐ ์‰ฝ๋‹ค. ์„ธํƒ€ n^3์ด๋‹ค. ๊ทธ๋ƒฅ n^3์ด๋ผ๊ณ  ํ‘œํ˜„ํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

 

 

Exercise 2

Divide and conquer๋กœ ํ’€๊ฒŒ ๋˜๋ฉด Recur๋กœ ํ•˜๊ฒŒ ๋œ๋‹ค. C๋ผ๋Š” ๋งคํŠธ๋ฆญ์Šค๋ฅผ ๋ฐ˜๋ฐ˜ 4๋“ฑ๋ถ„์„ ์ง„ํ–‰ํ•œ๋‹ค. A์™€ B๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Divide๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค. C๋ผ๋Š” ๋งคํŠธ๋ฆญ์Šค๋Š” A์™€ B ๋งคํŠธ๋ฆญ์Šค ๊ทธ๋ฃน์œผ๋กœ ๊ณฑํ•˜๊ฒŒ ๋œ๋‹ค. 

Element๋ฅผ ํ•˜๋‚˜ ๋‚จ๊ธธ ๋•Œ๊นŒ์ง€ ๊ณ„์† Divide๋ฅผ ํ•ด๋‚˜๊ฐ„๋‹ค. n = 1 ์ด ๋  ๋•Œ๊นŒ์ง€ ๋‚˜๋ˆ ์กŒ๋‹ค๋ฉด ๊ทธ๊ฒƒ์ด Base case๊ฐ€ ๋œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ–‰๋ ฌ ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค. ์ด๋•Œ function call์€ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ recur ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค. n == 1์ด ๋˜๋ฉด return ํ•˜๊ณ  ๊ณ„์† ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. C12๋„ ๋™์ผ ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰..!!

 

Recurrence equation์œผ๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

 

a) recurrence equation์„ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.

n์ด 1์ผ ๋•Œ์™€ n์ด 1 ๋ณด๋‹ค ํด ๊ฒฝ์šฐ๋กœ ๋‚˜๋ˆˆ๋‹ค 1์ธ ๊ฒฝ์šฐ Constant๊ฐ€ ๋œ๊ณ  1๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ, 8๋ฒˆ์„ ํ•จ์ˆ˜ ํ˜ธ์ถœํ•ด์•ผ ํ•˜๊ณ , ํ•œ๋ฒˆ ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ•  ๋•Œ๋งˆ๋‹ค n/2 x n/2 ๋งŒํผ ์‚ฌ์ด์ฆˆ call์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ Combine ํ•  ๋•Œ๋Š” ์–ผ๋งˆ๋‚˜ ์‚ฌ์šฉ์ด ๋๋Š”์ง€๋ฅผ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค. Combine ํ•  ๋•Œ, ๋”ํ•˜๊ธฐ๋ฅผ ํ†ตํ•ด์„œ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. n/2 x n/2 ๋งŒํผ ์ง„ํ–‰์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ์ฆ‰, ๊ทธ๋Ÿผ n^2๋งŒํผ ๋”ํ•˜๊ฒŒ ๋œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

 

 

b) Recursion Tree

T(n)์€ ์„ธํƒ€ n^2 ์ด๋ฏ€๋กœ cn^2 ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ณ  ์—ฌ๊ธฐ์„œ, 8๊ฐœ์˜ T(n/2) ๋งŒํผ ์ƒ๊ธฐ๊ฒŒ ๋œ๋‹ค. cn^2์€ ๋‹ค์‹œ 8๊ฐœ์˜ n ... ์ด๋Ÿฐ ๋ฐฉ์‹๋กœ T(1)๊นŒ์ง€ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ๋จผ์ € ์ง„ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ Recursion Tree์˜ Height๋ฅผ ๊ตฌํ•ด์•ผ ํ•œ๋‹ค.  ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ Height๋ฅผ ๊ตฌํ•˜๊ฒŒ ๋˜๊ณ  ๋ฐ‘์ด 2์ธ log๋ฅผ lg๋ผ๊ณ  ํ‘œํ˜„์„ ํ•œ๋‹ค. 

 

 

Master Theorem

 

 

Dynamic Programming
ํŠน๋ณ„ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์•„๋‹ˆ๋ผ ๋””์ž์ธ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋‹ค. Divide and conquer, merge sort๊ฐ€ ์žˆ๊ณ  pivot์„ ์ค‘์‹ฌ์œผ๋กœ ํ•˜๋Š” quick sort๊ฐ€ ์žˆ๋‹ค.
Incremental์€ Insertion, Selection, Bubble sorting์ด ์กด์žฌํ•œ๋‹ค. Backtracking์€ Maze Problem์—์„œ ๊ฐˆ๋ž˜๊ธธ์—์„œ ํ˜„์žฌ์˜ ์ƒํ™ฉ์„
์Šคํƒ์— ์ €์žฅํ•ด์„œ ๋’ค๋กœ ๋Œ์•„์˜ค๋Š” ๊ฒƒ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ตœ์ ํ™” ๋ฌธ์ œ์—์„œ ์‚ฌ์šฉ์„ ํ•œ๋‹ค. ์ตœ์ ํ™”๋œ ๊ฐ’์„ ์ฐพ๋Š” ๋ฌธ์ œ.
Minimization๊ณผ Maximizationํ•˜๋Š” ๋ฌธ์ œ์—์„œ ์‚ฌ์šฉ์ด ๋œ๋‹ค.

Optimization
shortest path Problem์„ ์ฐพ์„ ๋•Œ, ์„œ์šธ๊ณผ ๋ถ€์‚ฐ์œผ๋กœ ์ด๋™ํ•  ๋•Œ ๋Œ€์ „์ด๋ผ๋Š” ๊ณณ์„ ๋ฐฉ๋ฌธํ•˜๊ธฐ๋กœ ์„ ํƒ์„ ํ•˜๋ฉด ๋Œ€์ „๋ถ€ํ„ฐ ์„œ์šธ๊นŒ์ง€
๊ฐ€๋Š” ๊ฒƒ ์ค‘ ์–ด๋Š๊ฒƒ์ด Shortest์ธ๊ฐ€, ๋ถ€์‚ฐ๋ถ€ํ„ฐ ๋Œ€์ „๊นŒ์ง€๋Š” ์–ด๋Š ๊ฒฝ๋กœ๊ฐ€ shortest์ธ๊ฐ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ฒŒ ๋œ๋‹ค. Subproblem์„ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.
์ตœ์ ์˜ ์„ ํƒ์ด ๋ฌด์—‡์ธ์ง€ ์‚ฌ์‹ค ์•Œ๊ธฐ ์–ด๋ ต๋‹ค. ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ๋‹ค ๋”ฐ์ ธ๋ณด๋Š” ๊ฒƒ์ด๋‹ค. ์„ ํƒ์— ๋”ฐ๋ผ์„œ
์–ด๋–ค ๊ฒƒ์ด ์ตœ๋‹จ ๊ฑฐ๋ฆฌ์ธ์ง€ ์„ ํƒ์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๊ณ  ํ•˜๊ธฐ๋Š” ์–ด๋ ต๊ณ  Brute Force๋ผ๊ณ  ํ•œ๋‹ค. ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ๋”ฐ์ง€๋Š” ๊ฒƒ์ด๋‹ค.
์ด๋ ‡๊ฒŒ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋”ฐ์ง€์ง€ ์•Š๊ณ  ์–ด๋–ป๊ฒŒ ์ตœ์ ํ™” ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๊ฐ€๋ฅผ ์—ฐ๊ตฌํ•œ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๊ฐ€ Dynamic Program์ด๋‹ค.

Dynamic Programming
DP๋Š” Divide and conquer๋ž‘ ๋ญ๊ฐ€ ๋‹ค๋ฅธ์ง€ ์ƒ๊ฐ์ด ๋“ค ์ˆ˜ ์žˆ๋‹ค. Solution S๋ฅผ ๊ตฌํ•˜๋Š”๋ฐ S๋ณด๋‹ค ์ž‘์€ ๋ฌธ์ œ์˜ solution์„ ๋จผ์ € ๊ตฌํ•˜๊ฒŒ ๋œ๋‹ค.
์—ฌ๊ธฐ๊นŒ์ง€๋Š” Divide and conquer์ด๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์ ์ด ์กด์žฌํ•œ๋‹ค. top down ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ผ bottom up fashion ํ˜•์‹์„ ๋”ฐ๋ฅธ๋‹ค.

Fibonacci Number Example
Divide and conquer๋Š” recursiveํ•˜๊ฒŒ ํ’€๊ฒŒ ๋˜๊ณ  DP๋Š” Iterativeํ•˜๊ฒŒ ์ ‘๊ทผํ•œ๋‹ค. Divide and conquer์˜ ๊ฒฝ์šฐ n๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ 0๊นŒ์ง€
๋‚ด๋ ค๊ฐ€๊ฒŒ ๋˜๋Š” top bottom ํ˜•์‹์„ ๋”ฐ๋ฅธ๋‹ค. ์ถœ๋ฐœ ์ง€์ ์ด top์ด ๋œ๋‹ค. DP์˜ ๊ฒฝ์šฐ 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ n๊นŒ์ง€ ์˜ฌ๋ผ๊ฐ€๋Š” bottom up
ํ˜•์‹์„ ๋”ฐ๋ฅด๊ฒŒ ๋œ๋‹ค. 

Recalculation in Divide and Conquer
Top์—์„œ Bottom์œผ๋กœ ๋‚ด๋ ค๊ฐ€๋Š” ๋ฐฉ์‹, ๊ฐ™์€ ๊ฒƒ์„ ์—ฌ๋Ÿฌ๋ฒˆ ๊ณ„์‚ฐํ•˜๊ฒŒ ๋˜๋Š” ๊ตฌ์กฐ์ด๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์œ„์—์„œ ์•„๋ž˜๋กœ ์ž˜๊ฒŒ ๋‚˜๋ˆ„์–ด ์‹œ์ž‘ํ•˜๊ธฐ
๋•Œ๋ฌธ์ด๋‹ค. DP์˜ ๊ฒฝ์šฐ 0๊ณผ 1์— ๊ฐ’์„ ์ง‘์–ด๋„ฃ๊ณ  ๊ทธ ๋‹ค์Œ ๋‹ค์Œ index ๊ฐ’์— ๋“ค์–ด๊ฐ€๊ฒŒ ๋˜๋Š” value๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ณผ์ •์„ ๋˜ ๋‹ค์‹œ ์ง„ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€
์กด์žฌํ•˜์ง€ ์•Š๋‹ค. 

Divide and Conquer vs DP
Divide and Conquer๋Š” ๊ฐ™์€ ๊ณ„์‚ฐ ๊ณผ์ •์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. DP์˜ ๊ฒฝ์šฐ ํ•œ ๋ฒˆ ๊ณ„์‚ฐ๋œ ๊ฐ’์„ ๊ณ„์† ํ™œ์šฉํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—
์—ฐ์‚ฐ๋Ÿ‰์ด ๋” ์ ๋‹ค. 

Matrix Chain Multiplication
ํ–‰๋ ฌ์˜ ๊ณฑ์„ ์‚ดํŽด๋ณด์ž. ๋จผ์ € 1๊ณผ 2๊ณ„์‚ฐ ํ•  ํ•„์š” ์—†์ด 2์™€ 3์„ ๋จผ์ € ๊ณฑํ•ด์„œ ์ฐจ์ด๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

The cost of Multiplying Two Matrices
A: 2x3 B: 3x4๋ผ๊ณ  ํ•˜๋ฉด 2x4 ํ–‰๋ ฌ์ด ๋‚˜์˜จ๋‹ค. ๊ณฑ์…ˆ์ด ์ด p x q x r ๋งŒํผ ๊ณฑ์…ˆ์ด ์ง„ํ–‰๋œ๋‹ค. 

The cost of Multiplying Three Matrics
๊ณฑํ•˜๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ณฑ์…ˆ์˜ ํฌ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค. 

More Matrices More ways to Parenthesis
ํ–‰๋ ฌ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚  ์ˆ˜๋ก ๊ด„ํ˜ธ๋ฅผ ์น˜๋Š” ๋ฐฉ๋ฒ•์ด ๋งค์šฐ ๋‹ค์–‘ํ•ด์ง„๋‹ค. ์–ด๋–ค ๋ฐฉ๋ฒ•์„ ํƒํ•˜๋Š”์ง€์— ๋”ฐ๋ผ ๊ณฑํ•˜๊ธฐ ํšŸ์ˆ˜๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

Example
์ž‘๊ฒŒ๋Š” 6500์ด๋ฒˆ ๋งŽ๊ฒŒ๋Š” 47500์„ ๊ณ„์‚ฐํ•ด์•ผ ๋˜๋Š” ์—ฐ์‚ฐ๋Ÿ‰์˜ ์ฐจ์ด๊ฐ€ ์กด์žฌํ•œ๋‹ค. ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋‹ค ๋”ฐ์ง€๋Š” ๊ฒฝ์šฐ๋Š” Brute Force๊ฐ€ ๋œ๋‹ค.
DP๋Š” ๊ทธ๊ฒƒ๋ณด๋‹ค ์ ๊ณ  ๋น ๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. 

Number of Parenthesizations
ํ–‰๋ ฌ์ด n๊ฐœ ์ผ๋•Œ ๊ณฑ์— ๋Œ€ํ•œ ๊ฒƒ์„ ์ƒ๊ฐํ•ด๋ณด์ž. A1๊ณผ A2๋ฅผ ๊ณฑํ•˜๋Š” ๋ฐฉ๋ฒ•. ์ผ๋ฐ˜์ ์œผ๋กœ n๊ฐœ์˜ ํ–‰๋ ฌ์„ ๊ณฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ P1Pn-1, P2Pn-2...
Pn-1P1 ๊นŒ์ง€ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ด„ํ˜ธ๋ฅผ ์น˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ฒƒ์œผ๋กœ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋‹ค. Pn์€ 2^n-1 ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.  2^n / 2๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์€ ๊ฒƒ์ด๋ฏ€๋กœ
๋น… ์˜ค๋ฉ”๊ฐ€ 2^n์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. Brute force์˜ ๊ฒฝ์šฐ 2^n ์ •๋„ ๊ณ„์‚ฐ์„ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. n์ด ์กฐ๊ธˆ๋งŒ ์ปค์ง€๋”๋ผ๋„ ์–ด๋งˆ์–ด๋งˆ ํ•˜๊ฒŒ
์ปค์ง€๊ฒŒ ๋œ๋‹ค.

Optimal Matrix chain multiplication
๊ณฑํ•˜๊ธฐ์˜ ํšŸ์ˆ˜๋ฅผ ์ตœ์†Œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ•˜๋Š” ๊ฒƒ์ด BP๋กœ ํ•˜๊ฒŒ ๋˜๋ฉด ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋”ฐ์ ธ์•ผ ํ•˜๊ณ  Computational infeasibleํ•˜๋‹ค๊ณ  ํ‘œํ˜„ํ•œ๋‹ค.
์ตœ์†Œํ•œ 2^n๋งŒํผ ๊ฑธ๋ฆฐ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

Recalculation:  The Source of All Evil
ํ•œ ๋ฒˆ ๊ณ„์‚ฐํ•œ ๊ฒƒ์ด ๋ฐ˜๋ณต ๊ณ„์‚ฐ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

Memoization: Avoiding Recalculation
DP์˜ ๋ฐฉ์‹๊ณผ ๋™์ผํ•˜์ง€๋งŒ Top down ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

Fibinacci Number
Recursion์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์€ ๋™์ผํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์ ์€ ์›ํ•˜๋Š” ๊ฐ’์ด ์กด์žฌํ•œ๋‹ค๋ฉด true๋ผ๋ฉด ์ €์žฅ๋œ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜ค๋ฏ€๋กœ์จ recalculation์„ ์•ˆํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
TOP DOWN ๋ฐฉํ–ฅ์„ฑ์€ ์œ ์ง€์‹œํ‚จ๋‹ค. 

Structure of Optimal Solution
์–ด๋–ค ๊ฒฝ์šฐ์— DP๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์‚ดํŽด๋ณด๊ณ ์ž ํ•œ๋‹ค. Ai๋ถ€ํ„ฐ Aj ๊นŒ์ง€์˜ ํ–‰๋ ฌ์„ ๊ณฑํ•˜๊ฒŒ ๋  ๋•Œ Ak๋ผ๋Š” ํ–‰๋ ฌ์„ ๊ธฐ์ค€์œผ๋กœ ๊ด„ํ˜ธ๋ฅผ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๊ณ 
๊ณ„์† ๋น„์Šทํ•˜๊ฒŒ ๋‚˜๋‰˜์–ด ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. 

ํฌํ•ญ๋ถ€ํ„ฐ ์„œ์šธ๊นŒ์ง€ ๊ฐ„๋‹ค๊ณ  ํ•ด๋ณด์ž. ํฌํ•ญ์—์„œ ๋Œ€๊ตฌ, ๊น€์ฒœ, ๋Œ€์ „, ์ฒญ์ฃผ, ์ˆ˜์›์„ ๊ฑฐ์ณ์„œ ์„œ์šธ์„ ๊ฐ”๋‹ค๊ณ  ํ•˜์ž. ์ด๊ฒŒ Optimal ํ•˜๋‹ค๊ณ  ๊ฐ€์ •.
ํฌํ•ญ์—์„œ ๋Œ€์ „์œผ๋กœ ๊ฐ€๊ณ  ๋Œ€์ „์—์„œ ์„œ์šธ๋กœ ๊ฐ€๋Š” ์„ธ๋ถ€ ๋ฌธ์ œ๊ฐ€ ๋˜ ์ƒ๊ธฐ๊ฒŒ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋˜ ํฌํ•ญ์—์„œ ๋Œ€์ „์œผ๋กœ ๊ฐ€๊ฒŒ ๋˜๋Š” ๋ฌธ์ œ์˜ Sub Problem์ด ์ƒ๊ธด๋‹ค.
Sub ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” Optimal ํ•œ ๋ฐฉ๋ฒ•๋„ Optimalํ•˜๊ฒŒ ์ •ํ•ด์ ธ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

When can we apply Dynamic Programming
Optimal Substructure, sub Problem๋„ Optimalํ•œ ๋ฐฉ๋ฒ•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
Optimal Overlapping Subproblems, ์ž‘์€ ๋ฌธ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. 

Princilple of optimality