Maneira mais rápida de encontrar posições de incompatibilidade entre duas seqüências do mesmo comprimento
Eu tenho milhões de pares de string do mesmo tamanho que quero comparar e encontrar a posição em que ela tem incompatibilidade.
Por exemplo, para cada$str1
e$str2
queremos encontrar a posição de incompatibilidade com$str_source
:
$str_source = "ATTCCGGG";
$str1 = "ATTGCGGG"; # 1 mismatch with Str1 at position 3 (0-based)
$str2 = "ATACCGGC"; # 2 mismatches with source at position 2 and 7
Existe uma maneira rápida de fazer isso. Atualmente eu tenho o método de estilo C que eu faço loop em todas as posições em ambas as strings usando a função 'substr'. Mas essa abordagem é terrivelmente lenta.
my @mism_pos;
for $i (0 .. length($str_source)) {
$source_base = substr($str_source,$i,1);
$str_base = substr($str2,$i,$1);
if ($source_base ne $str_base) {
push @mism_pos,$i;
}
}