【问题标题】:Multiple Sequence Alignment (Longest Common Subsequence)?多序列比对(最长公共子序列)?
【发布时间】:2012-04-09 13:00:21
【问题描述】:

好的,这就是我想要做的:

获取两个以上的字符串并“对齐”它们(没有 DNA/RNA 序列等,只是常规字符串,每个字符串中的项目不超过 1000 个)

我已经完成了一些成对对齐(对齐两个字符串)的工作,但是当我尝试对齐多个字符串时,“间隙”给我带来了一些问题。

示例(我目前正在测试)

ABCDEF
ABGHCEEF
AJKLBCDYEOF

AB--CDEF
ABGHCEEF
=======================
AB--C-EF

A-B--C--E-F
AJKLBCDYEOF
=======================
A----C--E-F

还有另一个(更具说明性的)示例:

http://nest.drkameleon.com
http://www.google.com
http://www.yahoo.com

http://nest.drkameleon.com
http://-www.--google--.com

=======================
http://----.------le--.com

http://----.------le--.com
http://-www.-----yahoo.com

=======================
http://----.----------.com

我目前在做什么:

  • 对字符串进行排序(较长的字符串排在最前面)
  • 对齐第一对:A-B 并得到结果(比如说R1
  • 然后对齐第二对:R1C(结果为 R2
  • 然后对齐第三对:R2D
  • 等等……

那么你的想法是什么?我怎么能这样做呢?有没有更好的办法? (当然,一定有……)

我宁愿在 Perl/Python 或类似的东西中这样做,但是任何类型的代码/参考都会受到欢迎! :-)

【问题讨论】:

标签: python objective-c perl lcs sequence-alignment


【解决方案1】:

我认为您可以将此问题转换为更一般的字符串diff 问题,而不是字符串alignment。考虑如何使用 GNU diff 查找两个文件之间的差异,并使用与执行 N 路 diff 相同的算法。

我不确定这种方法的时间/内存复杂性是否符合您的需求,但您至少可以这样考虑问题。

【讨论】:

    【解决方案2】:

    有一种基于 Levenshtein 算法的算法来计算最长的公共序列,带有可选的空格。不确定这是否有帮助。

    【讨论】:

    猜你喜欢
    • 2011-08-10
    • 2011-03-01
    • 2013-12-06
    • 1970-01-01
    • 2011-02-25
    • 2013-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多