Edit Distance
2020-1ํ๊ธฐ, ๋ํ์์ โ์๊ณ ๋ฆฌ์ฆโ ์์ ์ ๋ฃ๊ณ ๊ณต๋ถํ ๋ฐ๋ฅผ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ์ง์ ์ ์ธ์ ๋ ํ์์ ๋๋ค :)
๋ string ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ ํ๋ ๋ฐฉ๋ฒ์ด ์์๊น? ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ๋ string์ด ๊ฐ์ ๋ฌธ์๋ก aligned ๋๋๋ก ๋งค์นญํด ์ด๊ธ๋๋ ๋ฌธ์์ ์ซ์๋ก ๊ฑฐ๋ฆฌ๋ฅผ ๋งค๊ธธ ์ ์๋ค.
์ด๋, align ํ๋ ๋ฐฉ์์ ๋ฐ๋ผ, ๋ string ์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ ๋ฌ๋ผ์ง ์ ์๋ค. ๊ทธ๋์ ๊ฐ๋ฅํ ๋ชจ๋ align ๋ฐฉ์ ์ค ๊ฐ์ฅ ์์ <cost>๋ฅผ <edit distance>๋ผ๊ณ ์ ์ํ๋ค.
์ฃผ์ด์ง ๋ string ์ฌ์ด์ <edit distance>๋ฅผ ์ด๋ป๊ฒ ์ธก์ ํ ์ ์์๊น? DP๋ฅผ ์ฌ์ฉํ๋ฉด, ์ ๋ง ์ฝ๊ฒ <edit distance>๋ฅผ ๊ตฌํ ์ ์๋ค!!
DP๋ก ์ ๊ทผํ๊ธฐ ์ํด ๋จผ์ ๋ฌธ์ ๋ฅผ subproblem์ผ๋ก ๋ถํ ํด์ผ ํ๋ค. ์ด๋, ์ฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์์ฐ์ค๋ฝ๊ฒ ์๊ฐํด๋ณผ ์ ์๋ ๋ถํ ๋ฐฉ์์ ๋ string์ prefix๋ก ๋ถํ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
Given two strings, $x[1, \dots, m]$ and $y[1, \dots, n]$. A good subproblem would be to compute the optimal edit distance btw some prefixes, $x[1, \dots, i]$ and $y[1, \dots, j]$.
Let $E(i, j)$ be the optimal edit distance btw two prefixes. Then
\[E(i, j) = \min \begin{cases} E(i-1, j) + 1 \\ E(i, j-1) + 1 \\ E(i, j) + \texttt{diff}(i, j) \end{cases}\]์์ด๋์ด๋ ๊ฐ๋จํ๋ค. ๋ prefix์ ๋ํด, ๋ง์ง๋ง ๋ฌธ์๊ฐ ๊ณต๋ฐฑ์ผ ๋์ ๋ ๊ฒฝ์ฐ์ ๋ง์ง๋ง ๋ฌธ์๋ฅผ ๋ง์ท์ ๋์ ๊ฒฝ์ฐ๋ฅผ ์ข ํฉํด ์ต์ edit distance์ ๊ฒฝ์ฐ๋ฅผ ์ทจํ๋ ์์ด๋์ด๋ค!
// initialization
for $i=0, 1, 2, \dots, m$
โโ$E(i, 0) = i$
for $j=0, 1, 2, \dots, n$
โโ$E(0, j) = j$
// dp process
for $i=1, 2, \dots, m$
โโfor $j=1, 2, \dots, n$
โโโโ$E(i, j) = \min \{ E(i-1, j) + 1, \; E(i, j-1) + 1, \; E(i-1, j-1) + \texttt{diff}(i, j)\}$
return $E(m, n)$
<Edit Distance> ๋ฌธ์ ๋ ๋ string์ idx๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ 2์ฐจ์ DP๋ฅผ ์ฌ์ฉํ๋ค. ๊ทธ๋ฆฌ๊ณ ์์ ๊ทธ๋ฆผ์์๋ ๋ณผ ์ ์๋ฏ <Edit Distance>์์๋ DAG ๊ตฌ์กฐ๊ฐ ์๋ค!
<edit distance>๋ ๋ฌธ์์ด ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ํ๋ ์ข์ ๊ธฐ์ค์ด ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ฌธ์์ด ๋ฌธ์ ๊ฐ ์์ฃผ ๋ฑ์ฅํ๋ ์ฝ๋ฉ ํ ์คํธ์์๋ ๋น์ถ์ด ๋๋ ์ฃผ์ ์ด๋ฏ๋ก ๋ ์์งํด๋ฌ์ผ ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ์๊ฐํ๋ค ๐
<edit distance>๋ โ์ฝ์ โ, โ์ญ์ โ, โ๊ต์ฒดโ์ ์ธ ๊ฐ์ง ์ฐ์ฐ์ ํตํด ์ต์ ํธ์ง ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ค. ์ด๋, ์ธ์ ํ ๋ ๊ธ์๋ผ๋ฆฌ ๊ตํํ๋ โ๊ตํ(transposition)โ ์ฐ์ฐ์ด ์ถ๊ฐ๋๋ ๊ฒฝ์ฐ๊ฐ <Damerau-Levenshtein distance>๋ค. ๋ด์ฉ๊ณผ ์ฝ๋๋ฅผ ํฌ์คํธ๋ก ์ ๋ฆฌํ์ผ๋, ๋ฌธ์์ด ๊ฑฐ๋ฆฌ์ ๋ํด ๋ ๊ด์ฌ์ด ์๋ค๋ฉด, ์๋์ ํฌ์คํธ๋ฅผ ์ถ์ฒํ๋ค! ๐
๐ Damerau-Levenshtein distance