Needleman-Wunsch-Algorithmus

Optimierungsalgorithmus aus der Bioinformatik
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 18. April 2005 um 15:20 Uhr durch Dennis G. (Diskussion | Beiträge). Sie kann sich erheblich von der aktuellen Version unterscheiden.

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  .

Ausserdem 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 errechnen sich aus folgenden drei Fällen, 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

  1. 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.
  2. 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.
  3. 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ählen werden (siehe unten) und in der Rekursion entsprechend das Maximum (Ähnlichkeit) oder das Minimum (Distanz) ermitteln werden.

Initialisierung

 

Initialisierung der zusätzlichen Spalte und 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 oben genannte Funktion benutzt:  

a = ACGTC und b = AGTC

0. Schritt: Initialisierung

Die erste Zeile und die erste Spalte wird wie oben beschrieben gefüllt. In diesem Fall ergeben sich nur Nullen, da ein Gap mit 0 bewertet wird.

 

1. Schritt: Berechnung von  :  

=> Das Maximum entsteht aus dem ersten Fall, d.h A wird mit A aligniert, was an sich ja auch logisch ist.

 

=> Erhöhung von j um 1, i bleibt gleich

2. Schritt: Berechnung von  :  

 

 

Die gefüllte Matrix sieht nach vollständiger Ausführung der o.a. Schritte folgendermaßen aus:

 

Die Bewertung dieses Alignments ist 4.

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 Bewertung entstanden ist. Für das Traceback wird jetzt nur noch der Pfad in dieser Matrix zurückverfolgt. 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 Fälle speichern und rekursiv abarbeiten.

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 in keinster Weise 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:

 

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   schon auf 100.000.000 Byte   95 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 3 Milliarden Basepaare)