Schnellster Weg, um Mismatch-Positionen zwischen zwei Strings gleicher Länge zu finden

Ich habe Millionen von Saitenpaaren mit der gleichen Länge, die ich vergleichen möchte, und finde die Position, an der sie nicht übereinstimmen.

Zum Beispiel für jeden$str1 und$str2 Wir wollen eine Fehlpaarungsposition mit finden$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

Gibt es einen schnellen Weg, dies zu tun? Momentan habe ich die C-Style-Methode, mit der ich jede Position in beiden Strings mit der 'substr'-Funktion schleife. Aber dieser Ansatz ist schrecklich langsam.

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;
  }

}

Antworten auf die Frage(9)

Ihre Antwort auf die Frage