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

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

難易度 1教科書の例題レベル大学数学 アルゴリズムと計算量

文字列 から 個以上の文字を取り除き、残った文字を元の順に並べて得られる文字列を の部分列という(取り除く文字は連続していなくてよい)。 つの文字列の両方の部分列であるものを共通部分列といい、共通部分列のうち長さが最大のものを最長共通部分列という。

つの DNA 塩基配列を表す文字列

の最長共通部分列の長さを求めよ。

この問題で使うもの

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

読み込み中…

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

一覧で見る(前提が先)
  1. 動的計画法の基本(硬貨の最小枚数)
  2. 最長共通部分列

ヒント

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

ヒント 1

最長共通部分列の表 ( の先頭 文字と の先頭 文字の最長共通部分列の長さ)を動的計画法で埋める技能を使う。

ヒント 2

なら 、そうでなければ 。 から始める。

ヒント 3

行目(G)は 、 行目(A)は 、 行目(T)は になる。残りの 行を同じように埋め、右下の値を読む。

答えと解説

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

、 とし、 を「 の先頭 文字と の先頭 文字の最長共通部分列の長さ」とする。

初期値: 一方が空文字列なら共通部分列は空文字列だけなので、。

漸化式: のとき

これを の行から順に、各行は左から右へ埋める(上・左・左上の値がすでに求まっているので計算できる)。

  • (): で一致して 。それより左は 、右は で 。行は 。
  • (): は 。(A)一致で 。 は で 。(A)一致で 。行は 。
  • (): (T)一致で 。 は で 。 は 。行は 。
  • (): は で 。(C)一致で 。 は で 。行は 。
  • (): は 。(A)一致で 。 は で 。(A)一致で 。行は 。

表にまとめると(行が 、列が )

右下の値 が答えである。実際、(あるいは )は の両方の部分列になっている。

答え:

別解

長さ 3 の共通部分列として TCA がある。X = GATCA では 3, 4, 5 文字目、Y = TACGA では 1, 3, 5 文字目として取り出せる。

長さ 4 の共通部分列がないことを確かめる。X の長さ 4 の部分列は、1 文字を取り除いた次の 5 通りしかない。
- ATCA(G を除く)
- GTCA(2 文字目の A を除く)
- GACA(T を除く)
- GATA(C を除く)
- GATC(最後の A を除く)

Y = TACGA について、それぞれ部分列かどうかを調べる。
- ATCA: A(2 文字目) の後に T がないので、部分列でない。
- GTCA: G(4 文字目) の後に T がないので、部分列でない。
- GACA: G(4 文字目)、A(5 文字目) の後に C がないので、部分列でない。
- GATA: G、A の後に T がないので、部分列でない。
- GATC: A の後に T がないので、部分列でない。

どれも Y の部分列でないので、長さ 4 以上の共通部分列は存在しない。したがって最長共通部分列の長さは 3 である。

この問題の確認

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

間違いを報告する

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

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

関連する問題