如何使用最小子序列长度约束实现序列比对。例如,让这些输入的最小子序列长度为3.使用Smith-Waterman给出如下输出。
ATACGGACC
|| |||
ATCATAACC
但我需要如下。
---ATACGGACC
||| |||
ATCATA---ACC
是否有一个知道算法,或者你知道一种方法吗?
提前致谢。
答案 0 :(得分:3)
看看史密斯 - 沃特曼是如何运作的。您有两个序列(长度为N的S1,长度为M的S2)并且您创建一个NxM矩阵(让我们称之为A),其中A(i,j)是" S1的最佳分数对齐[ 1..i]和S2 [1..j]。"要做到这一点,你写一个关于如何根据最后一个元素获得A(i,j)的复发 - A(i,j)是最好的
A(i-1, j-1) + match/mismatch score
A(i,j-1) + indel score
A(i-1,j) + indel score
这是基本的想法;你可能需要调整一下。
要做你要问的事,你需要两个矩阵。设A(i,j)为" S1 [1..i]和S2 [1..j]的最佳得分对齐,以匹配"和B(i,j)是" S1 [1..i]和S2 [1..j]的最佳分数对齐,以indel结尾。"
让我们从B开始,因为它更容易。 <(p,j)是最好的
A(i,j-1) + indel score
A(i-1,j) + indel score
B(i,j-1) + indel score
B(i-1,j) + indel score
A(i,j)是最好的
A(i-1, j-1) + match/mismatch score
B(i-3, j-3) + match/mismatch score for the three
答案 1 :(得分:1)
该算法有效地返回所有可能子序列的2D表。你必须做额外的工作来提取实际的子序列,显然你正在做。在对齐(后退)跟踪期间,您可以进行入场检查:
if(subsequence.length() > 2)
results.add(subsequence);
如果您不想像我提到的那样去,那么您是否介意显示您用于获取实际子序列的代码然后我们可以告诉您在哪里编辑?