์ดํƒœํ™
ํ™'story
์ดํƒœํ™
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (171)
    • TW (39)
    • AI (47)
      • ์ž์—ฐ์–ด ์ฒ˜๋ฆฌ (10)
      • Kaggle (2)
      • Machine Learning (26)
      • Computer Vision (0)
      • Deep Learning (0)
      • ROS2 (7)
    • Computer Science (29)
      • Data Structure (0)
      • Algorithm (18)
      • Computer Architecture (5)
      • SOLID (0)
      • System Programing (6)
    • LOLPAGO (10)
      • ํ”„๋ก ํŠธ์—”๋“œ (10)
      • ๋ฐฑ์—”๋“œ (0)
    • BAEKJOON (2)
    • React (5)
    • ์–ธ์–ด (8)
      • C++ (8)
    • GIT (0)
    • MOGAKCO (19)
    • ๋ฏธ๊ตญ ์—ฌํ–‰๊ธฐ (3)
    • etc. (7)
      • Blog (2)
      • ์ฝœ๋ผํ†ค (2)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • computer architecture
  • ๊ธฐ๊ณ„ํ•™์Šต
  • algorithm
  • pytorch
  • baekjoon
  • computerscience
  • ๋ฐฑ์ค€
  • ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•
  • ๋”ฅ๋Ÿฌ๋‹
  • NLP
  • tw
  • ML
  • Ai
  • kaggle
  • ๋จธ์‹ ๋Ÿฌ๋‹
  • ROS2
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • LOLPAGO
  • react
  • C++

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
์ดํƒœํ™

ํ™'story

[Algorithm] Dynamic Programming(2) - LIS(Longest Increasing Subsequence)
Computer Science/Algorithm

[Algorithm] Dynamic Programming(2) - LIS(Longest Increasing Subsequence)

2022. 11. 17. 22:24

๐Ÿค” Dynamic Programming

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€ ํฐ ๋ฌธ์ œ๋ฅผ ์ž‘์€๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

 

๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜๋Š” ๋‹ค์–‘ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š”  LIS๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Dynamic Programming์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

 

 

 

๐Ÿ”Ž LIS(Longest Increasing Subsequence)

โœ๏ธSubsequence

๊ธธ์ด n ์ธ sequence (ordered list) $S = a_1, a_2, …, a_n$ ์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, sequence $S’ = a_{i1}, a_{i2}, .., a_{ik} ๊ฐ€ 1≤ i1 < i2 < … < ik ≤n$ ๋ฅผ ๋งŒ์กฑํ•  ๊ฒฝ์šฐ $S’$ ์„ $S$์˜ subsequence ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

๋˜ํ•œ $a_1 < a_2 < …< a_n$ ์ผ ๋•Œ, sequence S ๋Š” increasing sequence๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 

โœ๏ธ LIS

LIS๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด DP๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

์ด์ „ ํฌ์ŠคํŠธ์—์„œ ๋งํ•œ ํ•ด๊ฒฐ ๊ณผ์ •์„ ํ†ตํ•ด LIS๋ฅผ ๊ตฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

1. ๋ฌธ์ œ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•œ๋‹ค.

S๋ฅผ $a_1, a_2, ..., a_n$๋กœ ๊ตฌ์„ฑ๋œ Sequence๋ผ๊ณ  ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Problem : S์—์„œ ๊ฐ€์žฅ ๊ธด increasing subsequence์˜ ๊ธธ์ด ๊ตฌํ•˜๊ธฐ.

 

 

 

 

 

 

2.  ์ •์˜๋œ ๋ฌธ์ œ์— ๋Œ€ํ•œ subproblem ์„ ์ •์˜ํ•œ ๋’ค subproblem ์„ ์ด์šฉํ•œ recurrence relation ์„ ์„ธ์šด๋‹ค.

L(i) = S์˜ ์ฒซ i๊ฐœ์˜ element $a_1, a_2, … , a_i$ ๋กœ ์ด๋ฃจ์–ด์ง„ sequence ์—์„œ LIS ์˜ ๊ธธ์ด๋ผ๊ณ  ๋‘์ž.
L(i)๋ฅผ L(1), L(2), …, L(i-1) ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์„ ์ง€๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

 

L(i)๋ฅผ ์ฒซ i๊ฐœ์˜ element $a_1, a_2, … , a_i$ ๋กœ ์ด๋ฃจ์–ด์ง„ sequence ์—์„œ $a_i$ ๋กœ ๋๋‚˜๋Š”increasing subsequence ๋“ค ์ค‘ ๊ฐ€์žฅ ๊ธด subsequence์˜ ๊ธธ์ด๋ผ ํ•˜์ž

 

L(i)๋ฅผ ์œ„์™€ ๊ฐ™์ด ์ •์˜ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ recurrence relation์ด ๋งŒ์กฑํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

$$L(i) = 1 + max_{j < i, a_j < a_i}L(j)$$

 

๋˜ํ•œ ์ด ๊ฒฝ์šฐ S์˜ LIS์˜ ๊ธธ์ด๋Š” $max^n_{i=1}L(i)$๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

์œ„์˜ recurrence relation์—์„œ ์ค‘์š”ํ•œ ํฌ์ธํŠธ๋Š” "$a_i$๋กœ ๋๋‚˜๋Š”"์ž…๋‹ˆ๋‹ค.

 

์ด๋ฅผ ํ†ตํ•ด memoization์„ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

