这是基于动态规划的一种文本比对算法,常用于基因组序列的比对。
比如基因组上有一段序列为ATCGATCTGT,我需要比对的序列为ATCCATCAG,那么首先需要构建一个初始的打分矩阵:
A. T. C. G. A. T. C. T. G. T.
[[ 0. -1. -2. -3. -4. -5. -6. -7. -8. -9. -10.]
A. [ -1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
T. [ -2. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
C. [ -3. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
C. [ -4. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
A. [ -5. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
T. [ -6. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
C. [ -7. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
A. [ -8. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
G. [ -9. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
然后从第二列第二行开始遍历矩阵,分别从左边,上面,斜上角往该格子进行计算。match则加1,mismatch则减1,左边和上边过来的数都为gap减1,然后这个格子取三个方向