最常见的子序列复发

时间:2014-04-17 09:19:06

标签: dynamic lcs

lcs的重复发生是:

L[i,j] = max(L[i-1,j], L[i,j-1]) if a[i] != a[j]

您能告诉我为什么i-1j-1?为什么L[i,j] = L[i-1,j-1]不正确?

1 个答案:

答案 0 :(得分:0)

您正在考虑a[i] != a[j]的情况,这意味着您当前正在比较两个序列A和B的字母是不同的。因此,最长公共子序列的长度是两件事之一:

  1. A的当前子字符串的最长公共子序列减去其第一个字符和B,即L[i-1,j];
  2. A的最长公共子序列和B的当前子串减去其第一个字符,即L[i,j-1]
  3. 如果L[i-1,j-1]是正确的,则意味着A和B中的当前字符都不计算,它们没有得到机会"成为后续部分的一部分。

    参见例如this explanation(请注意,它在序列中向前而不是向后)。