logo

文字列の編集距離 📂アルゴリズム

文字列の編集距離

ビルドアップ 1

文字列には、次の四つの作用がある:

  1. 挿入: 文字列に新しい文字を挿入する。
  2. 削除: 文字列から文字一つを取り除く。
  3. 置換: 文字列内の文字一つを他の文字に変える。
  4. 転置: 二つの文字の位置を交換する。

定義

編集距離は、文字列間の距離関数として、編集方法を許可または禁止することによって、次のようなタイプに分類される:

  • (1) ハミング距離: ハミング距離は最もシンプルで、置換のみを許可する。つまり、同じ長さのベクトルが与えられた場合、異なる位置だけをカウントすることである。大したことはないが、説明で省略されることが多いので、名前そのものを覚えておくといい。例えば、次の二つのベクトルの距離は$3$だ。 $$ x = (1,1,0,1) \\ y = (0,1,1,0) $$
  • (2) レーベンシュタイン距離: レーベンシュタイン距離は挿入、削除、置換のみを許可する。編集距離としては最もメジャーに使われ、情報検索理論や生命情報学などの分野でも出会うことがある。レーベンシュタイン距離を測定するアルゴリズムには、レーベンシュタインアルゴリズムがある。例えば、「cats」と「facts」は、次の二つの編集を行うため、レーベンシュタイン距離は$2$だ。
    • (置換)cats → fats
    • (挿入)fats → facts
  • (3) ジャロ距離: レーベンシュタイン距離とは反対に、ジャロ距離は転置のみを許可する。
  • (4) 最長共通部分列距離: LCS距離は、挿入と削除のみを許可する。