[HUFS/Algorithm] LCS, Edit distance, ํ–‰๋ ฌ ๊ณฑ์…ˆ, LIS

๋ฐ•๊ฒฝ๋ฏผยท2023๋…„ 5์›” 18์ผ

[CS/Algorithm์ด๋ก ]

๋ชฉ๋ก ๋ณด๊ธฐ
11/15

DP๋ฅผ ํ™œ์šฉํ•œ ๋ฌธ์ œ๋“ค

๐Ÿ“š ๋ชฉ์ฐจ
1. LCS ๋ฌธ์ œ
2. ํŽธ์ง‘๊ฑฐ๋ฆฌ
3. ํ–‰๋ ฌ ๊ณฑ์…ˆ
4. LIS

1. LCS

LCS ๋ž€ Longest Common Subsequence ์˜ ์•ฝ์ž๋กœ ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด 2๊ฐœ๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ ๋‘ ๋ฌธ์ž์—ด ๋‚ด์˜ ๋ฌธ์ž๋ฅผ ๋ฝ‘์•„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์ตœ์žฅ ๊ธธ์ด์˜ ๊ณตํ†ต ๋ถ€๋ฌธ์ž์—ด, ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

  1. ํ•ด๋ฅผ ๋ถ„์„ํ•˜์ž.
    ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด X = 'ABCBDAB' Y = 'BDCABA' ๋ผ ํ•  ๋•Œ LCS ๋Š” 4์ด๋‹ค. ๋”ฐ๋ผ์„œ
    LCS(X7, Y6) = 4 ์™€ ๊ฐ™์ด ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ x7๊ณผ y6๊ฐ€ ๊ฐ๊ฐ B, A ๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฌธ์ž์ด๋ฏ€๋กœ ๋งˆ์ง€๋ง‰ ์ˆ˜๋ฅผ ๋™์‹œ์— ๋ฝ‘์„ ์ˆ˜ ์—†๋‹ค. ๋”ฐ๋ผ์„œ ๋งˆ์ง€๋ง‰ ๋‘ ๋ฌธ์ž๊ฐ€ ๋‹ค๋ฅผ ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์“ธ ์ˆ˜ ์žˆ๋‹ค.


x7์„ ์„ ํƒํ•˜์ง€ ์•Š๊ณ  X6, Y6๊นŒ์ง€ ๋ณธ ๊ฒƒ๊ณผ, y6๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š๊ณ  X7, Y5๊นŒ์ง€ ๋ณธ ๊ฒƒ ์ค‘ ๊ธด ๊ธธ์ด์™€ ๊ฐ™๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋งŒ์•ฝ์— ๋ฌธ์ž์—ด ๋์ด ๊ฐ™๋‹ค๋ฉด ๋ฌด์กฐ๊ฑด ํฌํ•จํ•˜๋ฉด ๋˜๋‹ˆ๊นŒ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ ๋Š”๋‹ค.

(๋’ค์— +1๊นŒ์ง€ ๋ถ™์—ฌ์ฃผ๋Š” ๊ฒŒ ๋งž๋‹ค.)

  1. ์ ํ™”์‹์„ ์„ธ์šฐ์ž

์ผ๋ฐ˜ํ™”ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์•„๋ž˜์˜ ์‹์€ if (xi == yj) ๋กœ ์ˆ˜์ •ํ•œ๋‹ค.

  1. DP ํ…Œ์ด๋ธ”์„ ์ •์˜ํ•˜์ž.
    ์ธ๋ฑ์Šค๋ฅผ ๋‘๊ฐœ์”ฉ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ 2์ฐจ์› ๋ฐฐ์—ด ํ˜•ํƒœ์˜ DP ํ…Œ์ด๋ธ”์„ ์ •์˜ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

DPํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ๊ฐ ๋ฌธ์ž ์•ž์— 0์ธ๋ฑ์Šค๋„ ์ถ”๊ฐ€ํ•˜์—ฌ ํ–‰, ์—ด 0๋ฒˆ์€ ๋ชจ๋‘ 0์œผ๋กœ ์ฑ„์šด๋‹ค.
  • i,j ๊ฐ€ ๋‹ค๋ฅด๋ฉด ๊ณ„์‚ฐํ•œ ๊ฒƒ๊ณผ ๊ฐ™์ด ์™ผ์ชฝ(์œ„์˜ ๊ทธ๋ฆผ์—์„  ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ์ด Xi, Yj-1 ์˜ ์ƒํ™ฉ), ์œ„์ชฝ(Xi-1, Yj) ์ค‘์—์„œ max ๋ฅผ ์„ ํƒํ•˜์—ฌ ๋ฐ๋ ค์˜จ๋‹ค.
  • i, j ๊ฐ€ ๊ฐ™์œผ๋ฉด ๋ฌด์กฐ๊ฑด ์„ ํƒํ•˜๊ณ  ํ•˜๋‚˜์”ฉ ๊ฐ์†Œ์‹œํ‚จ ๊ฒƒ(๊ทธ ์ „ ๋ฌธ์ž์—ด๊นŒ์ง€์˜ ์ตœ์žฅ๊ธธ์ด)์„ ๊ทธ๋ƒฅ ๋”ํ•˜๋ฉด ๋œ๋‹ค.
  • ๋ชจ๋“  ํ…Œ์ด๋ธ”์„ ์ฑ„์šด ํ›„ ๋งˆ์ง€๋ง‰ [-1][-1] ์˜ ์ˆซ์ž๊ฐ€ ๋‹ต.

์ฑ„์šฐ๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ 1์ด๋ฏ€๋กœ ๊ธธ์ด๊ฐ€ n, m ์ด๋ผ ํ–ˆ์„ ๋•Œ O(nm) ๋งŒํผ์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

์—ญ์ถ”์ ํ•ด ์˜ฌ๋ผ๊ฐ„๋‹ค๋ฉด ๊ฐ™์„ ๊ฒฝ์šฐ ์™ผ์ชฝ ์œ„๋กœ, ๊ฐ™์ง€ ์•Š์„ ๊ฒฝ์šฐ ๋‘ ๊ฐ€์ง€ ๋ฐฉํ–ฅ์„ ๊ณ ๋ คํ•˜์—ฌ O(n+m) ์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

<์ฝ”๋“œ>

  • ์ด ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ O(n^2)

2. Edit Distance Problem

X = HUMAN
Y = CHIMPANZEE ๊ฐ€ ์ฃผ์–ด์ง€๋ฉด, ์‚ฝ์ž… 6๊ฐœ์™€ ์‚ญ์ œ(u) 1๊ฐœ๋กœ ์ธ๊ฐ„์ด ์นจํŒฌ์ง€๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ ์œ„ํ•ด์„  X์—๋งŒ ์žˆ๋Š” ๊ฒƒ์€ ์‚ญ์ œํ•ด์•ผ ํ•˜๊ณ , Y์—๋งŒ ์žˆ๋Š” ๊ฒƒ์€ ์‚ฝ์ž…ํ•ด์•ผ ํ•˜๋Š”๋ฐ,
์‚ฝ์ž…, ์‚ญ์ œ, ๊ต์ฒด์— ๋“œ๋Š” ๋น„์šฉ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ Edit Distance ๋Š” ๋ฌธ์ž์—ด X๊ฐ€ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ, ๊ต์ฒด๋ฅผ ๊ฑฐ์ณ Y๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ตœ์†Œ๋น„์šฉ์„ ๋งํ•œ๋‹ค.

DP[i][j] ๋ฅผ ๋ฌธ์ž์—ด X_i๋ฅผ Y_j๋กœ ๋ฐ”๊พธ๋Š” ๋น„์šฉ์ด๋ผ ํ•  ๋•Œ, DP[i][0] ์€ ๋ฌธ์ž์—ด X_i๋ฅผ Y_0์œผ๋กœ ๋ฐ”๊พธ๋Š” ๋น„์šฉ์œผ๋กœ ์‚ญ์ œ ๋น„์šฉ์ด๊ณ , DP[0][j] ๋Š” ๋ฌธ์ž์—ด X_0์„ Y_j๋กœ ๋ฐ”๊พธ๋Š” ๋น„์šฉ์œผ๋กœ ์‚ฝ์ž…๋น„์šฉ์ด๋‹ค.

DP๋ฌธ์ œ๋Š” ํ˜„์žฌ ์ฃผ์–ด์ง„ ๋ฌธ์ œ Xi, Yi๋ฅผ ์ž‘์€ ๋ฌธ์ œ๋กœ ์ชผ๊ฐœ๋Š” ๊ฒƒ์œผ๋กœ i-1, j-1 ์ด ๊ทผ์ฒ˜๋ฅผ ๋ณด๋ฉด ๋˜๊ณ  ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” ์‚ญ์ œ, ์‚ฝ์ž…, ๊ต์ฒด์ด๋‹ค.

  1. Xi ์‚ญ์ œ
    W_del(Xi) + DP[i-1][j] : ์‚ญ์ œ๋ฅผ ํ•˜๋Š” ๋น„์šฉ + ๋‚˜๋จธ์ง€ Xi ๋ฅผ ์ œ์™ธํ•œ ๋น„์šฉ

  2. Yj ์‚ฝ์ž…
    DP[i][j-1] + W_ins(Yj)

  3. Xi => Yj ๊ต์ฒด ๋น„์šฉ
    DP[i-1][j-1] + Wsub(Xi, Yj)

