У меня есть две строки одинаковой длины, которые мне нужно сравнить.
Я хочу найти основу перекрытия (.) И внутренний зазор (*). Ниже приведен пример:
------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";
Пожалуйста, посоветуйте, как мне найти внутренний разрыв и эффективно перекрыться.