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

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

難易度 3期末試験の応用レベル大学数学 アルゴリズムと計算量

文字列 から 個以上の文字を取り除き、残った文字を順序を変えずに並べた文字列を の部分列という。 つの文字列 の両方の部分列である文字列を共通部分列といい、共通部分列のうち長さが最大のものを最長共通部分列という。

とする。 と の最長共通部分列は、文字列として何通りあるか求めよ。ただし、取り出す文字の位置が異なっても、文字列として同じものは 通りと数える。

この問題で使うもの

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

読み込み中…

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

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

ヒント

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

ヒント 1

まず通常の動的計画法で最長共通部分列の長さ の表を作り、そのあと各マスに「長さ最大の共通部分列の集合」を持たせて表を埋め直すとよい。

ヒント 2

なら は の各文字列の末尾に を付けたもの、 なら と のうち長さが大きいほう(等しければ両方)の和集合になる。

ヒント 3

長さは になる。 なので、求める集合は の各要素の末尾に B を付けたものであり、、 である。

答えと解説

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

、 とする。

方針. の先頭 文字と の先頭 文字の最長共通部分列の長さを 、その最長共通部分列(文字列)全体の集合を とする。、( は空文字列)である。

  • のとき: であり、どの最長共通部分列も最後の文字を と に対応させるように取り直せるので、。
  • のとき: と の少なくとも一方は使われないので であり、 は と のうち長さが に等しいほうの和集合(等しければ両方の和集合)。

長さの表 (行が 、列が ):

ABCADB
C001111
A111222
B122223
D122233
A122333
B122334

よって最長共通部分列の長さは 。

集合の表 :

  • (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。

したがって答えは 通り。

この問題の確認

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

間違いを報告する

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

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

関連する問題