๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿงฉ Algorithm/๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ (Dynamic Programming)

by HelloRabbit 2023. 6. 13.
728x90

Goal

1. ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ดํ•ดํ•˜๊ธฐ
2. Top-down๊ณผ bottom-up ๋ฐฉ๋ฒ• ์•Œ์•„๋ณด๊ธฐ

 

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Dynamic Programing)์ด๋ž€?

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€ ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ ๊ทธ ๋ฌธ์ œ๋ฅผ ๋” ์ž‘์€ ๋‹จ์œ„์˜ ๋ฌธ์ œ๋“ค๋กœ ์ชผ๊ฐœ์„œ ์ž‘์€ ๋ฌธ์ œ๋ถ€ํ„ฐ ํ’€์–ด๋‚˜๊ฐ€๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋” ์ž‘์€ ๋‹จ์œ„๋กœ ์ชผ๊ฐœ์ง„ ๋ฌธ์ œ๋ฅผ ํ’€์–ด์„œ ์–ป์€ ๊ฒฐ๊ณผ๋กœ ์›๋ž˜ ๋ฌธ์ œ์˜ ํ•ด๋‹ต์— ์ ์  ๋” ๊ฐ€๊นŒ์›Œ์ง€๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ—›์ ์€ ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋‹จ์œ„๋กœ ์ชผ๊ฐค ์ˆ˜ ์žˆ์„ ๋•Œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ํ”ํ•œ ์˜ˆ์ œ๊ฐ€ ๋ฐ”๋กœ ํ”ผ๋ณด๋‚˜์น˜ ์ˆซ์ž์ด๋‹ค. ํ”ผ๋ณด๋‚˜์น˜ ์ˆซ์ž๋Š” ๊ทธ ์ „์— ์˜ค๋Š” ๋‘ ์ˆซ์ž๋ฅผ ๊ณ„์†ํ•ด์„œ ๋”ํ•ด ๋‚˜๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— n๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์•Œ์•„๋‚ด๊ธฐ ์œ„ํ•ด์„  ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ณ„์† ๋”ํ•ด์˜ค๋ฉด ๋œ๋‹ค. ๋‘ ์ˆซ์ž์”ฉ ๋”ํ•˜๋Š” ์ž‘์€ ๋‹จ์œ„์˜ ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๋ณด๋ฉด n๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ์‹์— ์–ธ์  ๊ฐ€๋Š” ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค!

 

์ž๋ฆฌ F[0] F[1] F[2] F[3] F[4] F[5] ... F[n]
์ˆซ์ž 0 1 1 2 3 5 ... F[n-1] + F[n-2]

 

Top-down vs. Bottom-up

Top-down (memoization)

Top-down์€ memoization ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Memoization์ด๋ž€ ์ž‘์€ ๋‹จ์œ„์˜ ๋ฌธ์ œ๋“ค์˜ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•ด์„œ ์ด ๊ฒฐ๊ณผ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ๋‹ค์‹œ ๊ณ„์‚ฐํ•  ํ•„์š” ์—†์ด ๋ฐ”๋กœ ์ €์žฅํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. Top-down์€ ์ค‘๊ฐ„ ๋‹จ๊ณ„๋ฅผ ์ €์žฅํ•˜๋ฉด์„œ ์ง„ํ–‰ํ•˜๋Š” ์žฌ๊ท€ํ•จ์ˆ˜์™€ ๊ฐ™๋‹ค.

 

์œ„์—์„œ ์„ค๋ช…ํ•œ ํ”ผ๋ณด๋‚˜์น˜ ์ˆซ์ž๋ฅผ top-down ๋ฐฉ์‹์œผ๋กœ ํ‘ผ๋‹ค๋ฉด ์•„๋ž˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ์ƒ‰์ด ์น ํ•ด์ง„ ๋ถ€๋ถ„์€ ๊ฒน์น˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ๋ฒˆ๋งŒ ๊ณ„์‚ฐํ•ด ๋†“์œผ๋ฉด ๊ทธ ์ดํ›„์— ํ•„์š”ํ•  ๋•Œ๋Š” ๊ณ„์‚ฐ ์—†์ด ๋ฏธ๋ฆฌ ์ €์žฅํ•ด ๋†“์€ ๊ฐ’์„ ๊ฐ–๋‹ค ์“ฐ๋ฉด ๋œ๋‹ค.

Top-down (memoization) ๋ฐฉ์‹

 

Bottom-up (tabulation)

Bottom-up์€ tabulation์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š”๋ฐ ๊ฐ€์žฅ ์ž‘์€ ๋‹จ๊ณ„๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์Œ“์•„ ์˜ฌ๋ ค๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค. ํ”ผ๋ณด๋‚˜์น˜ ์ˆซ์ž๋ฅผ ํ’€ ๋•Œ ์•„๋ž˜์ฒ˜๋Ÿผ Fib(0) ๊ณผ Fib(1)์ด ๊ฐ๊ฐ 0๊ณผ 1๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์„ ์ด์šฉํ•ด ์ˆœ์„œ๋Œ€๋กœ Fib(2)๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ์ €์žฅ๋œ ๊ฐ’๋“ค๋กœ Fib(3)์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค.

Bottom-up (tabulation) ๋ฐฉ์‹

 

Top-down๊ณผ Bottom-up์˜ ์ฐจ์ด

์ฐจ์ด์  Top-down (memoization) Bottom-up (tabulation)
์•Œ๊ณ ๋ฆฌ์ฆ˜ ์žฌ๊ท€ ๋ฐฉ๋ฒ• (recursive) ๋ฐ˜๋ณต๋ฌธ (iterative)
์†๋„ ์žฌ๊ท€ ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ธˆ ๋” ๋Š๋ฆผ ๋ฐ˜๋ณต๋ฌธ์ด์—ฌ์„œ n ๊ฐœ์ˆ˜ ๋งŒํผ ๋Š˜์–ด๋‚จ
์ง„ํ–‰ ๋ฐฉํ–ฅ ํ’€๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ œ์—์„œ ์‹œ์ž‘ํ•ด์„œ base case (ํ”ผ๋ณด๋‚˜์น˜ ์˜ˆ์ œ์—์„œ Fib(1)๊ณผ Fib(0))๋กœ ๋‚ด๋ ค๊ฐ Base case์—์„œ ์‹œ์ž‘ํ•ด์„œ ํ’€๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ œ๋กœ ์˜ฌ๋ผ๊ฐ
๊ณต๊ฐ„ ํ™œ์šฉ ์žฌ๊ท€ ๋ฐฉ๋ฒ•์ด์—ฌ์„œ n ๊ฐœ์ˆ˜๊ฐ€ ํฌ๋ฉด stack overflow๊ฐ€ ๋ฐœ์ƒํ•ด ์ฝ”๋“œ๊ฐ€ ์ค‘๋‹จ๋จ ๋ฐ˜๋ณต๋ฌธ์ด์—ฌ์„œ ๋ฌธ์ œ ์—†์Œ

 

 

์ฐธ๊ณ 

https://www.spiceworks.com/tech/devops/articles/what-is-dynamic-programming/

https://www.enjoyalgorithms.com/blog/top-down-memoization-vs-bottom-up-tabulation

 

 

 

๋Œ“๊ธ€