String 最短公共超弦算法?

String 最短公共超弦算法?,string,algorithm,sequence,String,Algorithm,Sequence,我试图在这里对这个问题进行编码: 但是我想找到一种算法,它可以分解解决问题的步骤。我似乎在网上找不到太有用的东西,所以我来这里是想问是否有人知道我可以用来引用解决这个问题的算法的资源。这就是所谓的。其思想是为了使超序列最短,我们希望找到尽可能多的a和b的共享位。我们可以分两步解决这个问题: 求a和b的最长公共子序列 插入a和b的剩余位,同时保留这些位的顺序 我们可以用动态规划来解决这个问题 我同意Terry Li的观点:找到多个序列的SCS是NP完全的。对于2个序列(假设s的长度为n,t的长度

我试图在这里对这个问题进行编码:

但是我想找到一种算法,它可以分解解决问题的步骤。我似乎在网上找不到太有用的东西,所以我来这里是想问是否有人知道我可以用来引用解决这个问题的算法的资源。

这就是所谓的。其思想是为了使超序列最短,我们希望找到尽可能多的a和b的共享位。我们可以分两步解决这个问题:

  • 求a和b的最长公共子序列

  • 插入a和b的剩余位,同时保留这些位的顺序


  • 我们可以用动态规划来解决这个问题

    我同意Terry Li的观点:找到多个序列的SCS是NP完全的。对于2个序列(假设s的长度为n,t的长度为m),我的解决方案(不使用LCS,但使用类似的方法)在O(nm)时间内完成:

    1) 运行一个全局对齐,在该对齐中,您不允许不匹配,不惩罚indel,并为匹配项提供正分数(我为匹配项提供了+1,为不匹配项提供了+10,为indel提供了0,但这些都可以调整)。(这是O(纳米))


    2) 迭代输出字符串v和w的全局对齐。如果v[i]不是间隙,则输出它。否则,输出w[i]。(这是O(n+m))。

    在这个例子中,c的子序列是什么?@AbhishekBansal-
    a
    c
    的子序列,因为
    c
    包含
    a
    的元素,它们在
    a
    中出现的顺序。元素不必是连续的,只是顺序相同。编辑:这是最短的公共超序列问题,而不是最短的公共超序列。最短公共超弦包括找到两个字符串之间的最大重叠,然后合并它们。所需要的只是最短公共超弦的长度。我想知道计算长度所需的工作量是否与寻找实际最短的公共超序列所需的工作量一样大(这是一个NP完全问题——参见Theor.Comp.Sci.,16(1981),187-198)。如果是这样,那么OP寻找“有效算法”的挑战是不可能的。@TedHopp不,找到两个序列的SCS不是NP难的。找到任意数量序列的SCS只是NP难:)我试图解决同样的问题,你能解释一下如何“插入剩余的位”吗?谢谢大家!@泰瑞莉