Needleman-Wunsch-Algorithmus
Der Needleman-Wunsch Algorithmus ist eine Methode, globale Alignments von zwei Sequenzen a und b zu berechnen. Der Algorithmus bedient sich dazu der dynamischen Programmierung. Gaps werden zugelassen. (Siehe Sequenzalignment)
Das Verfahren
Für den Needleman-Wunsch-Algorithmus benötigt man eine Matrix der Größe , wobei n die Sequenzlänge von Sequenz a und m die Sequenzlänge von b ist. Die Matrix ist genau um eine Spalte und Zeile größer als die Sequenzen. Damit werden Gaps am Anfang der Sequenz ermöglicht.
Jeder Matrixeintrag wird so interpretiert, dass er die beste Bewertung eines Teilalignments von und darstellt. Für und erhält man also die Bewertung des Alignments der gesamten Sequenzen. Diese steht an der Position .
Außerdem benötigt man eine Funktion , welche eine Bewertung der eingegebenen Buchstaben x und y berechnet oder nachschlägt. Die einfachste Bewertungsfunktion, die man sich vorstellen kann, gibt bei Gleichheit 1 zurück, ansonsten wird 0 zurückgegeben. Dabei werden also Substitutionen, Insertionen oder Deletionen geduldet und nicht bestraft.
Die Bewertungen ergeben sich aus dem Maximum folgender drei Fälle, wobei wir davon ausgehen, dass schon ein Teilalignment bis zur Position i und j vorliegt und eine Position weitergegangen wird um zu entscheiden wie die nächsten beiden Buchstaben aligniert werden. Alle Fälle werden in der Reihenfolge aufgeführt, wie sie in der Rekursionsgleichung auftreten
- Fall: Man aligniert mit . Dies entspricht in der Matrix einem Schritt diagonal nach unten rechts. Die Bewertung für setzt sich nun aus dem Wert des vorhergehenden Eintrags und dem Ergebnis von zusammen.
- Fall: Man aligniert mit einem Gap. Dies entspricht in der Matrix einem Schritt nach unten. Die Bewertung für setzt sich nun aus dem Wert des Eintrages und zusammen.
- Fall: Man aligniert mit einem Gap. Dies entspricht in der Matrix einem Schritt nach rechts. Die Bewertung für setzt sich nun aus dem Wert des Eintrages und zusammen.
Der Eintrag in wird aus dem Maximum dieser drei Fälle ermittelt. Daraus ergibt sich folgende Rekursionsgleichung.
Der Algorithmus kann sowohl auf der Basis von Ähnlichkeit als auch von Distanz angewendet werden. Es muss die Bewertungsfunktion entsprechend gewählt werden (siehe unten) und in der Rekursion entsprechend das Maximum (Ähnlichkeit) oder das Minimum (Distanz) ermitteln werden.
Initialisierung
Initialisierung der zusätzlichen (ersten) Spalte und (ersten) Zeile:
Nun kann zeilenweise ab und die Rekursion angewandt werden.
Beispiel
Anhand eines kleinen Beispiels werden hier die Schritte des Algorithmus' vorgestellt.
Als Bewertungsfunktion wird die folgende Funktion benutzt:
a = ACGTC und b = AGTC
Zum besseren Verständnis kann man sich vorstellen, dass die Zeilen mit den Buchstaben aus Sequenz a gelabelt sind und die Spalten mit den Buchstaben aus Sequenz b. Mathematisch gesehen macht dies innerhalb der Matrix keinen Sinn, deshalb ist dies hier nur zur Anschauung.
0. Schritt: Initialisierung
Die Einträge der Matrix für die erste Zeile und die erste Spalte wird wie oben beschrieben gefüllt. Die Bewertung für den Eintrag wird berechnet aus der darüberliegenden Bewertung und dem Score an der Stelle . Also die anderen Werte werden nun analog berechnet.
1. Schritt: Berechnung von :
→ Das Maximum entsteht aus dem ersten Fall, d.h A wird mit A aligniert.
→ Erhöhung von j um 1, i bleibt gleich
2. Schritt: Berechnung von :
→ Das Maximum entsteht aus dem dritten Fall, da hier das Maximum der Berechnung, nämlich 0 entsteht, d.h ein Gap(-) würde mit G aligniert.
Die gefüllte Matrix sieht nach vollständiger Ausführung der o.a. Schritte folgendermaßen aus:
Die Bewertung dieses Alignments ist 3.
Das dazugehörige Alignment sieht so aus:
Berechnet wird es durch ein Traceback.
Traceback
Das Traceback wird benötigt um aus der Matrix D das Alignment zu generieren. Man startet dazu in und berechnet rückwärts bis zum Eintrag woher die Bewertung, die in der aktuellen Zelle steht gekommen ist. Je nach Richtung bzw. Fall baut man das Alignment von hinten entsprechend auf, d.h man aligniert zwei Buchstaben oder fügt ein gap ein.
Eine andere Möglichkeit das Traceback durchzuführen besteht darin, sich während der Berechnung der Matrix in einer zweiten Matrix T, der Dimension , den Fall zu merken aus dem die entsprechende Bewertung entstanden ist. Für das Traceback wird jetzt nur noch der Pfad, beginnend in , in T zurückverfolgt und parallel "notiert" welche Fälle auftreten und damit wie das Alignment aussieht. Möchte man nicht nur ein optimales Alignment, sondern alle optimalen Alignments bekommen (es kann durchaus mehrere Alignments mit der gleichen Bewertung geben) muss man alle möglichen Wege in T rekursiv abarbeiten und die Alignments speichern.
Wahl der Bewertungsfunktion
Die Wahl der Bewertungsfunktion hat einen großen Einfluss auf die Ergebnisse, die man durch den Needleman-Wunsch-Algorithmus erhält. Eine einfach Bewertungsfunktion wie oben gewählt spiegelt keinesfalls den biologischen Hintergrund eines Alignments wieder und ist deshalb für praktische Zwecke eher ungeeignet. Die im Moment gebräuchlichsten Bewertungsfunktionen lesen die Bewertung aus eine sogenannte Scoring Matrix aus. Für Proteine kann man die PAM- oder Blosum-Matrizen benutzen. Diese Matrizen mit der Größe 20*20 (bzw. 24*24, wenn noch einige Sonderfälle beachtet werden) enthalten Bewertungen (sogenannte log-odds) dafür, dass eine Aminosäure durch eine andere substituiert wird. Die log-odds basieren auf Wahrscheinlichkeiten. Berechnet werden diese Scoring-Matrizen ebenfalls aus Sequenzalignments.
Die oben verwendete Bewertungsfunktion wird benutzt um die Ähnlichkeit zweier Sequenzen zu bestimmen. Um nun die Distanz bestimmen zu können kann man einfach die Bewertungsfunktion ändern, d.h bei Ungleichheit kann man einen positiven Wert zurückgeben, welcher als Strafe interpretiert werden kann und bei Gleichheit 0 oder einen negativen Wert. Es muss allerdings beachtet werden, dass in der Rekursion bei einer distanzbasierten Bewertungfunktion nicht das Maximum, sondern das Minimum ermittelt werden muss.
Ein Beispiel für eine distanzbasierte Bewertungsfunktion:
Probleme
Durch die Konstruktion des Algorithmus in der dargestellten Weise ist es nicht möglich die längste übereinstimmende Teilsequenz beider Sequenzen zu finden. Um dieses Problem zu beheben wurden von T.Smith und M. Waterman einige Modifikationen am Needleman-Wunsch-Algorithmus vorgeschlagen, die genau dies ermöglichen. Der modifizierte Algorithmus wird Smith-Waterman-Algorithmus genannt.
Komplexität
Der Needleman-Wunsch-Algorithmus hat eine Laufzeitkomplexität von . Diese Laufzeit entsteht, da der Algorithmus jedes der Felder mit einer Bewertung belegen muss. Die Berechnung der Bewertung funktioniert in der Regel in .
Die Speicherplatzkomplexität liegt ebenfalls bei , da alle Werte der Feldes abgespeichert werden.
Der Algorithmus ist daher für lange Alignments eher ungeeignet. Wenn man davon ausgeht, dass man Integerwerte speichert und diese in Java 4 Byte Speicher belegen, kommt man bei einem Alignment von Buchstaben schon auf Byte 381 MegaByte. Die Alignierung ganzer Genome lässt sich so allerdings noch nicht optimal durchführen. (Ein mittleres Bakteriengenom hat ca. 1 - 4 Millionen Basenpaare. Das Menschliche Genom z.B. hat ca. 3 Milliarden Basenpaare)
Der Hirschberg-Algorithmus hingegen berechnet ein globales Alignment auf linearem Speicherplatz .