アルゴリズムと計算量の問題
文字列 から 個以上の文字を取り除き、残った文字を元の順に並べて得られる文字列を の部分列という(取り除く文字は連続していなくてよい)。 つの文字列の両方の部分列である文字列を共通部分列といい、共通部分列のうち長さが最大のものを最長共通部分列という。
つの DNA の塩基配列を表す文字列
を比べる。 の先頭から 文字目を 、 の先頭から 文字目を とし、 の最初の 文字と の最初の 文字の最長共通部分列の長さを とする()。 は と、 に対する漸化式
で求められる。この表を埋めて、 と の最長共通部分列の長さ を求めよ。
この問題で使うもの
- 最長共通部分列(説明と入口の問題)
この問題を解けるようになるまで(2 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
2 次元の表 を、動的計画法で小さい から順に埋めていく「最長共通部分列」の技能を使います。 行目と 列目はすべて です。
ヒント 2
各マスでは と を比べます。同じなら左上のマスに を足し、違うなら上のマスと左のマスの大きいほうをとります。
ヒント 3
行目(A)は 、 行目(G)は 、 行目(C)は になります。残りの 行も同じ規則で埋めてみましょう。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
行を の文字()、列を の文字()に対応させ、 から始めて、上の行から順に左から右へ埋めていく。
()
- (G):不一致。
- (A):一致。
- (C):不一致。
- (T):不一致。
- (A):一致。
行は 。
()
- (G):一致。
- 〜:すべて不一致で、上も左も なので
行は 。
()
- :不一致。
- :不一致。
- (C):一致。
- :不一致。
- :不一致。
行は 。
()
- :不一致。
- (A):一致。
- :不一致。
- :不一致。
- (A):一致。
行は 。
()
- :不一致。
- :不一致。
- :不一致。
- (T):一致。
- :不一致。
行は 。
表をまとめると次のとおり。
したがって である。
確認として、 は の 文字目、 の 文字目として現れるので、長さ の共通部分列が実際に存在する。
別解
の各文字 に対して、 の順に表を埋める(各行は の値で、)。
- (A):
- (G):
- (C):
- (A):
- (T):
たとえば は なので となる。 は なので となる。
検算: は の部分列でも の部分列でもあり、長さ の共通部分列が実際に存在する。表からは であり、これより長い共通部分列はない。
よって 。