🧩 Dynamic Programing

sery270Β·2021λ…„ 2μ›” 19일
1

Algorithm

λͺ©λ‘ 보기
4/5

μ•ˆλ…•ν•˜μ„Έμš” :) μ˜€λŠ˜μ€ Dynamic Programing(DP)에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. ν”Όλ³΄λ‚˜μΉ˜ 수λ₯Ό κ΅¬ν•˜λŠ” λ°©λ²•μ²˜λŸΌ, νŠΉμ • 문제λ₯Ό μ€‘λ³΅λ˜λŠ” μž‘μ€ 문제둜 μͺΌκ°œμ–΄ ν’€ λ•Œ, 효율적인 λ°©λ²•μœΌλ‘œ μ‚¬μš©λ˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. BF μ•Œκ³ λ¦¬μ¦˜μ—μ„œ ν•œ μΈ΅ 더 λ°œμ „λœ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ μ ‘κ·Όν•˜μ‹œλ©΄ μ’‹μŠ΅λ‹ˆλ‹€. 그럼 μ˜€λŠ˜λ„ ν™”μ΄νŒ… μž…λ‹ˆλ‹€πŸŒΏ

Dynamic Programing μ΄λž€ ?

큰 문제λ₯Ό μž‘μ€ 문제둜 λ‚˜λˆ μ„œ ν‘ΈλŠ” μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ, 주어진 문제의 크기(N)에 λŒ€ν•œ 점화식과 λ©”λͺ¨μ œμ΄μ…˜ 기법을 톡해 문제λ₯Ό ν•΄κ²°ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€.

뢄할정볡과 λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°μ˜ 차이점

  • 뢄할정볡 : 큰 문제λ₯Ό λ‚˜λˆˆ μž‘μ€ λ¬Έμ œκ°€ 쀑볡이 λ˜μ§€ μ•Šμ•„, λͺ¨λ“  μž‘μ€ 문제λ₯Ό ν•œ λ²ˆμ”© ν‘ΈλŠ” λ°©λ²•μž…λ‹ˆλ‹€.
  • λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ° : 큰 문제λ₯Ό λ‚˜λˆˆ μž‘μ€ λ¬Έμ œκ°€ 쀑볡이 λ˜μ–΄, μ—¬λŸ¬λ²ˆ λ‚˜μ˜€λŠ” 각각의 μž‘μ€ λ¬Έμ œλ“€μ€ 단 ν•œ λ²ˆμ”©λ§Œ ν‘ΈλŠ” λ°©λ²•μž…λ‹ˆλ‹€.

DP 풀이 λŒ€μƒμ˜ νŠΉμ„± 2가지

Overlapping Subproblem

  • Overlapping Subproblemλž€ 큰 문제λ₯Ό λ‚˜λˆˆ μž‘μ€ λ¬Έμ œλ“€μ΄ κ²ΉμΉ˜λŠ” νŠΉμ„±μ„ μ˜λ―Έν•©λ‹ˆλ‹€.

  • 큰 λ¬Έμ œμ™€ μž‘μ€ 문제λ₯Ό 같은 λ°©λ²•μœΌλ‘œ ν’€ 수 μžˆμŠ΅λ‹ˆλ‹€.

    β†’ 문제λ₯Ό μž‘μ€ 문제둜 μͺΌκ°€ 수 μžˆμŠ΅λ‹ˆλ‹€.

Optimal Substructure (졜적 λΆ€λΆ„ ꡬ쑰)

  • Optimal Substructureλž€ 문제의 크기와 μ‹œμ μ— 상관없이, ν•œ 문제의 정닡은 항상 κ°™λ‹€λŠ” νŠΉμ„±μ„ μ˜λ―Έν•©λ‹ˆλ‹€.

  • μ–΄λ– ν•œ μž‘μ€ 문제λ₯Ό ν’€λ˜, κ·Έ 전에 ν‘Ό νŠΉμ • μž‘μ€ 문제의 정닡은 λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€.

    β†’ 큰 문제의 정닡을 μž‘μ€ 문제의 정닡을 톡해 ꡬ할 수 μžˆμŠ΅λ‹ˆλ‹€. 즉, μž‘μ€ λ¬Έμ œλ“€μ˜ 정닡을 κ΅¬μ„±ν•˜μ—¬ 큰 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.


