最短的常见超弦算法?

时间:2013-10-22 02:38:01

标签: string algorithm sequence

我正在尝试在此处编码此问题: enter image description here

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

2 个答案:

答案 0 :(得分:6)

这称为shortest common supersequence problem。我们的想法是,为了使超级序列最短,我们希望尽可能多地找到a和b的共享位。我们可以分两步解决问题:

  1. 找到a和b的最长公共子序列。

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

  3. 我们可以使用动态编程来解决longest common subsequence problem

答案 1 :(得分:0)

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

1)运行一个全局对齐,你不允许不匹配,不惩罚indel,并给匹配一个正分数(我匹配+1,不匹配-10,indels 0,但这些可以被调整)。 (这是O(nm))

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