实验七 动态规划算法比对序列_序列比对动态规划算法

其他范文 时间:2020-02-28 03:36:52 收藏本文下载本文
【www.daodoc.com - 其他范文】

实验七 动态规划算法比对序列由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“序列比对动态规划算法”。

这个程序,如果你和同学的得分一样,但是比对结果不同。不用担心。打分规则里面,如果两种或者三种情况得分一样,就会有多条途径可走,所以,造成的比对结果不一样。我是这样认为的而上一个实验,就不会出现这种情况。因为打分规则的原因。此次实验打分规则里面的分太多了导致的。。具体懒得讲,自己去想。。。#!/usr/bin/perl-w $seq1=“YKRDKPHVNIGTIGHVDHGKTTLTAAITSVLAKERGITISTAHVEYQTDKRHYAHIDCPGHADYIKNDGPMPQTREHILLARQVNVPALVVFLNKVDILLELVEMELRELLTEYGFPGDDIPIIKGSALNIMELMD”;$seq2=“IGHVDHGKTTLTAAITSVLAKERGITISTAHVIKNMITGAAQMDGAILVVAGTDGPMPQTREHILLARQVNVPALVVFLNKVDIALLELVEMELRELLTEYGFPGDDIPIIKGSALNALNEKAIMELMDAVDDYIP”;@seq1=split(//,$seq1);@seq2=split(//,$seq2);

#定义罚分规则 #$match=1;#$dismatch=0;$gap=-4;

%HoH=();

#初始化“双维关联数组”

$blosumFile='C:UsersAdministratorDesktopBLOSUM62.txt';&BLOSUM;

#从blosum文件,赋值“双维关联数组”%HoH

#打分矩阵第一列和第一行赋值 #$score[0][0]={0};$len1=(@seq1);$len2=(@seq2);

#横着赋值 for $i(0..$len1){ $score[0][$i]=$gap*$i;} #竖着赋值

for $j(0..$len2){

$score[$j][0]=$gap*$j;} #填充得分矩阵的其他位置 for $i(1..$len1){

$letter2=$seq2[$i-1];

for $j(1..$len2)

{

$letter1=$seq1[$j-1];

if($letter1 eq $letter2)#路线斜着走(要么匹配,要么容忍)

{

$diagonal=$score[$i-1][$j-1]+&getScore($seq1[$i-1],$seq2[$j-1]);

}

else

{

$diagonal=$score[$i-1][$j-1]+&getScore($seq1[$i-1],$seq2[$j-1]);

}

$up=$score[$i-1][$j]+$gap;#路线竖着走

$left=$score[$i][$j-1]+$gap;#路线横着走

#比较四种情况的最优得分

if($diagonal>=$up)

{

if($diagonal>=$left)

{

$score[$i][$j]=$diagonal;

$trace[$i][$j]=1;

}

else

{

$score[$i][$j]=$left;

$trace[$i][$j]=2;

}

}

else

{

if($up>=$left)

{

$score[$i][$j]=$up;

$trace[$i][$j]=3;

}

}

} }

else { $score[$i][$j]=$left;$trace[$i][$j]=2;} print “最高得分为$score[$i-1][$j-1]n”;

#在得分矩阵中,找到最优路径的标记,从而找到最优路径 $j = @seq1;$i = @seq2;$k = 0;#@align1;#@align2;

while(1){

if($i >0 && $j >0)

{

if($trace[$i][$j] ==1){

$align1[$k] = $seq1[$j-1];

$align2[$k] = $seq2[$i-1];

$k++;

$j--;

$i--;

next;

}

elsif($trace[$i][$j] == 2){

$align1[$k] = $seq1[$j-1];

$align2[$k] = “-”;

$k++;

$j--;

next;

}

elsif($trace[$i][$j] == 3){

$align1[$k] = “-”;

$align2[$k] = $seq2[$i-1];

$k++;

$i--;

next;

}

}

elsif($i==0&&$j!=0)

{

$align2[$k] =$seq1[$j-1];

$align1[$k] = “-”;

$k++;

$j--;

}

elsif($j==0&&$i!=0)

{

$align1[$k] =$seq2[$i-1];

$align2[$k] = “-”;

$k++;

$i--;

}

elsif($j==0&&$i==0){last;} } @align1 = reverse(@align1);@align2 = reverse(@align2);print“比对结果为:n”;print“序列1:@align1n”;print“序列2:@align2n”;

sub BLOSUM{

open(BLOSUM, $blosumFile)

or die “Can't open data.txt: $!”;

while(){

next if /^#/;

#忽略所有以 # 开始的行

#然后以空格为标准,劈开每一行,放入双维关联数组

($AA, $A, $R, $N, $D, $C, $Q, $E, $G, $H, $I, $L, $K, $M, $F, $P, $S, $T, $W, $Y, $V, $B, $Z, $X, $m)= split(' ');

$HoH{ $AA }{ 'A' } = $A;

$HoH{ $AA }{ 'R' } = $R;

$HoH{ $AA }{ 'N' } = $N;

$HoH{ $AA }{ 'D' } = $D;

$HoH{ $AA }{ 'C' } = $C;

$HoH{ $AA }{ 'Q' } = $Q;

$HoH{ $AA }{ 'E' } = $E;

$HoH{ $AA }{ 'G' } = $G;

$HoH{ $AA }{ 'H' } = $H;

$HoH{ $AA }{ 'I' } = $I;

$HoH{ $AA }{ 'L' } = $L;

$HoH{ $AA }{ 'K' } = $K;

$HoH{ $AA }{ 'M' } = $M;

$HoH{ $AA }{ 'F' } = $F;

$HoH{ $AA }{ 'P' } = $P;

$HoH{ $AA }{ 'S' } = $S;

$HoH{ $AA }{ 'T' } = $T;

$HoH{ $AA }{ 'W' } = $W;

$HoH{ $AA }{ 'Y' } = $Y;

$HoH{ $AA }{ 'V' } = $V;

$HoH{ $AA }{ 'B' } = $B;

$HoH{ $AA }{ 'Z' } = $Z;

$HoH{ $AA }{ 'X' } = $X;

$m=-4;

}

close(BLOSUM);}

sub getScore{

#检查是否存在相应的key值,并返回得分

if(exists($HoH{$_[0]}{$_[1]})){ # if the named key exists, irrespective of its value

return $HoH{$_[0]}{$_[1]};

} }

下载实验七 动态规划算法比对序列word格式文档
下载实验七 动态规划算法比对序列.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

    热门文章
      整站推荐
        点击下载本文