๐ง Edit Distance
์ด๋ค ๋จ์ด์ ๋น์ทํ(๊ฐ๊น์ด) ๋จ์ด๋ ์ด๋ป๊ฒ ์ ์ํ ์ ์์๊น์?
์๋ฅผ ๋ค์ด Word์ spell check ๊ธฐ๋ฅ์ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋น์ทํ ๋จ์ด๋ค์ ์๋ ค์ฃผ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
Edit distance๋ ๋ string์ด ์ผ๋ง๋ ๊ฐ๊น์ด์ง ๋ํ๋ด๋ ์ฒ๋์ ๋๋ค.
๋ ๋ฌธ์์ด $S_1$ ๊ณผ $S_2$ ๊ฐ์ edit distance๋ $S_1$ ์์ ์๋ 3๊ฐ์ง ์ข ๋ฅ์ ์ฐ์ฐ์ ์ต์ํ ๋ช ๋ฒ ์ํํ์ฌ $S_2$ ๋ฅผ ๋ง๋ค ์ ์๋๊ฐ๋ก ์ ์๋ฉ๋๋ค.
Insertion : $S_1$ ์ ์๋ฌด ์์น์ ๋ฌธ์ ํ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
MONDT -> MONEDT
Deletion : $S_1$ ์ ์๋ฌด ์์น์์ ๋ฌธ์ ํ๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
MONEDT -> MOMED
Substitution : $S_1$ ์ ๋ฌธ์ ํ๋๋ฅผ ๋ค๋ฅธ ๋ฌธ์๋ก ๋ฐ๊ฟ๋๋ค.
MONED -> MOMEY
๐ง Edit Distance ๊ตฌํ๊ธฐ
$S_1$(SNOWY) ๊ณผ $S_2$(SUNNY) ์ edit distance๋ฅผ ๋ค์๊ณผ ๊ฐ์ ํ(gap table)๋ก ๋ํ๋ด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
$S_1$ | S | - | N | O | W | Y |
$S_2$ | S | U | N | N | - | Y |
Insertion | Substitution | Deletion |
์ด๋ $S_1$ ๊ณผ $S_2$ ์ table์์ ๋ง์ง๋ง column์ ์ ๊ฑฐํ table์,
์ด์ ํด๋น๋๋ $S_1$ ๊ณผ $S_2$์ prefix ๊ฐ์ edit distance๋ฅผ ๋ํ๋ ๋๋ค.
๋ฐ๋ผ์ prefix๊ฐ์ edit distance๊ฐ ๋ ์งง๋ค๋ฉด,
๊ทธ๊ฒ์ ํด๋นํ๋ table๊ณผ ์ ๊ฑฐํ ์ปฌ๋ผ์ ํตํด ๋ ์งง์ edit distance๋ฅผ ์ป์ ์ ์์ต๋๋ค.
์ฆ $S_1$ ๊ณผ $S_2$ ๊ฐ์ edit distance๋
$S_1$ ๊ณผ $S_2$ ์ prefix๊ฐ์ edit distance์ ์ํด ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
Edit(i, j)๋ฅผ ๋ prefix $S_1$[1, ..., i] ์ $S_2$[1, ..., j] ๊ฐ์ edit distance๋ผ ํ๊ณ ,
$S_1$[1, ..., i] ์ $S_2$[1, ..., j] ๊ฐ์ table์์ ๋ง์ง๋ง column์์ ์ผ์ด๋ ์ฐ์ฐ์ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ recurrence relation์ ์๊ฐํด ๋ณผ ์ ์์ต๋๋ค.
โญ๏ธ Case 1 : ๋ง์ง๋ง Column์์ Deletion์ด ์ผ์ด๋ ๊ฒฝ์ฐ
Edit(i, j) = Edit(i-1, j) + 1
โญ๏ธ Case 2 : ๋ง์ง๋ง Column์์ Insertion์ด ์ผ์ด๋ ๊ฒฝ์ฐ
Edit(i, j) = Edit(i, j-1) + 1
โญ๏ธ Case 3 : ๋ง์ง๋ง Column์์ Substitution์ด ์ผ์ด๋ ๊ฒฝ์ฐ
Edit(i, j) = Edit(i-1, j-1) + 1
์ด๋ ๋ง์ฝ Substitution์ด ๋ฐ์ํ์ง ์๊ณ ๋ ๋ฌธ์๊ฐ ๊ฐ์ ๊ฒฝ์ฐ ์ฆ, $S_1$[i] = $S_2$[j] ์ธ ๊ฒฝ์ฐ์๋
Edit(i, j) = Edit(i-1, j-1) ์ ๋๋ค.
โญ๏ธ Base Case
Edit(i, 0) = Edit(0, i) = i
์ ์ฌ์ค๋ค์ ๋ฐํ์ผ๋ก $Edit(i, j)$ ๋ฅผ ๊ตฌํ๋ recurrence relation์ ์ธ์ฐ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๐ง Recurrence relation
Case 1, 2, 3 ์ค ๊ฐ์ฅ edit distance๊ฐ ์์ ๊ฒ์ ์ ํํ๋ relation์ ๋๋ค.
$$Edit(i, j) = \left\{\begin{matrix}
i & \;if \; j = 0 \\
j & \;if \; i = 0 \\
min\begin{Bmatrix}
Edit(i, j-1) + 1 \\
Edit(i-1, j) + 1 \\
Edit(i-1, j-1) + [A[i] \neq B[j]] \\
\end{Bmatrix} & \; otherwise\\
\end{matrix}\right.$$
๐ง ์์
row๋ฅผ ๋จผ์ ์ฑ์๊ฐ๋ ๋๊ณ (row-major),
column์ ๋จผ์ ์ฑ์๋๊ฐ๋(column-major) ์๊ด์์ง๋ง,
row-major ๋ฐฉ์์ผ๋ก ์์ ๋ฅผ ์งํํ๋๋ก ํ๊ฒ ์ต๋๋ค.
์์๋ก ์ฌ์ฉํ ๋ ๋ฌธ์์ด์ $S_1 =$ SUNNY์ $S_2 =$ SNOW์ ๋๋ค.
์ต์ด table์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$S_1[1] = S_2[1]$ ์ด๋ฏ๋ก, ๋ค์์ ์๋์ ๊ฐ์ต๋๋ค.(๋นจ๊ฐ์ 3๊ฐ๋ฅผ ๋น๊ต)
$S_1[1] \neq S_2[2]$ ์ด๋ฏ๋ก, ๋ค์์ ์๋์ ๊ฐ์ต๋๋ค.(๋นจ๊ฐ์ 3๊ฐ๋ฅผ ๋น๊ต)
$S_1[1] \neq S_2[3]$ ์ด๋ฏ๋ก, ๋ค์์ ์๋์ ๊ฐ์ต๋๋ค.(๋นจ๊ฐ์ 3๊ฐ๋ฅผ ๋น๊ต)
์ด๋ฐ ์์ผ๋ก ์ผ์ชฝ, ๋๊ฐ์ ์์ชฝ, ์์ชฝ์ 3๊ฐ์ง ๋ฐฉํฅ์ ๊ฐ๋ค๊ณผ ๋น๊ตํด๊ฐ๋ฉฐ ๊ฐ์ ์ฑ์๋๊ฐ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ๋ฅผ ์์ฑ์ํฌ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ SUNNY์ SNOW ์ฌ์ด์ Edit distance๋ 3์ ๋๋ค.
๐ง Pseudocode
๐ง ์๊ฐ ๋ณต์ก๋
Edit Array์ ์์ ํ๋๋ฅผ ๊ตฌํ ๋๋ง๋ค $O(1)$ ์ ์๊ฐ์ด ์์๋๋ฉฐ,
Array๋ ๋ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ row์ column์ผ๋ก ํ๋ 2์ฐจ์ ๋ฐฐ์ด์ด๋ฏ๋ก
์ด $O(n^2)$ ์ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค.
'๐ฅ Computer Science > ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] DP(4) - ํ๋ก์ด๋ ์์ฌ(Floyd Warshall) ์๊ณ ๋ฆฌ์ฆ (0) | 2022.11.13 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] DP (3) - ๋ฒจ๋งํฌ๋(Bellman-Ford) ์๊ณ ๋ฆฌ์ฆ (0) | 2022.11.12 |
[์๊ณ ๋ฆฌ์ฆ] DP (1) - LIS(์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด) (0) | 2022.11.10 |
[์๊ณ ๋ฆฌ์ฆ] DP (0) - DP ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ (0) | 2022.11.09 |
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ฆฌ๋ (3) - Huffman Encoding(ํํ๋ง ๋ถํธํ) (0) | 2022.10.21 |