DP 핡심

  • Overlapping Subproblem

    β†’ 같은 λ¬Έμ œλ“€(μ€‘λ³΅λ˜λŠ” μž‘μ€ λ¬Έμ œλ“€)은 ν•œ λ²ˆμ”©λ§Œ ν’€μ–΄μ•Όν•©λ‹ˆλ‹€. 즉, λͺ¨λ“  μž‘μ€ 문제의 집합은 ν•œ λ²ˆμ”©λ§Œ ν’€λ €μ•Όν•©λ‹ˆλ‹€. (쀑볡이 μ—†λ‹€λŠ” 의미둜써의 집합)

  • Optimal Substructure

    β†’ 같은 λ¬Έμ œλ“€μ€ μ‹œμ μ΄λ‚˜ 크기에 상관없이, ꡬ할 λ•Œλ§ˆλ‹€ 정닡이 κ°™μœΌλ―€λ‘œ, 이전에 κ΅¬ν•œ 정닡듀을 μ €μž₯ν•΄λ†“μ•„μ•Όν•©λ‹ˆλ‹€. (Memoization)


DP 풀이 μˆœμ„œ

  1. λ¬Έμ œμ—μ„œ κ΅¬ν•˜κ³ μžν•˜λŠ” 것을 λ¬Έμž₯으둜 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 즉, λ’€μ—μ„œ μ„ΈμšΈ 점화식에 λŒ€ν•œ μ •μ˜λ₯Ό μ„Έμ›λ‹ˆλ‹€.

    N-2 번째 ν”Όλ³΄λ‚˜μΉ˜ μˆ˜μ™€ N-1 번째 ν”Όλ³΄λ‚˜μΉ˜ 수의 합인 N 번째 ν”Όλ³΄λ‚˜μΉ˜ 수

  2. ν•΄λ‹Ή λ¬Έμž₯μ—μ„œ λ“±μž₯ν•˜λŠ” λΆ€λΆ„ λ¬Έμ œλ“€μ„ μ •μ˜ν•©λ‹ˆλ‹€.

    N 번째 ν”Όλ³΄λ‚˜μΉ˜ μˆ˜μ— λŒ€ν•œ λΆ€λΆ„ 문제 : N-2 번째 ν”Όλ³΄λ‚˜μΉ˜ 수, N-1 번째 ν”Όλ³΄λ‚˜μΉ˜ 수

  3. μ•žμ„œ μ •μ˜ν•œ λ‚΄μš©λ“€μ„ μ‚¬μš©ν•˜μ—¬, μˆ˜μ‹μœΌλ‘œ 점화식을 ν‘œν˜„ν•˜κ³ , λ©”λͺ¨μ œμ΄μ…˜μ„ μœ„ν•œ 배열을 λ§Œλ“­λ‹ˆλ‹€.

    D[N] = D[N-1]+D[N-2]


DP κ΅¬ν˜„ 방법

  • λŒ€λΆ€λΆ„μ˜ λ¬Έμ œλŠ” 두 방법 λͺ¨λ‘λ‘œ ν•΄κ²°ν•  수 있고, μ‹œκ°„λ³΅μž‘λ„λ„ λΉ„μŠ·ν•˜κ²Œ λ‚˜μ˜€λ―€λ‘œ, μ–΄λŠ 것을 μ‚¬μš©ν•΄λ„ 상관이 μ—†μŠ΅λ‹ˆλ‹€. μžμ‹  μžˆλŠ” λ°©λ²•μœΌλ‘œ μ„ νƒν•΄μ„œ ν’€λ©΄ λ©λ‹ˆλ‹€.
  • λ‹€λ§Œ, 두 방법이 항상 μƒν˜Έ λŒ€μ²΄κ°€ κ°€λŠ₯ν•œ 것은 μ•„λ‹™λ‹ˆλ‹€. 두 방법을 κ΅¬λΆ„ν•΄μ„œ 문제λ₯Ό ν’€μ–΄μ•Όν•˜λŠ” κ²½μš°λ„ μžˆμŠ΅λ‹ˆλ‹€λ§Œ, μ΄λŠ” μ–΄λŠμ •λ„ λ‚œμ΄λ„κ°€ μžˆλŠ” λ¬Έμ œμ— λŒ€ν•œ λ‚΄μš©μ΄λ―€λ‘œ, 이 λΆ€λΆ„κΉŒμ§€ λŒ€λΉ„ν•œλ‹€λ©΄ 두 방법 λͺ¨λ‘ 골고루 μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

Top-Down

β†’ μž¬κ·€ ν•¨μˆ˜λ₯Ό μ‚¬μš© : νŠΉμ • 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ λΆ€λΆ„ λ¬Έμ œλ“€λΆ€ν„° ν•΄κ²°ν•΄λ‚˜κ°€λŠ” 방법

Bottom-Up

β†’ λ°˜λ³΅λ¬Έμ„ μ‚¬μš© : κ°€μž₯ μž‘μ€ λΆ€λΆ„ 문제의 μ²˜μŒλΆ€ν„° λκΉŒμ§€ μ°¨λ‘€λŒ€λ‘œ ν•΄κ²°ν•˜λŠ” 방법

profile
κ°œλ°œμ„Έλ¦¬μ˜ μ„±μž₯기🌿

0개의 λŒ“κΈ€