这是我为原史密斯水手算法编写的伪代码。
Input: U[1, n], V[1, m]
Set W[0, j] = 0 for j = 0 .. m
Set W[i, 0] = 0 for i = 0 .. n
For i = 1 to n
For j = 1 to m
W[i, j] = max {
0,
W[i, j-1] - d,
W[i-1, j-1] + s(U[i], V[j]),
W[i-1, j] - d
}
现在我需要将更短的序列U(1-n)拟合成更长的序列V(1-m),如何修改代码?
答案 0 :(得分:1)
消除DNA序列中缺口的惩罚,同时保持mRNA序列中的缺口,应该非常简单。假设U是DNA而V是mRNA(否则,这将是另一种方式),你只需从你在i中插入间隙的情况的值中删除空位罚分项(-d)(W [我,j-1]),如此:
W[i, j] = max {
0,
W[i, j-1],
W[i-1, j-1] + s(U[i], V[j]),
W[i-1, j] - d
}
但是,这可能不是解决您问题的有效方法。您仍然希望在与DNA对齐的情况下,在DNA中没有间隙的情况下支持比对。一个简单的解决方案是对DNA中的缺口使用不同的,较小的间隙罚分。然而,鉴于您想要考虑具有内含子的一个序列而另一个没有内含子的序列,您可能最好通过仿射空位罚分来服务。
仿射差距罚分是指开始差距而不是继续罚分的罚分。因此,它有利于创建扩展的内含子样间隙,使其更有可能为您提供生物学上合理的比对(即使在更标准的生物序列比对问题中,仿射空位罚分往往更成功)。不幸的是,实现仿射差距惩罚有点复杂。您最终需要跟踪三个得分/指针矩阵。有关伪代码和更多信息,请参阅this question或these slides。