algorithm - 最长公共(public)子序列算法

标签 algorithm dynamic-programming

在最长公共(public)子序列 (LCS) 问题中,为什么我们要匹配字符串的最后一个字符。对于前 考虑输入字符串 “AGGTAB”“AXTXAYB”。最后一个字符匹配字符串。所以LCS的长度可以写成:

L(“AGGTAB”, “AXTXAYB”) = 1 + L(“AGGTA”, “AXTXAY”)

如果我们匹配字符串的第一个字符,算法是否仍会产生最佳搜索。例如

考虑输入字符串 “AGGTAB”“AXTXAYB”。第一个字符匹配字符串。所以LCS的长度可以写成:

L(“AGGTAB”, “AXTXAYB”) = 1 + L(“GGTAB”, “XTXAYB”)

LCS 问题:Longest Common Subsequence Problem

最佳答案

是的,这是一回事。

计算两个反转序列的 LCS 与反转两个序列在​​反转前的 LCS 相同。换句话说,

REVERSE(LCS(A,B)) = LCS(REVERSE(A), REVERSE(B))

假设LCS从末端开始减少,右边的操作将从另一端开始,但得到相同的结果。

这就是为什么您可以像处理解释中的后缀一样处理前缀:您将在此过程中获得相同类型的递归归约。

此外,如果您愿意,您可以在两端进行缩减。但是,这会使算法变得非常复杂,而不会给您带来任何加速返回。

关于algorithm - 最长公共(public)子序列算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23686741/

相关文章:

algorithm - 一种算法——后缀树

c++ - 自上而下的动态编程 VS 递归朴素解决方案。检查运行时执行

algorithm - 与算法的复杂性共舞

dynamic-programming - 动态编程 : top down versus bottom up comparison

java - 对取对数空间的快速排序的混淆

c++ - 记忆化的递归阶乘函数?

algorithm - 编码单词列表的压缩算法

javascript - 绘制一个三 Angular 形到像素数组

algorithm - 长度>=N 且总和>=S 的值的子集

python - 确定两个字符串是否最多相差 n 个字符