๐Ÿ“ข ๋™์ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • ๋™์ ํ”„๋กœ๋ž˜๋ฐ(DP, Dynamic Programming) : ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„์˜ ์ผ๋ฐ˜์  ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜
  • ์–ธ๋œป ๋ณด๊ธฐ์— ๋งŽ์€ ์‹œ๊ฐ„( ์‹ฌ์ง€์–ด ์ง€์ˆ˜ ์‹œ๊ฐ„ )์ด ์†Œ์š”๋  ๊ฒƒ ๊ฐ™์€ ๋ฌธ์ œ์— ์ฃผ๋กœ ์ ์šฉํ•œ๋‹ค.
  • ์ ์šฉ์˜ ์กฐ๊ฑด์€ :

    ๐Ÿ‘‰ ๋ถ€๋ฌธ์ œ ๋‹จ์ˆœ์„ฑ(Simple Subproblems) : ๋ถ€๋ฌธ์ œ๋“ค์ด j,k,l,m ๋“ฑ๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐœ์˜ ๋ณ€์ˆ˜๋กœ ์ •์˜ ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ
    ๐Ÿ‘‰ ๋ถ€๋ฌธ์ œ ์ตœ์ ์„ฑ(Optimality Subproblems) : ์ „์ฒด ์ตœ์ ์น˜๊ฐ€ ์ตœ์ ์˜ ๋ถ€๋ฌธ์ œ๋“ค์— ์˜ํ•ด ์ •์˜๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ
    ๐Ÿ‘‰ ๋ถ€๋ฌธ์ œ ์ค‘๋ณต์„ฑ(Overlap Subproblems) : ๋ถ€๋ฌธ์ œ๋“ค์ด ๋…๋ฆฝ์ ์ด ์•„๋‹ˆ๋ผ ์ƒํ˜ธ ๊ฒน์ณ์งˆ ๊ฒฝ์šฐ ( ์ฆ‰, ์ƒํ–ฅ์‹์œผ๋กœ ๊ตฌ์ถ• )

  • ๋Œ€ํ‘œ์  ์˜ˆ์‹œ

    ๐Ÿ‘‰ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜(Fibonacci progression)์—์„œ N-๋ฒˆ์งธ ์ˆ˜ ์ฐพ๊ธฐ
    ๐Ÿ‘‰ ๊ทธ๋ž˜ํ”„์˜ ์ดํ–‰์ ํ์‡„ ๊ณ„์‚ฐํ•˜๊ธฐ

  • ๋™์ ํ”„๋กœ๊ทธ๋ž˜๋ฐ vs ๋ถ„ํ• ํ†ต์น˜๋ฒ•

    ๊ณตํ†ต์ 

    ๐Ÿ‘‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„๊ธฐ๋ฒ•์˜ ์ผ์ข…
    ๐Ÿ‘‰ ๋ฌธ์ œ๊ณต๊ฐ„ : ์›์ -๋ชฉํ‘œ์  ๊ตฌ์กฐ ( ์›์  : ๋ฌธ์ œ์˜ ์ดˆ๊ธฐ ๋˜๋Š” ๊ธฐ์ดˆ์ง€์  / ๋ชฉํ‘œ์  : ์ตœ์ข…ํ•ด๊ฐ€ ์š”๊ตฌ๋˜๋Š” ์ง€์  )

    ์ฐจ์ด์ 

    ๐Ÿ‘‰ ๋ฌธ์ œํ•ด๊ฒฐ ์ง„ํ–‰ ๋ฐฉํ–ฅ

    ๋™์ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(๋‹จ๋ฐฉํ–ฅ) : ์›์  -> ๋ชฉํ‘œ์ 
    ๋ถ„ํ• ํ†ต์น˜๋ฒ•(์–‘๋ฐฉํ–ฅ) : ๋ชฉํ‘œ์  -> ์›์  -> ๋ชฉํ‘œ์  ( ๋‹จ, ํ•ด๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ์‚ฐ์„ ์ง„ํ–‰, ๋ฐฉํ–ฅ์€ ์›์ ->๋ชฉํ‘œ์  )

    ์„ฑ๋Šฅ

    ๐Ÿ‘‰ ๋™์ ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ๋‹จ๋ฐฉํ–ฅ ํŠน์„ฑ๋•Œ๋ฌธ์— ์ข…์ข… ํšจ์œจ์ 
    ๐Ÿ‘‰ ๋ถ„ํ• ํ†ต์น˜๋ฒ• : ๋ถ„ํ•  ํšŒ์ˆ˜(๋ณดํ†ต 2๋ถ„ํ• ์„ ํ•œ๋‹ค.) , ์ค‘๋ณต์—ฐ์‚ฐ ์ˆ˜ํ–‰ ํšŒ์ˆ˜์— ๋”ฐ๋ผ ๋‹ค๋ฆ„
  • ์ด๋ฆ„์€ "๋™์ "ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด์ง€๋งŒ, ์‹ค์ œ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์•„๋Š” "๋™์ ", ๊ทธ๋•Œ๊ทธ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ทธ๋Ÿฐ ์˜๋ฏธ๋Š” ์•„๋‹ˆ๋‹ค.
    ํ•˜๋‚˜ ๊ตฌํ•œ ๊ฒƒ์€, ๋‹ค๋ฅผ ๋•Œ, ์‚ฌ์šฉํ•˜๋Š” ์˜๋ฏธ์ผ ๋ฟ์ด๊ณ , ์ด๋Ÿฌํ•œ ๊ธฐ๋ฒ•์˜ ์ด๋ฆ„์„ ์ง€์€ ์‚ฌ๋žŒ์ด ๊ทธ๋ƒฅ "๋™์ ํ”„๋กœ๊ทธ๋ž˜๋ฐ"์ด๋ผ ์ž‘๋ช…ํ•œ ๊ฒƒ ์ผ ๋ฟ์ด๋‹ค. ์˜คํ•ดํ•˜์ง€๋ง์ž.

