いくつかの簡単な手順で、LIS、LCS、LICS の問題を解決できます

LIS、LCS、LICS はすべて dp の基本モデルであり、

今日、最も長い一般的な昇順部分列の問題を確認するときに、これらの 3 つのタイプの問題を簡単にまとめました。

LCS (最長共通部分列)

記述には 2 つのシーケンスが与えられ、2 つのシーケンスで最も長い共通部分シーケンスの長さを見つけます。

状態の定義:

f (i, j) は、シーケンス a の最初の i 個の数字とシーケンス b の最初の j 個の数字で構成される最長共通部分シーケンスの長さです。

伝達式:

f(i, j) = f(i - 1,j - 1) + 1 (i, j > 0,a[i] == b[j])

f(i, j) = max(f (i - 1, j),f(i, j - 1) ) (i, j > 0, a[i] != b[j] );

LIS (最長昇順サブシーケンス)

説明にはシーケンスが与えられます。このシーケンスで最も長い昇順のサブシーケンスの長さを見つけてください

状態の定義:

f(j) は、指定されたシーケンス a[j] で終わる最長の昇順サブシーケンスの長さです

伝達式:

f[j] = 最大 f[j] + 1;(j < i,a[j] < a[i] )

LICS (最長共通昇順部分列)

説明には 2 つのシーケンスが与えられています。2 つのシーケンスで最も長い共通の昇順サブシーケンスの長さを見つけてください

状態の定義:

f(i, j) は、シーケンス a の最初の i 要素と、b[j] で終わるシーケンス b の最初の j 要素の LICS 長です。

t は、最長 LICS の終了要素位置です。

伝達式:

f[i][j] = f[i - 1][j] (a[i] != b[j])

f[i][j] = max(f[i - 1][j],f[i - 1][t] + 1) (a[i] == b[j])

おすすめ

転載: blog.csdn.net/m0_66252872/article/details/125273045