動的計画法・再帰 / LCS(最長共通部分列)

2 つの文字列で
共通部分列の長さを測る。

最長共通部分列は、2 つの列に共通して現れる順序付き要素列の最長長を求めます。DP テーブルが典型です。

DP / 再帰表や木で理解定番教材

目次

このページの目次

このページでわかること

先に知っておくポイント

1. 状態が何か
2. 前の状態をどう使うか
3. なぜその漸化式になるか

概要

概要

最長共通部分列は、2 つの列に共通して現れる順序付き要素列の最長長を求めます。DP テーブルが典型です。

考え方

擬似コード

if s[i] == t[j]: dp[i][j] = dp[i-1][j-1] + 1
else: dp[i][j] = max(top, left)

要点

要点まとめ

時間計算量

O(nm)

空間計算量

O(nm)

主題

文字列 DP

出力

長さまたは列

補足

向いている場面と注意点

一致したら

左上 + 1 を使います。

一致しなければ

上と左の大きい方を取ります。

編集距離との比較

表の見た目が近いので並べると良いです。

動きで確認

動きを見てたしかめる

ここでは「状態が何か」を見ながら、上で読んだ内容を動きと結びつけます。

注目決定的確定

次に見る

次に見るページ

比較すると違いがわかりやすいページを先に置いています。