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

アルゴリズムと計算量の問題

難易度 2教科書の演習問題レベル大学数学 アルゴリズムと計算量

英大文字からなる文字列に対して、次の 種類の操作を考える。

  • 挿入: 好きな位置に 文字を挿入する
  • 削除: 文字を削除する
  • 置換: 文字を別の 文字に置き換える

どの操作も 回につきコスト とする。文字列 を文字列 に変えるのに必要な操作の回数の最小値を、 と の編集距離という。

文字列 と の編集距離を求めよ。

この問題で使うもの

この問題を解けるようになるまで(2 技能)
算数中学高校大学大学院

読み込み中…

右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。

一覧で見る(前提が先)
  1. 動的計画法の基本(硬貨の最小枚数)
  2. 編集距離

ヒント

行き詰まったら、上から順に 1 つずつ開いてください。

ヒント 1

の先頭 文字を の先頭 文字に変える最小回数 を考え、小さい から順に表を埋めていきましょう。

ヒント 2

最後の操作は「削除」「挿入」「置換(または文字が等しくてそのまま)」のどれかなので、( なら 、そうでなければ )が成り立ちます。

ヒント 3

, から始めると、1 行目(P の行)は 、2 行目(A の行)は になります。同じように最後の行まで計算しましょう。

答えと解説

答えを見る
結果を記録する(このブラウザにだけ保存されます):
解説を読む

の先頭 文字と の先頭 文字の編集距離を とする(, )。 の 文字目を 、 の 文字目を と書く。

最後の文字に注目すると、最後の操作は「 を削除」「 を挿入」「 を に合わせる(等しければコスト 、異なれば置換でコスト )」のどれかなので、


が成り立つ。ここで なら 、 なら である。

この漸化式で、 の小さい行から順に表を埋める(行が の文字、列が の文字)。

DRAPED
0123456
P1123345
A2222345
R3323345
A4432345
D5443344
E6554434

いくつか計算を確かめておく。

  • : なので 。ほかの候補 , より小さいので
  • : なので
  • : なので
  • : なので候補は , , で、
  • : なので
  • : なので候補は , , で、

よって編集距離は である。

実際、表をたどると次の 回の操作で変換できる。

答えは である。

別解

動的計画法で編集距離表 ( の先頭 文字と の先頭 文字の編集距離)を作る。漸化式は 、初期値は 。

DRAPED の列 () に対し、各行は次のようになる。

  • 空 : 0 1 2 3 4 5 6
  • P : 1 1 2 3 3 4 5
  • A : 2 2 2 2 3 4 5
  • R : 3 3 2 3 3 4 5
  • A : 4 4 3 2 3 4 5
  • D : 5 4 4 3 3 4 4
  • E : 6 5 5 4 4 3 4

右下の値より、編集距離は 。

検算(具体的な操作列): PARADE から、P を D に置換して DARADE、A を R に置換して DRRADE、R を A に置換して DRAADE、続く A を P に置換して DRAPDE、……とすると 5 回以上かかってしまうので別の経路を使う。PARADE の先頭の P を削除して ARADE、R の前に D を挿入して... とするのも遠回りである。表の経路をたどると、PARADE → (P→D) DARADE → (A→R) DRRADE ではなく、アラインメント P-D, A-R, R-A, A-P, D-E, E-D の 6 置換は 6 回で、これより良い経路として、先頭に D を挿入して DPARADE、P を R に置換して DRARADE、A を残し R を P に置換して DRAPADE、A を削除して DRPDE... のように調整しても 4 に達する経路が表の逆たどりで存在する。表の逆たどり: は ではなく からの挿入(D の挿入)。 は E の一致で 、 は P に関して D の削除 ( から)、 は からの P の挿入、 は A の一致で 、 は R の一致で 、 は からの A の削除、 は P→D の置換。すなわち、P→D(置換)、A を削除、R を残す、A を残す、P を挿入、D を削除、E を残す、D を挿入、で PARADE → DRAPED となり、操作は置換 1 + 削除 2 + 挿入 2 の合計 5 ではなく、削除 A・削除 D・挿入 P・挿入 D・置換 P→D の 5 回に見える。これは表の経路と食い違うので表を再確認する。

再確認: 先頭の A()を削除する代わりに の A を使うと、PARADE の P→D(置換)、A→R(置換)、R→A(置換)、A→P(置換)と並べるより、「P→D、A 削除」ではなく次の 4 回の経路がある。PARADE の P を D に置換して DARADE。A を削除して DRADE。A の後に P を挿入して DRAPDE。D を E に置換して DRAPEE ではなく、DRAPDE の D を残して末尾 E の前の D を削除し DRAPE、末尾に D を挿入して DRAPED。ここまでの操作は置換 1 + 削除 1 + 挿入 1 + 削除 1 + 挿入 1 = 5 であり、DRAPDE の D→E の置換と E→D の置換の 2 回でも 5 回になる。

そこでさらに丁寧に表を検算すると、最終行の値 である。(EとDPARAの比較ではなく、PARADE と DRAPE の距離)を具体的に作る: PARADE → DRAPE は、P→D 置換、A 削除、R 残す、A 残す、D→P 置換、E 残す、の 3 回。確かに 3 回で DRAPE が得られる(DARADE→DRADE ではなく、PARADE の P→D で DARADE、2 文字目の A を削除して DRADE、D→P で DRAPE)。さらに末尾に D を挿入して DRAPED。合計 4 回。

よって編集距離は 。下界は表の最小値より成り立つ。

この問題の確認

AI が作成した問題です。公開前に次の確認を行いました。確認の方法について

間違いを報告する

この問題の誤り・分かりにくい点・難易度や学年のずれを知らせる
どこについての報告ですか

報告の内容と問題の番号を保存します。名前やメールアドレスは保存しません。

関連する問題