DP[i][j] = min(1, 2, 3) : ๋ชจ๋‘ ๊ณ„์‚ฐํ•œ ํ›„, ๊ฐ€์žฅ ์ตœ์†Œ๋ฅผ ๋ฐ˜ํ™˜

๋”ฐ๋ผ์„œ DPํ…Œ์ด๋ธ”์„ ์‚ด์ง ๊ทธ๋ ค๋ณด๋ฉด i, j๋ฅผ ์ •ํ•  ๋•Œ ๋ฐ”๋กœ ์œ„ + ์‚ญ์ œ๋น„์šฉ, ๋ฐ”๋กœ ์™ผ + ์‚ฝ์ž…๋น„์šฉ, ๋Œ€๊ฐ์„  ์™ผ์ชฝ + ๊ต์ฒด๋น„์šฉ ์ค‘ ์ตœ์†Œ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋ฉด ๋œ๋‹ค.

3. ํ–‰๋ ฌ๊ณฑ์…ˆ (๋น„์šฉ์„ ์ตœ์†Œ๋กœ, Matrix Multiplication)

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ๋ฐ˜์ ์ธ ํ–‰๋ ฌ ๊ณฑ์…ˆ์„ ํ•˜๋Š” ๊ฒฝ์šฐ ํ•œ ์นธ์„ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ O(q), pr ์นธ์˜ ๊ณ„์‚ฐ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ์ด O(pqr)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค.

์•„๋ž˜์˜ ๊ฒฝ์šฐ๋Š” ์–ด๋–จ๊นŒ? M1, M2, M3 ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅธ ์„ธ ๊ฐœ์˜ ํ–‰๋ ฌ์ด ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐ™์€ ๊ณฑ์…ˆ์ด๋ผ๋„ ์–ด๋–ป๊ฒŒ ๊ด„ํ˜ธ๋ฅผ ๋ฌถ๋А๋ƒ์— ๋”ฐ๋ผ ๋“œ๋Š” ๋น„์šฉ์ด ๋‹ค๋ฅด๋‹ค. (๋‹ค์Œ์˜ ๊ฒฝ์šฐ์—์„  ์˜ค๋ฅธ์ชฝ์ด ํ›จ์”ฌ ์œ ๋ฆฌํ•˜๋‹ค.)

๋”ฐ๋ผ์„œ ์ผ๋ฐ˜ํ™”ํ•˜์—ฌ M1, M2 .. Mn์˜ n๊ฐœ ํ–‰๋ ฌ์˜ ๊ณฑ์…ˆ์ด ์ฐจ๋ก€๋กœ ์ฃผ์–ด์งˆ ๋•Œ ํ–‰๋ ฌ๊ณฑ์…ˆ์˜ ๋น„์šฉ์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์€ ์ตœ์†Œ๋น„์šฉ์ด ๋˜๋„๋ก ๊ด„ํ˜ธ๋ฅผ ๋ฌถ๋Š” ์ผ๊ณผ ๊ฐ™์œผ๋ฉฐ, n = 4์ผ ๊ฒฝ์šฐ ๋๊นŒ์ง€ ๊ด„ํ˜ธ์น˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” 5๊ฐœ์ด๋‹ค. (5๊ฐœ ์ค‘ 1๊ฐœ๋ฅผ ๊ณ ๋ฅด๋Š” ๋ฌธ์ œ.์™œ 5๊ฐœ์ธ์ง€ ์ƒ๊ฐํ•ด๋ณด์ž)

์‚ฌ์‹ค ์ด ์ˆซ์ž๋Š” Catalan Number ์™€ ์ผ์น˜ํ•˜๋ฉฐ ์ง€์ˆ˜์‹์ด ๋˜์–ด ๋งค์šฐ ํฐ ์ˆ˜์ด๋ฏ€๋กœ DP๋กœ ํ•ด๊ฒฐํ•ด๋ณด์ž๋Š” ๊ฒฐ๋ก .

