生物序列局部比对之Blast算法

生物序列局部比对之Blast算法

算法基本原理:

Blast算法是1990年由Altschul等人提出的两序列局部比对算法,采用了一种短片段匹配算法和一种有效的统计模型来找出目的序列和数据库之间的最佳局部比对效果。Blast算法是一种基于局部序列比对的序列比对算法。广泛被使用在蛋白质DNA序列的分析问题中,在其他序列相似性比对中也有应用。传统的基于动态规划的局部性比对性算法采用的是精确的序列比对,虽然有着较好的比较结果,但是对于长度为nm的两个待比较序列,局部性比对算法的时间复杂度有O(mn),这个时间复杂度对于序列匹配来说代价太大。Blast是一种在局部性比对基本上一种近似比对的算法。它在保持较高精度的情况下可以大大减少程序运行的时间,是大规模序列对比问题一个速度和精确性都可以接受的一个解决方法。它的基本思想是:通过产生数量更少的但质量更好的增强点来提高匹配的精确度。首先采用哈希法对查询序列以碱基的位置为索引建立哈希表,然后将查询序列和数据库中所有序列联配,找出精确匹配的种子,以种子为中心,使用动态规划法向两边扩展成更长的联配,最后在一定精度范围内选取符合条件的联配按序输出。得分最高的联配序列就是最有比对序列。

其算法过程可简单描述为:

1) 从两个序列中找出一些长度相等且可以形成无空位完全匹配的子序列,即序列片段对;

2) 找出两个序列之间所有匹配程度超过一定值的序列片段对;

3) 将得到的序列片段对根据给定的相似性阂值延伸,得到一定长度的相似性片段,称为高分值片段对。


 

   算法流程详解

1. 构建待查询的K-字母表,对于DNA序列,选择长度为11个字母的字母表。对于待查询队列,从前向后依次扫描,对每个位置开始的连续11个字母作为一个key存入哈希,将位置作为value存入hash。对于数据库序列做和上面同样的工作。

2. 根据打分矩阵为所有的字母对打分。打分矩阵我选择的是一个在DNA序列比对中u比较常用的一个打分绝阵,相同匹配加2AGCT5,其他不匹配减7,空位减5。给出一个阈值T,留下高于T的单词匹配对,作为后面extendseed

 

 

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. 为每对单词执行上面步骤,找出所有打分高于T单词对。找到所有的seed

4.(优化步骤)在实际运行中,算法最大的消耗在步骤extend上面,减少extend的方法就是减少seed的数目。对于选出的seed,可以将距离相近的合并为一个seed,这样就可以减少大量extend的计算量。

5. 下一步是extend的步骤,对于每一对选择出来的种子,将其向两边延伸,使其在尽可能长的距离得到尽可能多的分数。具体方法是逐渐向两边扩展,规定常数D,在扩展到分数为HighestScore-D时停止,如果最终得分大于得分阈值S,则将其设为高分区域HSP

6. 将相邻的或距离较近的HSP合并。

      7. 对于每部分HSP使用Smith-Watermans算法进行局部性比对,为每部分打分,作为最终结果。

你可能感兴趣的:(生物序列局部比对之Blast算法)