最長共通部分列問題
LCS(R1, C3) は、G と C を比較し、それは一致しない。上の配列は空である; 左の一つは一つの要素 G を含んでおり、選択する最長のLCS(R1, C3)は(G)である。矢の指すのは左であり、二つの配列の最長となる。
LCS(R1, C4)も同様に(G)
LCS(R1, C5)も同様に(G)
LCS(R2, C1)は A と A を比較する。二つの要素は一致し、A は Ø に追加され、(A)となる。
LCS(R2, C2)は A と G を比較し、不一致。LCS(R1, C2)は上の(G)と左であるLCS(R2, C1)の(A)を使用する。この場合は、どちらの要素も含んでおり、その最長共通部分列は、二つの配列(A)と(G)のどちらかとなる。
LCS(R2, C3) は A と C を比較し、不一致、LCS(R2, C2) は、配列 (A) と (G) を含む。LCS(R1, C3) は(G)、それは既に LCS(R2, C2) を含んでいる。LCS(R2, C3)の結果は、もちろん、配列 (A) と (G) を含んでいる。
LCS(R2, C4) は A と A を比較し、一致。それは左上のセルに追加され、(GA)を与える。
LCS(R2, C5) は A と T を比較し、不一致。二つの配列(GA)と(G)を比較し、最長は(GA)、LCS(R2, C5) は(GA)である。
列が短くなるほど、部分問題も単純になる。短い配列は、「接頭辞(prefix)」という用語を使用して上手く説明できる。 配列の接頭辞は、配列の後ろを削除したものである。S を列(AGCA)とした時、列(AG)は、S の接頭辞の一つである。接頭辞は「もとの配列の名前」の後に、「接頭辞がいくつの文字を含んでいるか」の示す添え字を置くことで表わす。
接頭辞(AG)は、 S の最初の2要素を含んでいるので、S2 と表記される。可能な S の接頭辞は、
S1 = (A)
S2 = (AG)
S3 = (AGC)
S4 = (AGCA)
である。 任意の二つの列 X と Y の最長共通部分列問題を解くことは、X と Y の最長共通部分列を与える関数LCS(X, Y)を構成することである。この関数は、続く二つの特性を持つ。
最長共通部分列問題(さいちょうきょうつうぶぶんれつもんだい、英: Longest-common subsequence problem, LCS)とは、与えられた列の集合(しばしば、2つの列からなる集合)の最長共通部分列を見つけ出す問題である。(ここで部分列(subsequence)は、部分文字列(substring)とは異なることに注意する。前者は元の列の連続した項からなる必要はない。)例えば、「ABCX」と「AYBZC」との最長共通部分列は「ABC」である。この問題は計算機科学における古典的問題であり、diff などのファイル比較プログラムの基礎をなし、バイオインフォマティクスにも応用されている。