繁体   English   中英

多序列 Alignment(最长公共子序列)?

[英]Multiple Sequence Alignment (Longest Common Subsequence)?

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

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

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

示例(我目前正在测试的一个)

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

我目前在做什么:

  • 对字符串进行排序(较长的字符串在列表中排在第一位)
  • 对齐第一对:AB 并得到结果(比方说R1
  • 然后对齐第二对: R1C (结果为R2
  • 然后对齐第三对: R2D
  • 等等...

那么你在想什么? 我怎么能 go 呢? 有没有更好的办法? (当然,必须有...)

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM