アルゴリズムと計算量の問題
文字 からなる文字列(DNA 配列)に対して、次の 種類の操作を考える。
- 削除: 文字を削除する(コスト )
- 挿入: 好きな位置に 文字を挿入する(コスト )
- 置換: 文字を別の 文字に置き換える(コスト )
操作をくり返して文字列 を文字列 に変換するとき、使った操作のコストの合計の最小値を、 から への重み付き編集距離という。
、 のとき、 から への重み付き編集距離を求めよ。
この問題で使うもの
- 編集距離(説明と入口の問題)
この問題を解けるようになるまで(2 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
編集距離の動的計画法を使います。 を「 の先頭 文字を の先頭 文字に変換する最小コスト」として、 の表を埋めましょう。
ヒント 2
です。削除と挿入のコストが違うので、縦方向(削除)は 、横方向(挿入)は になることに注意。初期値は 、 です。
ヒント 3
行目()は 、 行目()は 、 行目()は になります。残りの 行目を計算しましょう。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
、 とし、 を「 の先頭 文字を の先頭 文字に変換する最小コスト」と定める。求める値は である。
漸化式 なので
ここで は のとき 、 のとき (置換不要)である。
初期値 空文字列への変換は削除だけなので ()。空文字列からの変換は挿入だけなので ()。
表を埋める(上の行から、左から順に)
():
- ()
- ()
-
():
- ()
-
-
():
-
-
- ()
():
-
- ()
-
表にまとめると(行が 、列が )
よって編集距離は である。
(確認)たとえば の末尾の を削除して (コスト )、先頭 文字を 、 と置換して (コスト )とすれば、合計 で変換できる。
別解
を の先頭 文字から の先頭 文字への最小コストとする。漸化式は 。境界は 、。
行ごとの値(、)は次のとおり。
- : 0, 2, 4, 6
- (A): 1, 1, 2, 4
- (C): 2, 1, 2, 3
- (G): 3, 2, 2, 2
- (A): 4, 3, 2, 3
よって 。
検算: 最初の A を削除して CGA にし(コスト 1)、G→A、A→G と 2 回置換すると合計 3 で になる。コスト 2 以下は、長さを 3 にする削除が必須なので「削除 1 回+置換 1 回」に限られる。削除後の候補 CGA, AGA, ACA, ACG と CAG との不一致文字数はそれぞれ 2, 3, 3, 2 で、どれも置換 1 回では足りない。したがって 3 が最小。