<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Smith-Waterman-Algorithmus</id>
	<title>Smith-Waterman-Algorithmus - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Smith-Waterman-Algorithmus"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Smith-Waterman-Algorithmus&amp;action=history"/>
	<updated>2026-06-01T15:28:39Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Smith-Waterman-Algorithmus&amp;diff=279593&amp;oldid=prev</id>
		<title>imported&gt;Saehrimnir: BKL Fix</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Smith-Waterman-Algorithmus&amp;diff=279593&amp;oldid=prev"/>
		<updated>2025-06-30T08:08:38Z</updated>

		<summary type="html">&lt;p&gt;BKL Fix&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Der &amp;#039;&amp;#039;&amp;#039;Smith-Waterman-Algorithmus&amp;#039;&amp;#039;&amp;#039; ist ein [[Algorithmus]], der den [[Optimierungsalgorithmus|optimalen]] lokalen Alignment-Score (&amp;#039;&amp;#039;similarity score&amp;#039;&amp;#039;) bzw. das optimale [[Sequenzalignment#Lokales Alignment|lokale Alignment]] zwischen zwei [[Folge (Mathematik)|Sequenzen]] berechnet. Ein [[Sequenzalignment]] ist eine Folge von Edit-Operationen (wie z.&amp;amp;nbsp;B.  Zeichenersetzung, Einfügung, Löschung), die die eine Sequenz in die andere überführt. Die einzelnen Operationen haben einen Score und der Alignment-Score ist als die Summe der Edit-Operations-Scores definiert. Ein lokales Alignment ist eine Folge von Edit-Operationen um eine [[Zeichenkette|Teilsequenz]] der ersten Sequenz in eine Teilsequenz der anderen Sequenz zu überführen, d.&amp;amp;nbsp;h. bei der Optimierung kann eine Folge von Einfüge- und Lösch-Operationen am Anfang und Ende ignoriert werden, wenn dies den Alignment-Score verbessert. Diese ignorierten Operationen sind nicht Teil des lokalen Alignments.&lt;br /&gt;
