3.4 Dynamische Programmierung und der Needleman–Wunsch-Algorithmus
3.4 Dynamische Programmierung und der Needleman–Wunsch-Algorithmus
Abschnitt betitelt „3.4 Dynamische Programmierung und der Needleman–Wunsch-Algorithmus“Lernziele
Abschnitt betitelt „Lernziele“Nach der Bearbeitung dieses Abschnitts sollten Sie in der Lage sein:
- globales Sequenzalignment als Problem der dynamischen Programmierung zu formulieren
- die rekursive Bewertungsrelation für Alignments herzuleiten
- die Matrix der dynamischen Programmierung aufzubauen und zu interpretieren
- durch Traceback ein optimales Alignment zu rekonstruieren
- die algorithmische Komplexität des globalen Alignments zu verstehen
Von der Idee zum Algorithmus
Abschnitt betitelt „Von der Idee zum Algorithmus“Im vorherigen Abschnitt haben wir Sequenzalignment als Pfadsuchproblem in einem Gitter neu formuliert. Jeder Pfad entspricht einem Alignment, und das Ziel besteht darin, den Pfad mit dem höchsten Score vom Ursprung zum Endpunkt zu finden.
Die entscheidende Einsicht war, dass dieses Problem eine optimale Teilstruktur besitzt. Dadurch können wir den optimalen Alignment-Score schrittweise berechnen, indem wir bereits bekannte Lösungen für kleinere Präfixe wiederverwenden.
Die dynamische Programmierung liefert den Mechanismus, um diese Idee in einen konkreten Algorithmus zu überführen.
Definition der Matrix der dynamischen Programmierung
Abschnitt betitelt „Definition der Matrix der dynamischen Programmierung“Wir definieren eine Matrix der Größe , wobei:
den optimalen Alignment-Score zwischen den Präfixen
repräsentiert.
Damit gilt:
- entspricht dem Alignment zweier leerer Sequenzen
- enthält den Score des optimalen globalen Alignments
Initialisierung
Abschnitt betitelt „Initialisierung“Bevor wir die Matrix füllen können, müssen wir Randbedingungen festlegen.
Das Alignment einer Sequenz mit einer leeren Sequenz erfordert das Einfügen von Lücken:
wobei die Gap-Strafe ist, typischerweise ein negativer Wert.
Das spiegelt die Idee wider, dass das Alignment von Symbolen mit nichts genau Deletionen oder Insertionen erfordert.
Rekursive Formulierung
Abschnitt betitelt „Rekursive Formulierung“Nun betrachten wir, wie berechnet werden kann.
Wie bereits diskutiert, kann das Alignment an Position aus genau drei Möglichkeiten hervorgehen:
-
Match oder Mismatch (diagonaler Schritt):
-
Insertion (Lücke in , vertikaler Schritt):
-
Deletion (Lücke in , horizontaler Schritt):
Daraus ergibt sich die Rekursionsgleichung:
Diese Gleichung formalisiert den intuitiven Alignment-Prozess, indem sie alle möglichen Erweiterungen eines optimalen Alignments berücksichtigt.
Interpretation der Rekursion
Abschnitt betitelt „Interpretation der Rekursion“Jeder Term der Rekursion hat eine klare Bedeutung:
- Der diagonale Term setzt voraus, dass mit aligniert wird
- Der vertikale Term setzt voraus, dass mit einer Lücke aligniert wird
- Der horizontale Term setzt voraus, dass mit einer Lücke aligniert wird
Der Algorithmus wählt jeweils die Möglichkeit mit dem höchsten Score und garantiert dadurch Optimalität in jedem Schritt.
Das ist der Kern dynamischer Programmierung: lokale optimale Entscheidungen auf der Grundlage global konsistenter Teilprobleme.
Ein durchgerechnetes Beispiel
Abschnitt betitelt „Ein durchgerechnetes Beispiel“Betrachten wir ein einfaches Beispiel, um das Verfahren zu veranschaulichen.
Wir alignieren:
unter Verwendung des folgenden Bewertungsschemas:
- Match:
- Mismatch:
- Gap:
Schritt 1: Initialisierung der Matrix
Abschnitt betitelt „Schritt 1: Initialisierung der Matrix“Wir konstruieren ein Gitter, dessen Zeilen und dessen Spalten entsprechen. Die erste Zeile und die erste Spalte werden mit der Gap-Strafe initialisiert:
- G A C T A C - 0 -1 -2 -3 -4 -5 -6 A -1 C -2 G -3 C -4Schritt 2: Füllen der Matrix
Abschnitt betitelt „Schritt 2: Füllen der Matrix“Nun berechnen wir jede Zelle mithilfe der Rekursionsgleichung. Zum Beispiel:
-
An Position (Alignment von A mit G):
- diagonal: (Mismatch)
- oben:
- links:
→
Fahren wir auf diese Weise fort, so wird die gesamte Matrix ausgefüllt. Jeder Eintrag repräsentiert den besten Score, der für die entsprechenden Präfixe erreichbar ist.
Schritt 3: Traceback
Abschnitt betitelt „Schritt 3: Traceback“Sobald die Matrix vollständig ist, befindet sich der optimale Score in .
Der Score allein genügt jedoch nicht. Wir möchten das tatsächliche Alignment rekonstruieren.
Dazu führen wir einen Traceback durch:
- Wir beginnen bei
- In jedem Schritt gehen wir in die Richtung zurück, die zum optimalen Score geführt hat
- Wir setzen diesen Prozess fort, bis erreicht ist
So rekonstruieren wir die Folge von Operationen, die das optimale Alignment erzeugt hat.
Resultierende Alignments
Abschnitt betitelt „Resultierende Alignments“Für dieses Beispiel können mehrere optimale Alignments existieren, etwa:
-ACG-CGACTACoder
-AC-GCGACTACDas illustriert einen wichtigen Punkt:
Optimale Alignments müssen nicht eindeutig sein.
Algorithmische Struktur
Abschnitt betitelt „Algorithmische Struktur“Der Needleman–Wunsch-Algorithmus verläuft in drei Phasen:
- Initialisierung
- Füllen der Matrix (Vorwärtsphase)
- Traceback (Rückwärtsphase)
Diese Struktur trennt klar zwischen der Berechnung optimaler Scores und der Rekonstruktion der zugehörigen Lösung.
Komplexitätsanalyse
Abschnitt betitelt „Komplexitätsanalyse“Seien und die Längen der beiden Sequenzen.
-
Zeitkomplexität:
da jede der Zellen genau einmal berechnet wird
-
Speicherkomplexität:
da für den Traceback die vollständige Matrix gespeichert werden muss
Dies ist eine dramatische Verbesserung gegenüber der exponentiellen Komplexität von Brute-Force-Ansätzen.
Obwohl der Needleman–Wunsch-Algorithmus zeitlich effizient ist, erfordert er das Speichern der gesamten Matrix der dynamischen Programmierung. Für lange biologische Sequenzen, etwa NRPS-Enzyme, wird das in der Praxis zu einer wichtigen Einschränkung. Später in diesem Kapitel werden wir dieses Problem erneut aufgreifen und einen speichereffizienteren Algorithmus auf der Grundlage von Divide-and-Conquer entwickeln.
Konzeptionelle Interpretation
Abschnitt betitelt „Konzeptionelle Interpretation“Der Needleman–Wunsch-Algorithmus liefert die erste vollständige Lösung des Sequenzalignment-Problems.
Konzeptionell leistet er drei Dinge:
- Er definiert Alignment als Optimierungsproblem
- Er liefert ein prinzipielles Verfahren zur Berechnung optimaler Lösungen
- Er macht die im Bewertungsschema kodierten Annahmen explizit
Aus Sicht der Modellierung beantwortet der Algorithmus die Frage:
Was ist unter einem gegebenen Bewertungsmodell die beste Erklärung dafür, wie eine Sequenz in eine andere überführt werden kann?
Konzeptionelle Zusammenfassung
Abschnitt betitelt „Konzeptionelle Zusammenfassung“Globales Sequenzalignment lässt sich effizient mit dynamischer Programmierung lösen. Durch die Definition einer rekursiven Score-Funktion und die systematische Auswertung aller Präfix-Alignments berechnet der Needleman–Wunsch-Algorithmus das optimale Alignment in polynomialer Zeit.
Der Algorithmus verwandelt ein unbeherrschbares Suchproblem in eine strukturierte Berechnung über einer Matrix und macht Sequenzalignment selbst für mäßig lange Sequenzen praktisch anwendbar.
Fragen zur Selbstkontrolle
Abschnitt betitelt „Fragen zur Selbstkontrolle“- Was repräsentiert der Eintrag in der Matrix der dynamischen Programmierung?
- Warum gibt es in der Rekursionsgleichung genau drei Fälle?
- Wozu dient der Initialisierungsschritt?
- Warum ist nach dem Füllen der Matrix ein Traceback erforderlich?
- Warum läuft der Algorithmus in Zeit?