Eingabe: Zwei Zeichenketten $X$ und $Y$ aus einem Alphabet $\Sigma$, z.B. $\Sigma = \{A,C, G, T\}$. Eine Bestrafung/Kosten $\alpha_{x,y}$ für jedes Symbol-Paar $x,y \in \Sigma$ und ein nicht-negativer Strafterm $\alpha_{gap}>0$ für eine Lücke (gap).
Ausgabe: Ein Alignment von $X$ und $Y$ mit minimalen Gesamtkosten.
Die Gesamtkosten (total penalty) heißen in der Bioinformatik auch Needleman-Wunsch Score (NW Score).
Eingabe: Zwei Zeichenketten $X$ und $Y$ aus einem Alphabet $\Sigma$. Die Zeichenfolge $X$ soll durch Edit-Operationen in eine Zeichenfolge $Y$ überführt werden. Dabei gibt es Bestrafung/Kosten für
- die Editoperation Ersetzen (Symbolaustausch): $\alpha_{x,y}$ für jedes Symbol-Paar $x,y \in \Sigma$ (z.B. $\alpha_{x,y}=1$ für $x \neq y$ unabhängig von $x,y$ und $\alpha_{x,y}=0$ für $x=y$) und
- die Editoperation Löschen/Einfügen: nicht-negativer Strafterm $\alpha_{gap}>0$ (z.B. $\alpha_{gap}=1$) für das Löschen eines Symbols aus $X$ bzw. für ein Einfügen eines Symbols zu $X$.
Ausgabe: Der Edit-Abstand von $X$ zu $Y$, d.h. die minimalen möglichen Gesamtkosten, die durch Editieren von $X$ zu $Y$ (und umgekehrt) entstehen.
Hinweis:
Nicht-leere Zeichenketten:
und die um ein Symbol verkürzten Zeichenketten:
$P_{i,j}$ sei die Gesamtstrafe (total penalty) des Alignments von $X_i$ und $Y_j$ mit
dann gilt folgende Rekurrenz für $i\in\{1,2,\dots,m\}$ und $j\in\{1,2,\dots,n\}$:
$$ P_{i,j} = \min\left\{ P_{i-1,j-1} + \alpha_{x_i, y_j}, P_{i-1,j} + \alpha_{gap}, P_{i,j-1} + \alpha_{gap}\right\} $$Hinweis:
NW / EditDistance
¶Input: : Strings $X$ and $Y$. Penalties $\alpha_{xy}$ and $\alpha_{gap}>0$
Output: The NW score / Edit distance of $X$ and $Y$
// subproblem solutions (indexed from 0)
$A:= (m+1)\times(n+1)$ two dimensional array
// base case #1
for $i:=0$ to $m$ do
$A[i][0]=i\cdot \alpha_{gap}$
// base case #2
for $j:=0$ to $n$ do
$A[0][j]=j\cdot \alpha_{gap}$
// systematically solve all subproblems
for $i:=1$ to $m$ do
for $j:=1$ to $n$ do
$A[i][j] := \min\left\{ A[i-1][j-1] + \alpha_{x_i, y_j}, A[i-1][j] + \alpha_{gap}, A[i][j-1] + \alpha_{gap}\right\}$
return $A[m][n]$// solution to largest subproblem
Die Laufzeit ist $O(mn)$ (Auffüllen des 2d-Arrays)
Beispiel: Edit-Abstand mit $\alpha_{x,y}=1$ für $x\neq y$ und $\alpha_{gap}=1$
Abbildung aus [Man]