๐Ÿ“ข  ๋™์ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์˜ˆ์‹œ

  • N-๋ฒˆ์งธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜ ์ฐพ๊ธฐ : ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด(Fibonacci Progression)์€ i = 0,1์— ๋Œ€ํ•ด f(i) = 1์ด๋ฉฐ, i >= 2 ์— ๋Œ€ํ•ด
    f(i) = f(i-1) + f(i-2)์ธ ์ˆ˜์—ด์ด๋‹ค.
  • ์ฆ‰, f(0) = 1, f(1) = 1, f(2) = 2, f(3) = 3, f(4) = 5, f(5) = 8, .......
  • f(n), ์ฆ‰ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์˜ n-๋ฒˆ์งธ ์ˆ˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด, ์ •์˜๋กœ๋ถ€ํ„ฐ ์ง์ ‘ ์žฌ๊ท€์•Œ๊ณ ๋ฆฌ์ฆ˜ f๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ,
    ๋ถˆํ–‰ํžˆ๋„ ์ง€์ˆ˜์‹œ๊ฐ„(exponential time)์— ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ๋„ˆ๋ฌด๋‚˜ ๋น„ํšจ์œจ์ ์ด๋‹ค !!
  • ์ด๋ฅผ, ๋™์ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๊ธฐ์ดˆํ•˜์—ฌ f(n)์„ ์ฐพ๋Š” ๋น„์žฌ๊ท€, ์„ ํ˜•์‹œ๊ฐ„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋‹ค์Œ ๋‘ ๋ฒ„์ ผ์œผ๋กœ ์ž‘์„ฑํ•ด๋ณด์ž.

    ๐Ÿ‘‰ 1. ์„ ํ˜•๊ณต๊ฐ„์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฒ„์ ผ
    ๐Ÿ‘‰ 2. ์ƒ์ˆ˜๊ณต๊ฐ„์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฒ„์ ผ
Alg f(n)		// ์„ ํ˜• ๊ณต๊ฐ„

if(n == 0 || n == 1)
    return 1

A[0] <- 1
A[1] <- 1
for i <- 2 to n
    A[i] <- A[i-1] + A[i-2]

return A[n]

=============================

Alg f(n)		// ์ƒ์ˆ˜ ๊ณต๊ฐ„

if(n == 0 || n == 1)
    return 1

a <- 1
b <- 1
for i <- 2 to n
    c <- a + b
    a <- b
    b <- c

return c

 

728x90
๋ฐ˜์‘ํ˜•

+ Recent posts