&lt;br /&gt;
Die Eingabe-Sequenzen können [[Zeichenkette]]n über verschiedenen [[Alphabet]]en sein, z.&amp;amp;nbsp;B. in der [[Bioinformatik]] wird der Smith-Waterman-Algorithmus auf [[Nukleotidsequenz|DNA-Sequenzen]] oder [[Aminosäuresequenz]]en angewendet. Ein Anwendungsfall ist z.&amp;amp;nbsp;B. die Suche nach [[Gen]]en (in neu-sequenzierten [[Genom]]en), deren Sequenz einer bekannten Gen-Sequenz in einem andern Organismus ähnelt, wobei das Edit-Operations-Modell biologische Veränderungen während der [[Evolution]] approximiert.&lt;br /&gt;
&lt;br /&gt;
Der Algorithmus verwendet die Methode der [[Dynamische Programmierung|Dynamischen Programmierung]] und seine [[Laufzeitkomplexität|Laufzeit]] ist quadratisch. Er wurde 1981 von [[Temple Smith]] und&lt;br /&gt;
[[Michael S. Waterman]] entwickelt und ist eine Variante des [[Needleman-Wunsch-Algorithmus]], der das [[Sequenzalignment#Globales Alignment|globale Alignment]] berechnet.&lt;br /&gt;
&lt;br /&gt;
== Lokales Alignment-Problem ==&lt;br /&gt;
Der Smith-Waterman-Algorithmus löst das lokale Alignment-Problem:&lt;br /&gt;
:Gegeben seien zwei Sequenzen &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt;, sowie eine Alignmentbewertung &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt;. Gesucht sind alle optimalen lokalen Alignierungen, das sind globale Alignierungen von Teilsequenzen &amp;lt;math&amp;gt;a&amp;#039;&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;b&amp;#039;&amp;lt;/math&amp;gt;, die die Bewertungsfunktion &amp;lt;math&amp;gt;w&amp;lt;/math&amp;gt; optimieren, mit &amp;lt;math&amp;gt;a&amp;#039; = a_x\ldots a_{x&amp;#039;}, b&amp;#039; = b_y\ldots b_{y&amp;#039;}, 0\leq x\leq x&amp;#039;&amp;lt;|a|, 0\leq y\leq y&amp;#039;&amp;lt;|b|&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Motivation ==&lt;br /&gt;
Die Berechnung des optimalen lokalen Alignment hat eine andere Anwendung als die Berechnung des optimalen globalen Alignment.&lt;br /&gt;
&lt;br /&gt;
Die Betrachtung von globalen Alignments ist sinnvoll, wenn man davon ausgehen kann, dass die zu vergleichenden Sequenzen relativ ähnlich sind, z.&amp;amp;nbsp;B. Sequenzen gleicher Länge aus einer Proteinfamilie.&lt;br /&gt;
&lt;br /&gt;
Wenn man allerdings nach lokalen Übereinstimmungen (=Similarities) in Sequenzen, die in anderen Bereichen sehr unterschiedlich sein können, suchen möchte, so ist die Betrachtung von lokalen Alignments sinnvoller. Denn ein optimales globales Alignment könnte in diesem Fall diese lokalen Übereinstimmungen verdecken, da es seinen Score in Hinblick auf die gesamte Sequenz maximieren muss, z.&amp;amp;nbsp;B. einzelne [[Sequenzmotiv|Motive]] in verschiedenen Proteinsequenzen.&lt;br /&gt;
&lt;br /&gt;
== Abgrenzung zum Needleman-Wunsch-Algorithmus ==&lt;br /&gt;
Der [[Needleman-Wunsch-Algorithmus]] berechnet das globale Alignment von zwei Sequenzen. Um das lokale Alignment-Problem zu lösen, sind an dem Needleman-Wunsch-Algorithmus zwei Modifikationen notwendig:&lt;br /&gt;
# Initialisierung der ersten Spalte und der ersten Zeile mit 0&lt;br /&gt;
# Maximierung über einen vierten Fall, nämlich 0&lt;br /&gt;
&lt;br /&gt;
Der lokale Alignment-Score steht nicht in der rechten unteren Ecke der Score-Matrix, sondern irgendwo in der Matrix. Es ist der Eintrag mit dem größten Wert in der Matrix.&lt;br /&gt;
&lt;br /&gt;
Das optimale lokale Alignment erhält man durch [[Backtracking]] von dem Matrix-Eintrag mit dem größten Wert bis zu einem 0-Eintrag in der Matrix.&lt;br /&gt;
&lt;br /&gt;
Wie bei der Berechnung des globalen Alignment können auch mehrere optimale lokale Alignments von zwei Sequenzen existieren. Also können mehrere maximale Werte in der Score-Matrix existieren, und für jeden optimalen Wert sind auch mehrere unterschiedliche Backtraces möglich.&lt;br /&gt;
&lt;br /&gt;
== Matrix-Rekurrenzen ==&lt;br /&gt;
Spezifikation des Algorithmus durch [[Matrix (Mathematik)|Matrix]]-[[Differenzengleichung|Rekurrenzen]]:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Input&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;lt;math&amp;gt;a, b&amp;lt;/math&amp;gt; … Zeichenketten über einem [[Alphabet]] &amp;lt;math&amp;gt;\Sigma&amp;lt;/math&amp;gt; mit&lt;br /&gt;
** &amp;lt;math&amp;gt;m = \text{length}(a)&amp;lt;/math&amp;gt;&lt;br /&gt;
** &amp;lt;math&amp;gt;n = \text{length}(b)&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;w(c,d)&amp;lt;/math&amp;gt; … Alignment-Score-Funktion mit&lt;br /&gt;
** &amp;lt;math&amp;gt;c, d\in\Sigma\cup\{-\}&amp;lt;/math&amp;gt;&lt;br /&gt;
** &amp;lt;math&amp;gt;-&amp;lt;/math&amp;gt; … [[Gap (Bioinformatik)|Gap-Charakter]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Rekurrenzen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;lt;math&amp;gt;H(i,j)&amp;lt;/math&amp;gt; gibt den maximalen Alignment-Score zwischen einem [[Suffix]] von den ersten &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt; Zeichen von &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; und einem Suffix von den ersten &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt; Zeichen von &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; an&lt;br /&gt;
* &amp;lt;math&amp;gt;H(i,0) = 0,\; 0\le i\le m&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;H(0,j) = 0,\; 0\le j\le n&amp;lt;/math&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;H(i,j) = \max \begin{Bmatrix}&lt;br /&gt;
0 &amp;amp; \text{das leere Suffix} \\&lt;br /&gt;
H(i-1,j-1) + \ w(a_i,b_j) &amp;amp; \text{Match bzw. Mismatch} \\&lt;br /&gt;
H(i-1,j) + \ w(a_i,-) &amp;amp; \text{Deletion} \\&lt;br /&gt;
H(i,j-1) + \ w(-,b_j) &amp;amp; \text{Insertion}&lt;br /&gt;
\end{Bmatrix}&lt;br /&gt;
,\; 1\le i\le m, 1\le j\le n&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Effizienz ==&lt;br /&gt;
Die Laufzeitkomplexität des Smith-Waterman-Algorithmus ist in &amp;lt;math&amp;gt;O(nm)&amp;lt;/math&amp;gt; und der Speicherbedarf in &amp;lt;math&amp;gt;O(nm)&amp;lt;/math&amp;gt;. Dies kann man einfach aus den Matrix-Rekurrenzen ableiten.&lt;br /&gt;
&lt;br /&gt;
Weil man die Score-Matrix zeilen- bzw. spaltenweise berechnen kann, braucht man jeweils nur die aktuelle und die letzte Zeile bzw. Spalte zu speichern, wenn man nur den Score und nicht das Alignment berechnen möchte. In  dem Fall liegt der Speicherbedarf in &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; bzw. &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
In linearem Speicherbedarf kann man auch das lokale Alignment mit Hilfe der Programmiermethode [[Teile und herrsche (Informatik)|Divide-and-Conquer]] berechnen. Siehe [[Hirschberg-Algorithmus]].&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Input&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Sequenz a = &amp;lt;code&amp;gt;TCCG&amp;lt;/code&amp;gt;&lt;br /&gt;
* Sequenz b = &amp;lt;code&amp;gt;ACGA&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;math&amp;gt;w(x,y)=\begin{cases}&lt;br /&gt;
+2&amp;amp;\text{wenn }x=y\text{ (match)}\\&lt;br /&gt;
-1&amp;amp;\text{wenn }x=-\text{ oder }y=-\text{ oder }x\ne y\text{ (mismatch)}&lt;br /&gt;
\end{cases}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H =&lt;br /&gt;
\begin{pmatrix}&lt;br /&gt;
 &amp;amp;-&amp;amp;A&amp;amp;C&amp;amp;G&amp;amp;A \\&lt;br /&gt;
-&amp;amp;0&amp;amp;0&amp;amp;0&amp;amp;0&amp;amp;0 \\&lt;br /&gt;
T&amp;amp;0&amp;amp;0&amp;amp;0&amp;amp;0&amp;amp;0 \\&lt;br /&gt;
C&amp;amp;0&amp;amp;0&amp;amp;2&amp;amp;1&amp;amp;0 \\&lt;br /&gt;
C&amp;amp;0&amp;amp;0&amp;amp;2&amp;amp;1&amp;amp;0 \\&lt;br /&gt;
G&amp;amp;0&amp;amp;0&amp;amp;1&amp;amp;\mathbf{4}&amp;amp;3 \\&lt;br /&gt;
\end{pmatrix}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für das optimale lokale Alignment wird bei der Zahl &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt; begonnen und diagonal zurückgewandert, was als Ergebnis des Alignments &amp;lt;code&amp;gt;CG&amp;lt;/code&amp;gt; (aus Sequenz &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt;) mit &amp;lt;code&amp;gt;CG&amp;lt;/code&amp;gt; (aus Sequenz &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt;) liefert. Dies scheint bei diesem einfachen Beispiel trivial, bei längeren Sequenzen jedoch ist das Ergebnis nicht mehr auf einen Blick aus der Angabe abzulesen.&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* Temple F. Smith, Michael S. Waterman: &amp;#039;&amp;#039;Identification of Common Molecular Subsequences.&amp;#039;&amp;#039; In: &amp;#039;&amp;#039;[[Journal of Molecular Biology]].&amp;#039;&amp;#039; Band 147, 1981, S. 195–197. [[DOI:10.1016/0022-2836(81)90087-5]]. [https://dornsife.usc.edu/assets/sites/516/docs/papers/msw_papers/msw-042.pdf (online)]&lt;br /&gt;
* D. Gusfield: &amp;#039;&amp;#039;Algorithms on Strings, Trees and Sequences.&amp;#039;&amp;#039; 1999, ISBN 0-521-58519-8, S. 232–235, Kap. 11.7.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* https://bibiserv.cebitec.uni-bielefeld.de/cgi-bin/adp_LocSim CGI-Script zur Berechnung von lokalen Alignments bzw. dem lokalen Alignment-Score an der Universität Bielefeld&lt;br /&gt;
* https://jaligner.sourceforge.net/ Java-Implementierung des Smith-Waterman-Algorithmus&lt;br /&gt;
* https://melodic-sequence-alignment.firebaseapp.com/ JavaScript-GUI zum Alignment von Melodien auf Grundlage des Smith-Waterman-Algorithmus&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Bioinformatik]]&lt;br /&gt;
[[Kategorie:Optimierungsalgorithmus]]&lt;br /&gt;
[[Kategorie:Dynamische Programmierung]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Saehrimnir</name></author>
	</entry>
</feed>