生物序列局部比对之Blast算法
算法基本原理:Blast算法是1990年由Altschul等人提出的两序列局部比对算法,采用了一种短片段匹配算法和一种有效的统计模型来找出目的序列和数据库之间的最佳局部比对效果。Blast算法是一种基于局部序列比对的序列比对算法。广泛被使用在蛋白质DNA序列的分析问题中,在其他序列相似性比对中也有应用。传统的基于动态规划的局部性比对性算法采用的是精确的序列比对,虽然有着较好的比较结果,但是对于长度为n和m的两个待比较序列,局部性比对算法的时间复杂度有O(mn),这个时间复杂度对于序列匹配来说代价太大。Blast是一种在局部性比对基本上一种近似比对的算法。它在保持较高精度的情况下可以大大减少程序运行的时间,是大规模序列对比问题一个速度和精确性都可以接受的一个解决方法。它的基本思想是:通过产生数量更少的但质量更好的增强点来提高匹配的精确度。首先采用哈希法对查询序列以碱基的位置为索引建立哈希表,然后将查询序列和数据库中所有序列联配,找出精确匹配的“种子”,以“种子”为中心,使用动态规划法向两边扩展成更长的联配,最后在一定精度范围内选取符合条件的联配按序输出。得分最高的联配序列就是最有比对序列。
其算法过程可简单描述为:
1)
2)
3)
算法流程详解
1.
2.
| A | G | C | T |
A | 2 | -5 | -7 | -7 |
G | -5 | 2 | -7 | -7 |
C | -7 | -7 | 2 | -5 |
T | -7 | -7 | -5 | 2 |
字母对打分表
3.
4.(优化步骤)在实际运行中,算法最大的消耗在步骤extend上面,减少extend的方法就是减少seed的数目。对于选出的seed,可以将距离相近的合并为一个seed,这样就可以减少大量extend的计算量。
5.
6.