史密斯-沃特曼算法(英語:Smith–Waterman algorithm)是一种进行局部序列比对(相对于全局比对)的算法,用于找出两个核苷酸序列或蛋白质序列之间的相似区域。这个算法不是直接考虑全序列的相似性,而是把所有可能长度的片段进行对比,以找出具有高相似度的片段。
该算法由坦普尔·史密斯和迈克尔·沃特曼于1981年提出。史密斯-沃特曼算法是内德曼-文施算法的一个变体,二者都是动态规划算法。这一算法的优势在于可以保证在给定的打分方法下找出两个序列的最优的局部比对(打分方法使用了置换矩阵和空位罚分)。该算法和内德曼-文施算法的主要区别在于该算法不存在负分(负分被设为零),因此局部比对成为可能。回溯从分数最高的矩阵元素开始,直到遇到值为零的元素停止。此过程中,分数最高的局部比对结果就产生了。在实际运用中,人们通常使用该算法的优化版本。
解释
建立矩阵:
其中,
- = Strings over the Alphabet
- 基于字母a,b的打分方法
- – is the maximum Similarity-Score between a suffix of a[1...i] and a suffix of b[1...j]
- is the gap-scoring scheme
例子
- 序列 1 = ACACACTA
- 序列 2 = AGCACACA
获得最优局部比对从矩阵中最高的元素(i,j)开始,根据建立矩阵的方向回溯,直到遇到为零的矩阵元素。
在此例子中,得分最高的元素与矩阵位置(8,8)对应,回溯经过 (8,8), (7,7), (7,6), (6,5), (5,4), (4,3), (3,2), (2,1), (1,1), 和 (0,0)。
回溯完成后,比对通过如下方法重建:从最后一个值开始,用回溯的路径到达(i,j)。对角线移动代表对两条序列进行比对(匹配或不匹配)。上下移动代表删除。左右移动代表插入。
该例子的结果为:
- 序列 1 = A-CACACTA
- 序列 2 = AGCACAC-A
相关链接
- BLAST
- Sequence mining
- FASTA
参考资料