๋‹ค์‹œ M1, M2, M3, M4 ์˜ ๋„ค ๊ฐœ ํ–‰๋ ฌ๋กœ๋งŒ ๋Œ์•„์™€์„œ, ๋งˆ์ง€๋ง‰ ์—ฐ์‚ฐ์„ ๊ด€์ฐฐํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์„ ๊ฒƒ์ด๋‹ค. DP[i][j] ๋ฅผ Mi ... Mj ์— ๋Œ€ํ•œ ๊ด„ํ˜ธ์น˜๊ธฐ์˜ ๋น„์šฉ์ด๋ผ ์ •์˜ํ•˜๊ณ , ์ตœ์ข…์ ์œผ๋กœ DP[1][n] ์„ ๊ตฌํ•˜์ž. (์ด๋•Œ Mk ๋Š” Pk X Pk+1 ํ–‰๋ ฌ์ด๋‹ค.)

  1. M1 X (M2 M3 M4) => DP[1][1] + DP[2][4] + p1p2p5
  2. (M1 M2) X (M3 M4) => DP[1][2] + DP[3][4] + p1p3p5
  3. (M1 M2 M3) X M4 => DP[1][3] + DP[4][4] + p1p4p5

๋”ฐ๋ผ์„œ DP[1][4] ๋Š” min(1,2,3)์ธ๋ฐ ์กฐ๊ธˆ ๋” ์ ํ™”์‹๋‹ต๊ฒŒ ์ •๋ฆฌํ•˜์ž.

DP[i][j] = Mi๋ถ€ํ„ฐ Mj๊นŒ์ง€์˜ ํ–‰๋ ฌ ๊ณฑ์…ˆ์— ๋“œ๋Š” ์ตœ์†Œ ๋น„์šฉ, ์ค‘๊ฐ„์— Mk์™€ Mk+1์„ ์ง€๋‚จ
= min(DP[i][k] + DP[k+1][j] + PiPkPk+1)

  • ์ด๋ ‡๊ฒŒ ํ•œ ์นธ์„ ์ฑ„์šฐ๋Š”๋ฐ๋Š” O(n) ์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ๊ฒƒ์ด๋‹ค.

DP ํ…Œ์ด๋ธ”์„ ๊ทธ๋ ค๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ์ดˆ๊ธฐํ™”๋Š” DP[i][i] = 0 ์œผ๋กœ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ์ปจ๋Œ€ M1๋ถ€ํ„ฐ M1 ๊ณฑ์€ ๋น„์šฉ์ด 0์ด๋‹ˆ๊นŒ
  • ํ˜„์žฌ ๊ตฌํ•˜๋Š” [1][4] ๋ฅผ ์œ„ํ•ด์„  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ธ ๊ฐ’์„ ๋”ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค. (**๊ฐ DP์‹ ๋์— PiPk+1Pj+1์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋„๋ก ํ•˜์ž.)
  • ๋”ฐ๋ผ์„œ ์˜ค๋ฅธ์ชฝ ์œ„ ๋Œ€๊ฐ์„ ์œผ๋กœ ์˜ฌ๋ผ์˜ค๋ฉด์„œ ๊ณ„์‚ฐํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค.
  • ์ˆ˜ํ–‰์‹œ๊ฐ„ = ํ…Œ์ด๋ธ” ์—”ํŠธ๋ฆฌ ์ˆ˜ X ์—”ํŠธ๋ฆฌ ๊ณ„์‚ฐ ์‹œ๊ฐ„ = O(n^2) X O(n) = O(n^3) ์ด๋‹ค.

LIS (Longest Increasing Subsequence)

์ฃผ์–ด์ง„ ์ˆซ์ž ๋ฐฐ์—ด A = [2, 8, 5, 10, 18, 13, 20, 4] ๋ฅผ ๊ฐ€์ง€๊ณ  ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ฌธ์ž ๋ฐฐ์—ด์„ ์ฐพ์ž.

  • LIS[i] ์˜ ์ •์˜๋ฅผ A[i] ๋กœ ๋๋‚˜๋Š” ๋ถ€์ˆ˜์—ด ์ค‘ ๊ฐ€์žฅ ๊ธด ๋ถ€๋ฌธ์ž ๊ธธ์ด๋ผ ํ•˜๊ณ ,

  • ์ ํ™”์‹์„ LIS[i] = max(LIS[j] + 1) ์ด๋ผ ํ•˜๋ฉด ๋œ๋‹ค.

  • DP๋กœ n^2์—๋„, nlogn ์˜ ์‹œ๊ฐ„์—๋„ ํ’€๋ฆฐ๋‹ค

profile
Mathematics, Algorithm, and IDEA for AI research๐Ÿฆ–

0๊ฐœ์˜ ๋Œ“๊ธ€