庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>安全技术>软件破解>算法研究>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

算法分析报告(1.2) 上

 作者:本站收集   日期:2005-5-28
字号选择〖 〗/ 双击滚屏 单击停止   
    随着人类基因组计划的实施,通过基因组测序、蛋白质序列测定和结构解析等实验,获得了大量的原始数据,需要利用现代计算技术对这些数据进行收集、存储、处理和使用,因此产生了生物信息学。生物信息学是生物学、数学、计算机、物理等多门学科的交叉学科,目前主要的研究对象是生物大分子,采用计算机作为主要的研究工具来加工这些生物大分子的数据。随着互联网络的发展,给生物学家们提供了更好的交流机会,一些部门提供了数据共享、查询、分析等相关服务,其中比较著名的几个数据库有下面几个:

  1.       GenBank:美国国立卫生研究院(NIH)下属的国立生物技术信息中心(NCBI)维护的基因序列数据库,它和欧洲生物信息研究所(EBI)维护的欧洲分子生物学实验室核酸数据EMBL及日本国立遗传学研究院(NIG)的DNA数据库(DDBJ数据库同为国际核酸数据库的合作成员。GenBank汇集并注释了所有公开的核酸和蛋白质的序列,其中的每个记录都代表了一个单独的,连续的、带有注释的DNARNA片断。GenBank每日和EMBLDDBJ交换数据,每两个月发布一个新版本,最新的2000.6.15日的124.0版本纯文本文件为46.4G51.7G(含索引)。同时NCBI开发出不少分析基因组和应用在GenBank上的软件,其中较为知名的有BankitSequin(用来提交和更新GenBankEMBLDDBJVecScreen(用来表示出可能为提交的序列中可能为Vector的片断)、Entrez(从若干个相联的数据库中检索信息)、dbESTatabase of Genome Survey Sequences),还有最重要的序列相似性检索的工具BLASTBasic Local Alignment Searching Tools)。参考网址是http://www.ncbi.nlm.nih.gov

          SwissProtSWISS-PROT是一个蛋白质序列数据库,2001.2.14的发布版中包含了86593 http://www.ebi.ac.uk      PDB版本中包含了个结构。http://www.rcsb.org <![endif]-->

    其中蓝线为美国的联机医学文献分析和检索系统(Medline)的记录数增长曲线,一定程度上表明了计算方法的增长,绿线为DNA尽管计算方法发展比较缓慢,而且处理的结果也有时不尽如人意,往往需要人工做后期的处理和修正,但是还是在很大程度上缓解和减少了人工的工作量,并使得可以工作可以在更大的数据集上。

    现在比较著名的软件有GCGFASTAPHRAP1)GCG。它包含了序列分析各个方面,吸收了多种数学模型和算法,实现了序列比较和多序列比较、数据库的搜索和信息提取、DNA/RNA二级结构预测、编辑和发布、进化分析、片断组装、寻找基因、输入输出、绘制拼接图、引物选择、蛋白分析、多肽序列和核酸序列之间的转换等多种功能,而这些功能有的则是实现了多种算法供使用者选择。该程序包目前实现于UNIX上,而且集成环境种提供了图形界面SeqLab来使用该程序包,同时还有Web界面和Windows下的界面。

  2. :准确地说,BLASTNeedleman-Wunsch 及Smith-Waterman算法的近似,降低了算法的运行时间。其中支持的主要功能有:blastp(比较氨基酸序列和蛋白质数据库)、blastn(比较核酸序列和核酸数据库)、blastx(比较核酸双链序列的理论上的六框架的所有转换结果和蛋白质数据库)、tblastn(比较蛋白质序列和核酸序列数据库―动态转换为六框架结果),基本上是核酸和氨基酸序列的任意组合的查询都可以进行。BLAST在网络上也可以直接使用,在NCBI的主页上就可以找到在线进行BLAST的链接。同时由于使用了GenBank中的数据,使得查询的结果比较完全。早期版本的BLAST并不支持Gap,而最新版BLAST(2.0)在比对中也能够支持Gap。

  3. (Fast Alignment):FastA类似,也是一种序列比较的启发式算法,也是N和S算法的近似。FastA慢,FastA年,而BLAST年,这样的结果是可以接受的,但是FastA4):也是一个程序包,是Phil Green、Crossmatch 、Consed等,其中Swat-W算法变种和优化的实现、Crossmatch则是完成屏蔽Vector完成序列片断的装配、Consed的组装、Phred、calls basesassigns quality values to the bases到输出文件(Consed程序我还没有得到和来及看)。目前这些程序都在Windows、Mac和Unix上都有实现。Trial Verion的程序可以从http://www.phrap.com等人索取,Phil Green是mailto:phg@u.washington.edu的介绍可以从http://www.phrap.comhttp://www.genome.washington.edu/UWGC/methods.htm我目前所分析的程序源代码就是从Phil Green处得到的Swat/Crossmatch/Phrap程序。程序代码中包含的主要程序为Swat和Phrap等。其中swat算法及几种优化和变体形式。Crossmatch主要利用Swat”来实现序列的比较,并可以用来屏蔽序列中Vector实现了多个子序列的装配(Assembling程序中的序列比对部分。

    利用双序列的比对(pairwise alignment)可显示出序列间的类似性,也是多序列比对算法的基础。对已知的两个序列,要进行序列比对,要发现这两个序列之间的距离(Edit Distances),就是要计算序列之间有多少匹配(Match和Gap的得分和Mismatch、PAM250等。Gap的罚分是另外定义的函数:W),其中k的长度,而W(k的罚分值,通常使用的有W)= k * d(k)= init + (k - 1,其中d表示每个核苷Gap表示开始一个Gap为继续一个Gap。

    例:

           Mismatch       ACTCT

                  ACGCT       Gap:

           ACCT和序列ACTCT              AC -CT

           ACTCT就出现了Gap,而第二个序列相对于第一个序列出现了Insertion       算法是基于动态规划的算法,是一种最优局部比对的方法,而最初的基于动态规划的最优全局比对的方法是Needleman-Wunsch       Needleman算法:

           -W算法在时间和空间上都耗费了很多资源,对于长度分别为n(n2

                  ,Mismatch的罚分均为0F(i,j) =max{ F(i-1,j-1) +s(xi,yj), max{F(i-k, j-1)–W(k)+s(xi,yj)}, max{F(i-1, j-l) –W(l) +s(xi,yj)}}

     

           表示对应于两个序列中的i位置的最后得分。S(xi, yj)表示i位置的核苷xi匹配(Match)上的得分。而W(k)时的gap的罚分。


           计算所需要的时间为2*(i-1)+2*(j-1)+1+j-1,0..m-1比较次数为i+j-2       for (i = 1; i < n; i++)

                  for (j = 1; j < n; j++)

    F(i,j) =max{ F(i-1,j-1) +s(xi,yj),

    max{H(i-k, j-1)–W(k)+s(xi,yj)},

    max{F(i-1, j-l) –W(l) +s(xi,yj)}}

           总共需要的加法次数为(4n-5)*(n-1) 2/2,则应为O(n3),而比较次数为(n-1)3,则也为O(n3)。

           F(i,j) =max{ F(i-1,j-1) +s(xi,yj), F(i-1, j-1)–d, F(i-1, j-1) –d}

    <![endif]-->

    其中d为出现gap时的罚分,这种情况下则计算量会缩小为O(n2),而实际上应用的总是这种变体。

    <![endif]-->

    而序列最终的比对结果可以按照分值和中间的记录反方向查找得到。

            

    -Waterman在进行序列比对时,关心的不一定是序列的全部内容,而只要是序列的一部分相同就可以了,还有就是Crossmatch中去除的Vector

    F(i,j) =max{ F(i-1,j-1) +s(xi,yj), max{F(i-k, j)–W(k)}, max{F(i, j-l) –W(l)},0}

     

    在简单形式下s(ai, bj) = match = 1; Wk = 1 + 1/3 * k; Wl = 1 + 1/3 * l,而更一般使用的是采用替换矩阵的分值。类似前面N-W算法,为了减少时间复杂度,也可以采用类似的简化形式:

    F(i,j) =max{ F(i-1,j-1)+s(xi,yj), F(i-1, j)-d, F(i, j-1)–d,0}

          

    程序中使用的算法时比简化形式上将单一的罚分值d的形式,同时在程序中使用了一些技巧来简化空间复杂度,但是时间的量级并没有减少,只是在时间的常倍数上进行了改变:

    设i)序列,j是查询序列:

    s_ij位和查询的j对j的最高得分

      t_ij:目标的i位对齐、且i对GAP  u_ij:目标的i位对齐、且j对GAP则 s_ij = max( max (s_{i-1,j-1},t_{i-1,j-1},u_{i-1,j-1}) + score(x_i,y_j), 0)

    (对角线)   t_ij = max(s_{i-1,j} + gap_init, t_{i-1,j} + gap_ext, u_{i-1,j} + gap_init)

              -

       u_ij = max(s_{i,j-1} + gap_init, t_{i,j-1} + gap_init, u_{i,j-1} + gap_ext)

              -

        (i) s_ij中存放max (s,t,u) + gap_init。这样t_ij=max(maxstu_{i-1,j}, t_{i-1,j} + gap_ext)。

    (ii) 存储一行maxstu_ij。而u只需存放一个值。

     

    Banded-Waterman算法:

    当使用序列比较时,大部分情况是将序列和数据库中的序列进行逐个比对,而数据库中的序列很多都是和当前序列无关的,为了减少计算量,减少和不必要的序列进行全序列的比对(局部和全局),因而设计了Banded-W算法。如图所示,计算是处在条带之间的填充颜色的区域:

    如果在区域内完全没有达到一个预期的比对域值,则序列之间基本上是没有可能得到很好的比对分值的,可以说这种方法是一种启发式算法,可以参考后面的多序列比对的启发式算法部分。空间复杂度应该为O+n),其中k的宽度,而n为序列的长度,通常数据库序列要比Suject(k*n),而k来说是个常数,因此空间和时间复杂度均为O)。

     

    的工作意图和NCBI的功能类似,都是用来寻找序列中可能是Vecotor的流程是:读入参数 -> 寻找Word、设置索引表index_words,word_block等 -> 匹配subject sequence和query sequence的Word进行 -> 。

    一个Word中的连续若干个核苷的核酸子列,这里有两个参数:min_match_size,前者表示比较的Word的真实长度;而后者表示存储散列表中索引的Word。Index_word_size计算散列分值时使用的Word,而min_match_size的长度,缺省值为14长度的字符串按alphabet_size序列为4)对前index_word_size。然后find_subject_matches()()对目标序列中的每个字(长度>=minmatch散列表中查找匹配的字并记录有关信息,然后再使用find_scores函数用来计算Banded函数,目的是为了找出序列中全部的Vector增加-minmatch的命令参数可以大幅度的减少做比对的时间。-bandwidth参数表示了使用Banded-W算法的真实的Band(band = 2 * bandwidth + 1是减少了运行时间,但是丢失了一定的敏感度(sensitivity和FastA之类的启发式算法中,也是要在Sensitivity和运行时间上做折衷。

    在N、S-W中,进行比对时采用的替换矩阵的分值都是整数。基本上大规模的运算中并没有包含浮点运算。由于序列的一般都至少有几百个bp-W-W算法和各种简化版中都会用到一行中前面的元素。一种简单的并行化方法是每个计算单元计算一对序列的比较,因为一般情况下是将序列和数据库中的所有或一些序列进行比较。第二种计算方式是先求解一行中只依赖于前面一行的数据,即依赖于F(i-1,j-1)和F(i-1,j)的结果,这时可以使用一些矢量计算等,然后依赖于同一行的前面数据的则采用顺序计算。当然这时也可以采用一些展开的方法进行计算。例如已经计算出i,则F(i,j) = max(G(i,j), F(i, j-1)-d, 0) = max( G(i, j), max( G(i, j-1), F(i,  j-2)-d )-d, 0 ), 0 ) = max(G(i, j), G(i, j-1) – d, F(i, j-2) – 2*d, 0),则F(i, j-1)则可以同时开始计算。但是存在着问题是计算两个的计算量是不同的,而且计算公式会变得复杂,特别是同时计算的数据量提高更多。

    还有一种简单并行方式可以使用对角线的共同并行计算的方式,参考下图

    <![endif]-->

           或者共享存储的机器。

          

    :专门用来组装Shotgun序列数据的程序。它允许使用数据的质量(data quality的情况下。Contig)来产生数据

           1)读入序列数据和质量数据

    2)寻找具有Word。,利用S-W-W分值,并消除完全相同的复制数据

    3)寻找并屏蔽掉Vector4)寻找接近复制的数据

    5)寻找Node-Reject。

    循环6):

    6)标示出Read)

    7)基于数据质量和Match(Log Likelihood Ration)分值

    8)一个Read往往有多个分值较高的比对,寻找出给定区域内(许多区域内LLR9)标示出可能是Chimeric的Read。Chimeric Read的意思是指Deletion ReadRead>10Read1Segment1Segment2Read2Read1中Segment1Segment2x(<=20Read2y>x+1010)使用贪心算法来构造Contig之间的顺序。

上一篇:算法分析报告(1.2) 下    下一篇:贪吃蛇的算法分析(1)  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 本站收集
信息来源: 网络 录入时间: 2005-5-28
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