algorithm - 如何解决带间隙条件的LCS(最长公共(public)子序列)

标签 algorithm dynamic-programming lcs

我知道一般的 LCS 问题和算法。

是这样的:

LCS(Xi, Yj) = [0 (i = 0 or j = 0)
           or LCS(Xi-1, Yj-1) + 1 (xi = yj)
           or max(LCS(Xi, Yj-1), LCS(Xi-1, Yj)) (xi != yj)]

但是如果我们添加一个间隙条件呢?

例如:

String A is cttauaucagu
String B is cautauatcgu

if no gap condition
lcs = cauauagu

if gap = 1 (lcs gap is under 1)
lcs = auaua

if gap = 0 (lcs gap is under 0)
lcs = taua

视觉呈现:

我该如何解决?

如何制作 DP 表?

最佳答案

这种情况下的解决方案没有太大区别。您必须向 dp 添加另外 2 个参数 - 两个字符串的公共(public)子序列中包含的最后一个元素的索引。然后在 dp 的每一步只搜索给定字符串中的 the_last_included_element 和 the_last_included_elemement + gap + 1 之间的相等元素。

关于algorithm - 如何解决带间隙条件的LCS(最长公共(public)子序列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19247314/

相关文章:

algorithm - 为什么这个动态规划递归关系是正确的?

python - 在 Python 的子列表中查找单词序列

c - 最长公共(public)子序列 : why is this wrong?

r - 确定一个共同的模式

string - 有效地查找字符串中的一组子字符串中的任何一个

c++ - 如何从多个 vector 中找到不相同的元素?

python - 大海捞针,什么是更好的解决方案?

algorithm - 如何求解递归 T(n) = T(n/2) + T(n/4), T(1) = 0, T(2) = 1 即 T(n) = Θ(n lg φ ),其中 φ 是黄金比例?

algorithm - 两个数的最大与

algorithm - 计算给定范围内具有唯一数字的所有数字