动态编程

时间:2013-05-11 18:17:30

标签: dynamic-programming

任何人都可以向我解释最长公共子序列问题的解决方案吗?具体来说,递归关系是

if(x i = y j )则answer = max L (i- 1,j-1)+1

否则答案=最大{Max L (i-1,j),Max L (i,j-1)}

x i / y i 是构造表中的字母。 Max L 对应于构造的表中的条目。

我的问题是为什么答案maxL(i-1,j-1)+ 1?为什么我们必须在字母匹配时从左上角添加? 谢谢

1 个答案:

答案 0 :(得分:0)

递归关系中的

(xi = yj)表示字符串在它们各自的当前位置具有相同的字符。

让我们举一个简单的例子:

考虑输入字符串 AGGTAB GXTXAYB

最后一个字符'B'匹配两个字符串。[这是xi == yj条件成立]。

因此LCS的长度可写为:

LCS("AGGTAB", "GXTXAYB") = 1 + LCS("AGGTA", "GXTXAY")

LCS(“AGGTA”,“GXTXAY”)存储在表[i-1,j -1]中(即max L [i-1] [j-1])< / p>