Smith-Waterman算法、Needleman-Wunsch算法的算法原理及算法比较
史密斯-沃特曼算法(Smith-Waterman algorithm)是一种进行局部序列比对(相对于全局比对)的算法,该算法的目的不是进行全序列的比对,而是找出两个序列中具有高相似度的片段。可简称为SW算法。
尼德曼-翁施算法(Needleman-Wunsch Algorithm)是基于生物信息学的知识来匹配蛋白序列或者DNA序列的算法。这是将动态算法应用于生物序列的比较的最早期的几个实例之一。该算法是由 Saul B. Needlman和 Christian D. Wunsch 两位科学家于1970年发明的。本算法高效地解决了如何将一个庞大的数学问题分解为一系列小问题,并且从一系列小问题的解决方法重建大问题的解决方法的过程。该算法也被称为优化匹配算法和整体序列比较法。时至今日,Needleman-Wunsch 算法仍然被广泛应用于优化整体序列比较中。可简称为NW算法
先介绍Smith waterman算法的原理:
(此处使用的是空位权值恒定模型的smith waterman算法)
-
算法目的:寻找具有最高相似性的局部序列,进行局部序列匹配
-
假设:
比对的两序列为:
则两序列的长度分别为len(A) = n,Len(B)=m;
s(a,b):字符a和字符b的相似分数;
H:匹配分数矩阵
W1 = 2 :一个空位罚分,这里设置为2(可根据需要设置) -
算法步骤:
-
初始化算法分数矩阵H,使行i表示字符ai,列j表示字符bj;
-
计算矩阵中每一项的Hij:
-
回溯,从矩阵H中分数最大的一项开始:
若ai=bj,则回溯到左上角单元格
若ai≠bj,回溯到左上角、上边、左边中值最大的单元格,若有相同最大值的单元格,优先级按照左上角、上边、左边的顺序 -
根据回溯路径,写出匹配字符串:
若回溯到左上角单元格,将ai添加到匹配字串A‘,将bj添加到匹配字串B’;
若回溯到上边单元格,将ai添加到匹配字串A’,将_添加到匹配字串B’;
若回溯到左边单元格,将_添加到匹配字串A’,将bj添加到匹配字串B’。 -
得到局部最优匹配序列,结束
-
-
示例:
比对序列为:A=TGTTACGG,B=GGTTGACTA
最终得到的最优匹配序列为:
A’:GTT_AC
B’:GTTGAC
接着介绍Needleman wunsch算法原理
-
算法目的:比对两个序列,得到这俩序列的全部序列匹配
-
假设:
比对的两序列为:
则两序列的长度分别为len(A) = n,Len(B)=m;
LCS(A,B):字符串A和字符串B的最长公共子串的长度。
LCS(A,B)=0表示两个字符串没有公共部分。
LCS(i,j)=LCS(a1a2……ai,b1b2……bj),其中0≤i≤N,0≤j≤M
(注:needleman wunsch算法的评分机制有很多种,此处我使用LCS长度作为评分机制。) -
算法步骤:
-
初始化算法分数矩阵,使行i表示字符ai,列j表示字符bj;
-
计算矩阵中每一项的LCS(i,j):
若ai=bj,则LCS(i, j) = LCS(i-1, j-1)+1,即取左上角的值+1
若ai≠bj,则LCS(i, j) = Max( LCS(i-1, j-1), LCS(i-1, j), LCS(i, j-1) ),即从左到上取最大值 -
回溯,从矩阵右下角开始:
若ai=bj,则回溯到左上角单元格
若ai≠bj,回溯到左上角、上边、左边中值最大的单元格,若有相同最大值的单元格,优先级按照左上角、上边、左边的顺序 -
根据回溯路径,写出匹配字符串:
若回溯到左上角单元格,将ai添加到匹配字串A‘,将bj添加到匹配字串B’;
若回溯到上边单元格,将ai添加到匹配字串A’,将_添加到匹配字串B’;
若回溯到左边单元格,将_添加到匹配字串A’,将bj添加到匹配字串B’。 -
得到全部匹配序列,结束
-
-
示例:
比对序列为: A=GGATCGA,B=GAATTCAGTTA
下图是初始化矩阵,然后是分数计算结果
回溯:
结果:
(关于编辑操作的理解,可以参考编辑距离的介绍。)
Smith-Waterman算法与Needleman-Wunsch算法比较:
可以看到Smith-Waterman算法与Needleman-Wunsch算法还是很类似的,除了评分方法和回溯的起点不一样,其他基本上是一样的,其实史密斯-沃特曼算法是尼德曼-翁施算法的一个变体,二者都是动态规划算法。史密斯-沃特曼算法的优势在于可以在给定的打分方法下找出两个序列的最优的局部比对(打分方法使用了置换矩阵和空位罚分)。史密斯-沃特曼算法和尼德曼-翁施算法的主要区别在于该算法不存在负分(负分被替换为零),因此局部比对成为可能,同时,史密斯-沃特曼算法的回溯从分数最高的矩阵元素开始,直到遇到分数为零的元素停止,分数最高的局部比对结果在此过程中产生。
总结:
史密斯-沃特曼(Smith-Waterman algorithm)算法为局部比对算法,用于找出两序列中最相似的区域。尼德曼-翁施算法(Needleman-Wunsch Algorithm)为全局比对算法,用于完整匹配两个序列。两种算法都使用了置换矩阵,空位罚分,得分矩阵,以及回溯的方法,具有一定的相似度。而这两种算法的目不同,因此研究者在选择算法时要根据实际需求来决定。
扩展:
Needleman-Wunsch算法与LD编辑距离算法也是很类似的,感兴趣的可以看看:
Levenshtein Distance (LD算法) 编辑距离算法原理