Information

3.6: Vorverarbeitung für den String-Matching in linearer Zeit - Biologie

3.6: Vorverarbeitung für den String-Matching in linearer Zeit - Biologie


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

Die Hashing-Technik im Kern des BLAST-Algorithmus ist eine leistungsstarke Möglichkeit, Zeichenfolgen für ein schnelles Nachschlagen zu verwenden. Sobald die Abfragesequenz erhalten ist, kann sie auf ähnliche Weise verarbeitet und ihre Teile in linearer Zeit gegen die indizierte Datenbank durchsucht werden.

In diesem Abschnitt beschreiben wir kurz vier zusätzliche Möglichkeiten zur Vorverarbeitung einer Datenbank für die schnelle Suche nach Zeichenfolgen, von denen jede sowohl praktische als auch theoretische Bedeutung hat.

Suffix Bäume

Suffixbäume stellen eine leistungsfähige Baumdarstellung von Teilstrings einer Zielsequenz T bereit, indem alle Suffixe von T in einem Radixbaum erfasst werden.

Darstellung einer Sequenz in einem Suffixbaum

Durchsuchen einer neuen Sequenz anhand eines Suffixbaums

Linearzeitkonstruktion von Suffixbäumen

Suffix-Arrays

Für viele genomische Anwendungen sind Suffixbäume zu teuer, um sie im Speicher zu speichern, und es waren effizientere Darstellungen erforderlich. Suffix-Arrays wurden speziell entwickelt, um den Speicherverbrauch von Suffix-Bäumen zu reduzieren und die gleichen Ziele mit einem deutlich reduzierten Platzbedarf zu erreichen.

Bei Verwendung von Suffix-Arrays kann jede Teilzeichenfolge durch eine binäre Suche in der geordneten Liste der Suffixe gefunden werden. Indem wir auf diese Weise das Präfix jedes Suffix untersuchen, durchsuchen wir am Ende alle Teilzeichenfolgen.

Die Burrows-Wheeler-Transformation

Eine noch effizientere Darstellung als Suffixbäume bietet die Burrows-Wheeler-Transformation (BWT), die es ermöglicht, den gesamten Hash-String in der gleichen Anzahl von Zeichen wie der Original-String zu speichern (und noch kompakter, da er häufig Homopolymer-Läufe von . enthält) Zeichen, die sich leichter komprimieren lassen). Dies hat dazu beigetragen, Programme zu entwickeln, die noch effizienter ausgeführt werden können.

Wir betrachten zunächst die BWT-Matrix, die eine Erweiterung eines Suffix-Arrays ist, da sie nicht nur alle Suffixe in sortierter (lexikographischer) Reihenfolge enthält, sondern an jedes Suffix beginnend bei Position i das Präfix anhängt, das bei Position i − 1 endet. jede Zeile enthält somit eine vollständige Drehung der ursprünglichen Zeichenfolge. Dies ermöglicht alle Suffix-Array- und Suffix-Baum-Operationen, um die Position von Suffixen zeitlich linear in der Abfragezeichenfolge zu finden.

Der Hauptunterschied zu Suffix-Arrays ist der Speicherplatzverbrauch, bei dem anstatt alle Suffixe im Speicher zu speichern, was selbst für Suffix-Arrays sehr teuer ist, nur die letzte Spalte der BWT-Matrix gespeichert wird, auf deren Grundlage die ursprüngliche Matrix wiederhergestellt werden kann.

Ein Hilfsarray kann verwendet werden, um die Dinge noch weiter zu beschleunigen und zu vermeiden, dass Operationen zum Auffinden des ersten Vorkommens jedes Zeichens im modifizierten Suffix-Array wiederholt werden müssen.

Sobald die Positionen von 100.000en von Teilzeichenfolgen in der geänderten Zeichenfolge (der letzten Spalte der BTW-Matrix) gefunden wurden, können diese Koordinaten schließlich in die ursprünglichen Positionen umgewandelt werden, wodurch Laufzeit gespart wird, indem die Kosten der Transformation über die vielen vielen Lesevorgänge hinweg amortisiert werden .

Das BWT hat einen sehr starken Einfluss auf Short-String-Matching-Algorithmen, und fast alle am schnellsten gelesenen Mapper basieren derzeit auf der Burrows-Wheeler-Transformation.

Grundlegende Vorverarbeitung

Dies ist eine Verarbeitungsvariante, die von theoretischem Interesse ist, aber in der Bioinformatik relativ wenig praktische Anwendung gefunden hat. Es basiert auf dem Z-Vektor, der an jeder Position i die Länge des längsten Präfixes einer Zeichenkette enthält, die auch mit der Teilzeichenkette beginnend bei i übereinstimmt. Dies ermöglicht die Berechnung der L- und R-(Links- und Rechts-)Vektoren, die das Ende der längsten doppelten Teilzeichenfolgen bezeichnen, die die aktuelle Position i enthalten.

Geschulter String-Matching

Der Z-Algorithmus ermöglicht eine einfache Berechnung sowohl des Boyer-Moore- als auch des Knuth-Morris-Pratt-Algorithmus für den String-Matching in linearer Zeit. Diese Algorithmen verwenden Informationen, die bei jedem Vergleich beim Abgleichen von Strings gesammelt werden, um den String-Match zu verbessern Auf). Der naive Algorithmus ist folgender: Er vergleicht seine Zeichenfolge der Länge m Zeichen für Zeichen mit der Sequenz. Nach dem Vergleich der gesamten Zeichenfolge wird bei Nichtübereinstimmungen zum nächsten Index verschoben und es erneut versucht. Dies ist in ( O(m ∗ n) ) Zeit abgeschlossen.
Eine Verbesserung dieses Algorithmus besteht darin, den aktuellen Vergleich abzubrechen, wenn eine Nichtübereinstimmung gefunden wird. Dies ist jedoch immer noch in ( O(m ∗ n) ) Zeit abgeschlossen, wenn der String, den wir vergleichen, mit der gesamten Sequenz übereinstimmt.

Die wichtigste Erkenntnis ergibt sich aus dem Lernen aus der internen Redundanz in der zu vergleichenden Zeichenfolge und deren Verwendung, um größere Verschiebungen in der Zielsequenz nach unten vorzunehmen. Bei einem Fehler können alle Basen des aktuellen Vergleichs verwendet werden, um den betrachteten Frame für den nächsten Vergleich weiter nach unten zu verschieben. Wie unten zu sehen ist, reduziert dies die Anzahl der erforderlichen Vergleiche erheblich und verringert die Laufzeit auf ( O(n) ).


Schau das Video: strings, operations and string matching algorithm. (Kann 2022).