アルゴリズムと計算量の問題
文字列 から 個以上の文字を取り除き、残った文字を順序を変えずに並べた文字列を の部分列という。 つの文字列 の両方の部分列である文字列を共通部分列といい、共通部分列のうち長さが最大のものを最長共通部分列という。
とする。 と の最長共通部分列は、文字列として何通りあるか求めよ。ただし、取り出す文字の位置が異なっても、文字列として同じものは 通りと数える。
この問題で使うもの
- 最長共通部分列(説明と入口の問題)
この問題を解けるようになるまで(2 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
まず通常の動的計画法で最長共通部分列の長さ の表を作り、そのあと各マスに「長さ最大の共通部分列の集合」を持たせて表を埋め直すとよい。
ヒント 2
なら は の各文字列の末尾に を付けたもの、 なら と のうち長さが大きいほう(等しければ両方)の和集合になる。
ヒント 3
長さは になる。 なので、求める集合は の各要素の末尾に B を付けたものであり、、 である。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
、 とする。
方針. の先頭 文字と の先頭 文字の最長共通部分列の長さを 、その最長共通部分列(文字列)全体の集合を とする。、( は空文字列)である。
- のとき: であり、どの最長共通部分列も最後の文字を と に対応させるように取り直せるので、。
- のとき: と の少なくとも一方は使われないので であり、 は と のうち長さが に等しいほうの和集合(等しければ両方の和集合)。
長さの表 (行が 、列が ):
| A | B | C | A | D | B | |
|---|---|---|---|---|---|---|
| C | 0 | 0 | 1 | 1 | 1 | 1 |
| A | 1 | 1 | 1 | 2 | 2 | 2 |
| B | 1 | 2 | 2 | 2 | 2 | 3 |
| D | 1 | 2 | 2 | 2 | 3 | 3 |
| A | 1 | 2 | 2 | 3 | 3 | 3 |
| B | 1 | 2 | 2 | 3 | 3 | 4 |
よって最長共通部分列の長さは 。
集合の表 :
- (C):
- (A):
- (B):
- (D):
- (A):
- (B):
例えば は なので の各要素に D を付けて 、 は なので に A を付けて となる。
最後に なので
確認: は の 文字目、 の 文字目。 は の 文字目、 の 文字目。 は の 文字目、 の 文字目。
したがって、最長共通部分列は文字列として 通りである。
別解
動的計画法で ( の先頭 文字と の先頭 文字の LCS の長さ)を計算する。、 のとき、表は次のようになる。
- : 0,0,1,1,1,1
- : 1,1,1,2,2,2
- : 1,2,2,2,2,3
- : 1,2,2,2,3,3
- : 1,2,2,3,3,3
- : 1,2,2,3,3,4
よって LCS の長さは である。
次に、 を先頭 文字と先頭 文字の LCS 全体の集合として、表をたどり直して文字列としての重複を除きながら列挙する。
- : なので 。
- : 、 で異なり、 なので 。
- : なので 。
- 。
- したがって 。
- : なので 。
- なので 。
- よって となり、。
検算として、3 つとも両方の部分列になっていることを確かめる。
- CADB: の位置 1,2,4,6、 の位置 3,4,5,6。
- ABDB: の位置 2,3,4,6、 の位置 1,2,5,6。
- ABAB: の位置 2,3,5,6、 の位置 1,2,4,6。
したがって答えは 通り。