的复发lcs
是:
L[i,j] = max(L[i-1,j], L[i,j-1]) if a[i] != a[j]
你能告诉我为什么会这样吗i-1
?j-1
为什么不L[i,j] = L[i-1,j-1]
正确?
您正在考虑的情况是a[i] != a[j]
,这意味着您当前正在比较的两个序列 A 和 B 的字母不同。因此,最长公共子序列的长度是以下两种情况之一:
L[i-1,j]
;L[i,j-1]
.如果L[i-1,j-1]
正确,则意味着 A 和 B 中的当前字符都不算数,它们没有“机会”成为子序列的一部分。
例如参见这个解释(注意它在序列中向前而不是向后工作)。