Smith Waterman算法如何将较短的序列与较长的序列匹配

时间:2013-11-20 13:08:52

标签: algorithm dynamic dynamic-programming bioinformatics

这是我为原史密斯水手算法编写的伪代码。

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),如何修改代码?

1 个答案:

答案 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 questionthese slides