私はこの2つの同じ長さの弦を持っていますが、これを比較する必要があります。オーバーラップベース(。)と内部ギャップ(*)を見つけたい。以下に例を示します。
------ACTAAAAATACAAAAA--TTAGCCAGGCGTGGTGGCAC
-----TACTAAAAATACAAAAAAATTAGCCAGGTGTGGTGG---
................**.................
オーバーラップの数=33。内部ギャップの数=2。
オーバーラップの数を見つけるのに問題はありません。しかし、私は内部ギャップを見つけるのに問題があります。以下は私が持っている現在のコードです。ひどく遅いです。原則として、私はそのようなペアを何百万も計算する必要があります。
#!/usr/bin/perl -w
my $s1 = "------ACTAAAAATACAAAAA--TTAGCCAGGCGTGGTGGCAC";
my $s2 = "-----TACTAAAAATACAAAAAAATTAGCCAGGTGTGGTGG---";
print "$s1\n";
print "$s2\n";
my %base = ("A" => 1, "T" => 1, "C" => 1, "G" => 1);
my $ovlp_basecount = 0;
my $internal_gap = 0;
foreach my $si ( 0 .. length($s1) ) {
my $base1 = substr($s1,$si,1);
my $base2 = substr($s2,$si,1);
# Overlap
if ( $base{$base1} && $base{$base2} ) {
$ovlp_basecount++;
}
# Not sure how to compute internal gap
}
print "TOTAL OVERLAP BASE = $ovlp_basecount\n";
print "TOTAL Internal Gap \?\n";
内部ギャップを見つけて効率的にオーバーラップするにはどうすればよいかアドバイスしてください。