【发布时间】:2013-02-23 16:41:28
【问题描述】:
我有两个要对齐的 100 个字符的数组(最大值,可以小于或不同的大小)。当字符与另一个字符不同时,我想添加一个“-”。我找到了基于动态编程的Needleman–Wunsch 算法和基于动态编程的通用局部对齐方法Smith–Waterman 算法,但它们对于我想做的事情来说似乎太复杂了。我只需要一个简单的Java算法,大概不到50行,这段代码会被翻译成汇编语言,所以我需要一个简单的算法。
有没有办法用 diff 算法进行这种对齐?如果是的话,有人可以指出我该怎么做吗?我在biostar部分搜索,但似乎我需要使用我提到的两种算法。
英语不是我的母语,所以也许我搜索了错误的关键字。
我的程序已经使用 Needleman 算法及其大约 200 行(ish)代码。
所需输入/输出示例:
Input
Array 1 : MKNLASREVNIYVNGKLV
Array 2 : QMASREVNIYVNGKL
Output
Array 1 (or a simple print) : -MKNLASREVNIYVNGKLV
Array 2 (or a simple print) : QM---ASREVNIYVNGKL-
【问题讨论】:
-
输出是否正确?
IY消失了,而Q仍然存在?数组 2 的顺序是否相关,还是仅遵循数组 1 的顺序? -
我修改了输入输出,让问题更清晰,顺序相关。
-
在 Wikipedia 文章 en.wikipedia.org/wiki/Sequence_alignment 中,基本上只列出了这些算法。互联网不太可能想出更好的东西。此外,您的问题场景比一般的序列比对情况更简单吗?
-
@Andrew 在我的情况下,性能不是问题。简单是问题,因为它将被翻译成汇编语言。我提到的算法高效快捷,但相当复杂,并且使用动态或加权算法,我无法翻译。我不想重新发明轮子。