アルゴリズムと計算量の問題
文字 からなる文字列に対して、次の 種類の操作を考える。
- 挿入: 好きな位置に 文字を挿入する(コスト )
- 削除: 文字を削除する(コスト )
- 置換: 文字を別の 文字に置き換える(コスト )
これらの操作をくり返して、文字列 を文字列 に変換する。かかるコストの合計の最小値(重み付き編集距離)を求めよ。
この問題で使うもの
- 編集距離(説明と入口の問題)
この問題を解けるようになるまで(2 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
編集距離の動的計画法を使う。 を「 の先頭 文字を の先頭 文字に変換する最小コスト」として、 の表を埋める。
ヒント 2
漸化式は 。初期値は (削除のみ)、(挿入のみ)。
ヒント 3
1 行目()は 、2 行目()は となる。残りの 3 行目を計算しよう。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
、 とし、 を「 の先頭 文字を の先頭 文字に変換する最小コスト」とする。 なので、漸化式は
である( は のとき 、 のとき )。
初期値: 空文字列にするには全部削除するので 、空文字列から作るには全部挿入するので 。
()
- (、不一致):
- (、一致):
- (、不一致):
()
- (、一致):
- (、不一致):
- (、不一致):
()
- (、不一致):
- (、不一致):
- (、一致):
よって求める最小コストは である。
実際、 の先頭に を挿入して (コスト )、 文字目の を削除して (コスト )とすれば、合計 で変換できる。なお、置換 回(、)ではコスト かかる。
別解
長さが等しい(どちらも3文字)ので、挿入と削除の回数は等しい。したがって、操作を1回以上使うなら、置換を1回以上使うか、削除と挿入を1回ずつ以上使うことになる。置換1回のコストは3、削除と挿入を1回ずつ使うコストは なので、どちらでもコストは3以上になる。X と Y は異なる文字列なので操作は必要であり、最小値は3以上である。
実際に3で達成できる。ACG から先頭の A を削除して CG にする(コスト2)。次に C と G の間に A を挿入して CAG にする(コスト1)。合計コストは3である。
検算として、動的計画法(編集距離の表)でも同じ値になる。挿入と削除だけを使う場合、最長共通部分列の長さは2(AG または CG)なので、コストは削除1回と挿入1回で になる。2文字とも置換する場合は で、これより大きい。
よって最小値は3である。