美文网首页
Blast 比对原理

Blast 比对原理

作者: 余绕 | 来源:发表于2020-04-18 14:43 被阅读0次
my $pattern='ADFG';
my $text='FADFGH';

my $TLEN=length $text;
my $PLEN=length $pattern;

my $D=[];
for (my $t=0;$t<=$TLEN;++$t){
$D->[$t][0]=0;
}

for (my $p=0;$p<=$PLEN;++$p){
$D->[0][$p]=$p;

}

for (my $t=1;$t<=$TLEN;++$t){
for (my $p=1;$p<=$PLEN;++$p){

$D->[$t][$p]=min3(
substr($text,$t-1,1)eq substr($pattern,$p-1,1)?$D->[$t-1][$p-1]:$D->[$t-1][$p-1]+1,
$D->[$t-1][$p]+1,
$D->[$t][$p-1]+1

)

}

}

for (my $p=0;$p<=$PLEN;++$p){
for (my $t=0;$t<=$TLEN;++$t){
print $D->[$t][$p]," ";
}
print "\n";
}

打印结果

image.png
my @matches=();
my $bestscore=1000000000000;
for(my $t=1;$t<=$PLEN;++$t){

if($D->[$t][$PLEN]<$bestscore){
$bestscore=$D->[$t][$PLEN];
@matches=($t);

}
elsif($D->[$t][$PLEN]==$bestscore){
push @matches,$t;

}
}
print "\nThe best match for the pattern  $pattern\n";

print "has an edit distance of $bestscore\n";

print "and appears in the text editing location";

print "s" if(@matches >1);

print " @matches\n";

子函数

sub min3{

my($i,$j,$k)=@_;
my($temp);

$temp=($i<$j ? $i:$j);
$temp<$k ? $temp:$k;

}

打印结果

image.png

相关文章

网友评论

      本文标题:Blast 比对原理

      本文链接:https://www.haomeiwen.com/subject/odxbvhtx.html