好的,这就是我想要做的事情:
获取两个以上的字符串并“对齐”它们(没有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
我目前正在做的事情:
R1
)R1
和C
(结果为R2
)R2
和D
那么你的想法是什么?我怎么能这样做?有没有更好的办法? (当然,必须有...)
我宁愿在Perl / Python中执行此操作,也可以使用这些内容,但是任何类型的代码/引用都会受到欢迎! : - )
答案 0 :(得分:1)
我认为您可以将此问题转换为更常规的字符串 diff 问题,而不是字符串 alignment 。考虑如何使用GNU diff
来查找两个文件之间的差异,并使用与用于执行N路diff
的算法相同的算法。
我不确定这种方法的时间/内存复杂性是否适合您的需求,但您至少可以这样思考问题。
答案 1 :(得分:1)
有一种基于Levenshtein算法的算法来计算最长的公共序列,并带有可选的空格。不确定这是否有帮助。