{"id":839,"date":"2018-03-19T14:55:36","date_gmt":"2018-03-19T05:55:36","guid":{"rendered":"https:\/\/dong1lkim.oboki.net\/?p=839"},"modified":"2019-09-01T22:21:42","modified_gmt":"2019-09-01T13:21:42","slug":"algorithm-edit-distance","status":"publish","type":"post","link":"https:\/\/oboki.net\/workspace\/python\/algorithm-edit-distance\/","title":{"rendered":"[Algorithm] Edit Distance"},"content":{"rendered":"<h1>Edit Distance<\/h1>\n<blockquote><p>\n  \ud3b8\uc9d1 \uac70\ub9ac(Edit Distance) \uc54c\uace0\ub9ac\uc998\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uace0 Python\uc73c\ub85c Edit Distance \uc54c\uace0\ub9ac\uc998\uc744 \uad6c\ud604\ud574\ubcf8\ub2e4.\n<\/p><\/blockquote>\n<h2>&#8216;KITTEN&#8217;\uacfc &#8216;SITTING&#8217; \ubb38\uc790\uc5f4 \ube44\uad50<\/h2>\n<p>\ud3b8\uc9d1 \uac70\ub9ac(Edit Distance)\ub294 \uc5b4\ub5a4 \ubb38\uc790\uc5f4\uc744 \ub2e4\ub978 \ubb38\uc790\uc5f4\ub85c \ubc14\uafb8\uae30 \uc704\ud574 \ud544\uc694\ud55c \uc5f0\uc0b0\uc758 \ucd5c\uc18c \ud69f\uc218\ub97c \ub73b\ud55c\ub2e4. \ud55c \ubb38\uc790\uc5f4\uc5d0 \ub300\ud574 \uc0bd\uc785, \uc0ad\uc81c, \ubcc0\uacbd\uc758 \uc5f0\uc0b0\uc744 \uba87 \ubc88\uc5d0 \uac78\uccd0 \ubc14\uafc0 \uc218 \uc788\ub294\uc9c0\ub97c \uae30\uc900\uc73c\ub85c \ub450 \ube44\uad50 \ub300\uc0c1\uc758 \uc720\uc0ac\ub3c4\ub97c \ud310\ub2e8\ud55c\ub2e4.<\/p>\n<p>&#8216;KITTEN&#8217;\uacfc &#8216;SITTING&#8217;\uc744 \ube44\uad50\ud55c\ub2e4\uace0 \ud588\uc744 \ub54c, \ud3b8\uc9d1 \uac70\ub9ac\ub97c \uad6c\ud558\ub294 \uacfc\uc815\uc740 \uc544\ub798\uc640 \uac19\uc774 2\ucc28\uc6d0 \ubc30\uc5f4\uc744 \ud1b5\ud574 \ud655\uc778\ud560 \uc218 \uc788\ub2e4. \ube44\uad50 \ub300\uc0c1 \ubb38\uc790\uc5f4\uc744 \ub450 \ucd95\uc5d0 \ub450\uace0 \uacf5\uc9d1\ud569\uc5d0\uc11c \ubd80\ud130 &#8216;S&#8217;, &#8216;SI&#8217;, &#8216;SIT&#8217;, &#8230;, &#8216;SITTING&#8217; \ubb38\uc790\uc640 {}, &#8216;K&#8217;, &#8216;KI&#8217;, &#8230;, &#8216;KITTEN&#8217; \ubb38\uc790\uc5f4\uc744 \ucc28\ub840\ub300\ub85c \ube44\uad50\ud574 \ub098\uac04\ub2e4.<\/p>\n<p>\uccab\ubc88\uc9f8 \ud589\uacfc \uc5f4\uc5d0\ub294 \uc544\ub798\uc640 \uac19\uc774 \uacf5\uc9d1\ud569\uacfc \ube44\uad50\ud558\uae30 \ub54c\ubb38\uc5d0 \uc0bd\uc785 \uc5f0\uc0b0\uc774 \uc774\ub904\uc838\uc57c \ud558\ubbc0\ub85c \ubb38\uc790\uc5f4\uc758 \uae38\uc774\uc640 \uac19\ub2e4.<\/p>\n<table>\n<thead>\n<tr>\n<th>&#8211;<\/th>\n<th>{}<\/th>\n<th>S<\/th>\n<th>I<\/th>\n<th>T<\/th>\n<th>T<\/th>\n<th>I<\/th>\n<th>N<\/th>\n<th>G<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>{}<\/td>\n<td>0<\/td>\n<td>1<\/td>\n<td>2<\/td>\n<td>3<\/td>\n<td>4<\/td>\n<td>5<\/td>\n<td>6<\/td>\n<td>7<\/td>\n<\/tr>\n<tr>\n<td>K<\/td>\n<td>1<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>I<\/td>\n<td>2<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>T<\/td>\n<td>3<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>T<\/td>\n<td>4<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>E<\/td>\n<td>5<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>N<\/td>\n<td>6<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\uc774\uc5b4\uc11c \ub450\ubc88\uc9f8 \ud589\uacfc \uc5f4\uc758 \uac12\uc744 \ucc44\uc6cc\ub123\uc744 \ub54c\uc5d0\ub294 \uc138 \uac00\uc9c0 \uc0c1\ud0dc\uac12\uc5d0 \ub530\ub77c \uac12\uc774 \uc815\ud574\uc9c4\ub2e4.<\/p>\n<ol>\n<li>D[i &#8211; 1][j]\uc5d0\uc11c A[i]\ub97c \ubcc0\ud615\ud560 \ub54c A[1, i &#8211; 1]\uc740 B[1, j]\uc640 \ub3d9\uc77c\ud558\uac8c \ubcc0\ud615\ub418\uc5b4 \uc788\uc73c\ubbc0\ub85c A[i]\ub294 \uc0ad\uc81c\ub418\uc5b4\uc57c \ud55c\ub2e4.<\/li>\n<li>D[i][j &#8211; 1]\uc5d0\uc11c B[j]\ub97c \ubcc0\ud615\ud560 \ub54c A[1, i]\ub294 B[1, j &#8211; 1]\uacfc \ub3d9\uc77c\ud558\uac8c \ubcc0\ud615\ub418\uc5b4 \uc788\uc73c\ubbc0\ub85c \uc5ec\uae30\uc5d0 B\uac00 \ud55c \uae00\uc790 \uc99d\uac00\ud558\uac8c \ub418\uba74, A\uc758 \ub4a4\uc5d0 B[j]\ub97c \uc0bd\uc785\ud574\uc57c \ud55c\ub2e4.<\/li>\n<li>D[i &#8211; 1][j &#8211; 1]\uc5d0\uc11c A[i]\uc640 B[j]\ub97c \ubcc0\ud615\ud560 \ub54c A[i]\uc640 B[j]\uc758 \uac12\uc774 \uac19\ub2e4\uba74 A\ub97c \ucd94\uac00\uc801\uc73c\ub85c \ubcc0\ud615\ud560 \ud544\uc694\uac00 \uc5c6\ub2e4. \ub300\uc2e0 A[i]\uc640 B[j]\uac00 \ub2e4\ub974\ub2e4\uba74 A[i]\ub97c B[j]\ub85c \uc218\uc815\ud558\ub294 \uc5f0\uc0b0\uc774 \ud544\uc694\ud558\ub2e4.<\/li>\n<\/ol>\n<p>\uc810\ud654\uc2dd\uc73c\ub85c \ub098\ud0c0\ub0b4\uba74 \ub2e4\uc74c\uacfc \uac19\uace0,<\/p>\n<p>$$ D[i][j] = min \\begin{cases} D[i-1][j-1] + 1 \\quad (\\text{if } A[j] \\text{ != } B[j])\\ D[i][j] + 1 \\ D[i][j-1] + 1 \\end{cases} $$<\/p>\n<p>\ubc30\uc5f4\uc744 \ubaa8\ub450 \ucc44\uc6b0\uba74 \uc544\ub798\uc640 \uac19\uc740 \uacb0\uacfc\ub97c \uc5bb\uc744 \uc218 \uc788\ub2e4.<\/p>\n<table>\n<thead>\n<tr>\n<th>&#8211;<\/th>\n<th>{}<\/th>\n<th>S<\/th>\n<th>I<\/th>\n<th>T<\/th>\n<th>T<\/th>\n<th>I<\/th>\n<th>N<\/th>\n<th>G<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>{}<\/td>\n<td>0<\/td>\n<td>1<\/td>\n<td>2<\/td>\n<td>3<\/td>\n<td>4<\/td>\n<td>5<\/td>\n<td>6<\/td>\n<td>7<\/td>\n<\/tr>\n<tr>\n<td>K<\/td>\n<td>1<\/td>\n<td>1<\/td>\n<td>2<\/td>\n<td>3<\/td>\n<td>4<\/td>\n<td>5<\/td>\n<td>6<\/td>\n<td>7<\/td>\n<\/tr>\n<tr>\n<td>I<\/td>\n<td>2<\/td>\n<td>2<\/td>\n<td>1<\/td>\n<td>2<\/td>\n<td>3<\/td>\n<td>4<\/td>\n<td>5<\/td>\n<td>6<\/td>\n<\/tr>\n<tr>\n<td>T<\/td>\n<td>3<\/td>\n<td>3<\/td>\n<td>3<\/td>\n<td>1<\/td>\n<td>2<\/td>\n<td>3<\/td>\n<td>4<\/td>\n<td>5<\/td>\n<\/tr>\n<tr>\n<td>T<\/td>\n<td>4<\/td>\n<td>5<\/td>\n<td>4<\/td>\n<td>3<\/td>\n<td>1<\/td>\n<td>2<\/td>\n<td>3<\/td>\n<td>4<\/td>\n<\/tr>\n<tr>\n<td>E<\/td>\n<td>5<\/td>\n<td>6<\/td>\n<td>5<\/td>\n<td>5<\/td>\n<td>4<\/td>\n<td>2<\/td>\n<td>3<\/td>\n<td>4<\/td>\n<\/tr>\n<tr>\n<td>N<\/td>\n<td>6<\/td>\n<td>7<\/td>\n<td>6<\/td>\n<td>6<\/td>\n<td>6<\/td>\n<td>5<\/td>\n<td>2<\/td>\n<td>3<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>\uc18c\uc2a4\ucf54\ub4dc<\/h2>\n<p>Python\uc73c\ub85c \uc704 \ucca0\ucc28\ub97c \uad6c\ud604\ud558\uba74 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre><code class=\"py\">def print_mat_2d(mat):\n  for i in range(len(mat)): print(mat[i])\n\n#A,B = input(),input()\nA,B = \"kitten\",\"sitting\"\nla,lb = len(A),len(B)\n\nd=[[0 for _ in range(int(lb+1))] for _ in range(int(la+1))]\nfor i in range(1,la+1): d[i][0]=i\nfor i in range(1,lb+1): d[0][i]=i\n\nfor i in range(1,la+1):\n  for j in range(1,lb+1):\n    d[i][j] = d[i-1][j-1] if A[i-1] == B[j-1] else min(min(d[i-1][j-1],d[i][j-1]),d[i-1][j-1])+1\n\nprint_mat_2d(d)\nprint(\"Edit distance of '\"+A+\"' and '\"+B+\"' is\", d[la][lb])\n<\/code><\/pre>\n<p><code>print_mat_2d<\/code> \ud568\uc218\ub294 \ub514\ubc84\uae45\uc744 \uc704\ud574 \ucd94\uac00\ud55c \ud568\uc218.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Edit Distance \ud3b8\uc9d1 \uac70\ub9ac(Edit Distance) \uc54c\uace0\ub9ac\uc998\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uace0 Python\uc73c\ub85c Edit Distance \uc54c\uace0\ub9ac\uc998\uc744 \uad6c\ud604\ud574\ubcf8\ub2e4. &#8216;KITTEN&#8217;\uacfc &#8216;SITTING&#8217; \ubb38\uc790\uc5f4 \ube44\uad50 \ud3b8\uc9d1 \uac70\ub9ac(Edit Distance)\ub294 \uc5b4\ub5a4 \ubb38\uc790\uc5f4\uc744 \ub2e4\ub978 \ubb38\uc790\uc5f4\ub85c \ubc14\uafb8\uae30 \uc704\ud574 \ud544\uc694\ud55c \uc5f0\uc0b0\uc758 \ucd5c\uc18c \ud69f\uc218\ub97c \ub73b\ud55c\ub2e4. \ud55c \ubb38\uc790\uc5f4\uc5d0 \ub300\ud574 \uc0bd\uc785, \uc0ad\uc81c, \ubcc0\uacbd\uc758 \uc5f0\uc0b0\uc744 \uba87 \ubc88\uc5d0 \uac78\uccd0 \ubc14\uafc0 \uc218 \uc788\ub294\uc9c0\ub97c \uae30\uc900\uc73c\ub85c \ub450 \ube44\uad50 \ub300\uc0c1\uc758 \uc720\uc0ac\ub3c4\ub97c \ud310\ub2e8\ud55c\ub2e4. &#8216;KITTEN&#8217;\uacfc &#8216;SITTING&#8217;\uc744 \ube44\uad50\ud55c\ub2e4\uace0 \ud588\uc744 \ub54c, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17,10],"tags":[150,34],"class_list":["post-839","post","type-post","status-publish","format-standard","hentry","category-algorithm","category-python","tag-algorithm","tag-python"],"_links":{"self":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts\/839","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/comments?post=839"}],"version-history":[{"count":5,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts\/839\/revisions"}],"predecessor-version":[{"id":1284,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts\/839\/revisions\/1284"}],"wp:attachment":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/media?parent=839"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/categories?post=839"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/tags?post=839"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}