技能一覧 › 大学数学 アルゴリズムと計算量

編集距離

の表を埋めて、2 つの文字列の(重み付き)編集距離を求められる

前提

説明

編集距離は、文字列 を文字列 に作り替えるのに必要な「削除・挿入・置換」の最小コストです。各操作のコストを と決めておくと、2 次元の表を左上から順に埋めるだけで求められます。スペル修正の候補選び、DNA 配列の比較、ファイルの差分表示など、2 つの列がどれだけ似ているかを数値で測る場面で使います。

なぜそうしてよいのか

を に作り替える方法は、次のような「対応づけ」で表せます。 の各文字は、削除されるか、 のどれか 1 文字に対応づけられます。対応づけは左から右への順序を保ちます。 の文字のうち対応相手のないものは、挿入された文字です。対応づけた 2 文字が等しければコストは 、異なれば置換としてコスト がかかります。コストはすべて 以上とします。このような対応づけのコスト合計の最小値が編集距離です。

そこで を「先頭 文字 を先頭 文字 に作り替える最小コスト」と定めます。最適な作り替えで、末尾の文字 と がどう扱われるかは次の 3 通りしかありません。(1) を削除する。残りは なので 。(2) を挿入する。残りは なので 。(3) と を対応づける。。ここで は、 なら 、 なら を表す記号です。

どの場合も、残りの部分は最小コストで作り替えるのが最善です(もっと安い方法があれば、それに取り替えて全体も安くできるから)。よって 3 通りの最小値をとれば になります。これは硬貨の問題で「最後に使う硬貨 」で場合分けして としたのと同じ考え方で、「最後の操作」で場合分けしています。小さい から順に埋めれば、右辺の値はいつもすでに求まっています。

手順

  1. を縦(行 )、 を横(列 )に並べ、 の表を用意する。

  2. 0 行目と 0 列目を埋める。空文字列から を作るには挿入のみなので 。 を空にするには削除のみなので 。

  3. 残りのマスを、上の行から順に、各行は左から右へ埋める。。上のマスからは削除、左のマスからは挿入、左上のマスからは一致または置換。

  4. 右下のマス が から への編集距離である。

例題

削除のコストを 、挿入のコストを 、置換のコストを とする。文字列 を文字列 に作り替える編集距離を求めよ。

例題の解答

【手順1】 は で 、 は で である。 の表を作る。
【手順2】 より 0 行目は 。 より 0 列目は 。
【手順3】漸化式で埋める。 の中は(上, 左, 左上一致なら ・不一致なら )の順に書く。
1 行目():



2 行目():
は で一致なので


3 行目():

は で一致なので

【手順4】 が編集距離である。実際、先頭の を削除し(コスト 1)、末尾に を挿入すれば(コスト 1)、 とコスト 2 で作り替えられる。

答え:

よくある誤り

この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。

入口の問題

この技能を使う問題