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]
不正确?
答案 0 :(得分:0)
您正在考虑a[i] != a[j]
的情况,这意味着您当前正在比较两个序列A和B的字母是不同的。因此,最长公共子序列的长度是两件事之一:
L[i-1,j]
; L[i,j-1]
。如果L[i-1,j-1]
是正确的,则意味着A和B中的当前字符都不计算,它们没有得到机会"成为后续部分的一部分。
参见例如this explanation(请注意,它在序列中向前而不是向后)。