๐Ÿ‘‰ LIS ์ˆ˜๋„์ฝ”๋“œ

๋”๋ณด๊ธฐ

Subproblem $L(i)$๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ $L(1), ... , L(i-1)$์˜ ๊ฐ’์„ ์•Œ์•„์•ผ ํ•˜๋ฏ€๋กœ $L(1)$๋ถ€ํ„ฐ ์™ผ์ชฝ ๋ถ€ํ„ฐ ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

3. Memoizaion ์„ ์ด์šฉํ•˜์—ฌ recurrence relation ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

  - ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฌผ๋“ค์„ ์ €์žฅํ•  data structure๋ฅผ ๊ณ ๋ฆ…๋‹ˆ๋‹ค. (๋ณดํ†ต n ์ฐจ์› array ์‚ฌ์šฉ.)

     → 1์ฐจ์› array๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด $L(i)$๊ฐ’์„ ์ €์žฅํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  - Subproblem ๋“ค ๊ฐ„์˜ dependency๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ : $F_n$ ์„ ๊ตฌํ•˜๋ ค๋ฉด ์–ด๋–ค subproblem์˜ ๋‹ต๋“ค์„ ๊ณ„์‚ฐํ•ด ๋†“์•„์•ผ ํ•˜๋Š”๊ฐ€?) 

     → $L(i)$๋Š” $L(j)$์˜ ๊ฐ’์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค.
  - Dependency ์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ subproblem ๋“ค์˜ ๋‹ต์„ ๊ตฌํ•˜๋Š” ์ˆœ์„œ๋ฅผ ์ •ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ฅผ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์ดํ•ดํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

 

 

 

 

 

LIS์˜ ๊ธธ์ด = L(7) = L(8) = 4

 

- ์‹ค์ œ LIS ๋Š” $L(i) = L(j)+1$ ๋กœ ์—…๋ฐ์ดํŠธ ํ•  ๋•Œ๋งˆ๋‹ค $a_i$ ๋กœ ๋๋‚˜๋Š” LIS ์˜ ์ง์ „ element ๊ฐ€ $a_j$๋ผ๋Š” ์‚ฌ์‹ค์„ ๋”ฐ๋กœ array ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.(์œ„ ์˜ˆ์‹œ์˜ pre)

 

์ด ๊ฒฝ์šฐ S์˜ LIS ๊ฐ€ max ์—์„œ ๋๋‚œ๋‹ค๋ฉด $S_max$ ๋กœ๋ถ€ํ„ฐ pre ๋ฅผ ๋”ฐ๋ผ ์—ญ์œผ๋กœ ์ถ”์ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

 

4. Time complexity๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

$L(i)$๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ ์กฐ๊ฑด์— ๋งž๋Š” $L(j)$ ๊ฒ€์ƒ‰ → $O(i - 1)$

 

์ฆ‰, i๋ฒˆ์งธ element๋ฅผ ๋ถ„์„ํ•  ๋•Œ ๋งˆ๋‹ค i-1๋ฒˆ์˜ ์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ด ์‹œ๊ฐ„๋ณต์žก๋„ → $O(1 + 2 + ... + n-1) = O(n^2)$

 

๋ชจ๋“  $L(i)$ ๊ณ„์‚ฐ ๋’ค, ํ•ด๋‹น ๊ฐ’์ด ๊ฐ€์žฅ ํฐ i๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. → $O(n)$

 

์ด ์‹œ๊ฐ„๋ณต์žก๋„ $O(n^2)$

 

 

 

์ฐธ๊ณ ๋กœ LIS๋ฅผ ๊ตฌํ•˜๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ $O(nlogn)$ ์ž…๋‹ˆ๋‹ค.

 

 

 

 

 

 

โœ๏ธ LIS๋ฅผ ๊ตฌํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•

DAG๋ฅผ ์ด์šฉํ•˜์—ฌ LIS๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋Š” ์•„๋ž˜์˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

https://www.geeksforgeeks.org/find-longest-path-directed-acyclic-graph/

 

Longest Path in a Directed Acyclic Graph - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

 

 

 

 

 

๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” Edit Distance ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

'Computer Science > Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Algorithm] Dynamic Programming(4) - ๋ฒจ๋งŒํฌ๋“œ(Bellman-Ford)  (0) 2022.11.19
[Algorithm] Dynamic Programming(3) - Edit Distance(ํŽธ์ง‘๊ฑฐ๋ฆฌ)  (0) 2022.11.19
[Algorithm] Dynamic Programming(1) - Warm Up  (0) 2022.11.15
[Algorithm] ๋ถ„ํ• ์ •๋ณต(4) - Selection  (0) 2022.10.20
[Algorithm] ๋ถ„ํ• ์ •๋ณต(3) - Matrix Multiplication  (0) 2022.10.20
    'Computer Science/Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Algorithm] Dynamic Programming(4) - ๋ฒจ๋งŒํฌ๋“œ(Bellman-Ford)
    • [Algorithm] Dynamic Programming(3) - Edit Distance(ํŽธ์ง‘๊ฑฐ๋ฆฌ)
    • [Algorithm] Dynamic Programming(1) - Warm Up
    • [Algorithm] ๋ถ„ํ• ์ •๋ณต(4) - Selection
    ์ดํƒœํ™
    ์ดํƒœํ™
    ๊ณต๋ถ€ํ•˜์ž ํƒœํ™์•„

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”