Evolutionary Trees (Character-Based Methods) Hoffmann Patrick 20.06.2016 1 Einleitung Die folgende Ausarbeitung bezieht sich auf die im Literaturverzeichnis angegeben Quellen. Unter Evolution versteht man die allmähliche Veränderung der vererbbaren Merkmale einer Population von Lebewesen von Generation zu Generation. Der Begriff Phylogenese (Phylogenie) beschreibt die stammesgeschichtliche Entwicklung der Gesamtheit aller Lebewesen. Veränderungen der Merkmale einer Art können zur Artaufspaltung führen und somit in der Entstehung neuer Arten resultieren. Unter Phylogenetik versteht man die Wissenschaft, welche sich mit Phylogenie beschäftigt. Ein Beispiel für eine Anwendung der Phylogenetik ist die Entwicklung von Impfstoffen gegen Influenzaviren. Um einen wirksamen Impfstoff für die alljährliche Grippesaison herzustellen, ist es nötig die einzelnen Stämme des Virus mit hoher Genauigkeit vorhersagen zu können. Dabei wird die Evolution des Erregers über einen gewissen Zeitraum untersucht und mit diesen Daten werden phylogenetische Bäume rekonstruiert. Dadurch lassen sich Schlüsse auf zukünftige Influenzaviren ziehen und es ist möglich, Impfstoffe gegen diese herzustellen. Ein weiteres Beispiel für die Verwendung der Phylogenie sind „phylogenyaware multiple sequence alignment programs“, da diese für die Berechnung des „alignment“ phylogenetische Bäume verwenden. Im Folgenden werden merkmalsbasierte Methoden zum Erstellen Phylogenetischer Baume beschrieben. 2 Phylogenetische Bäume Phylogenetische Bäume werden verwendet, um Verwandtschaftsverhältnisse mehrerer Arten zueinander und zu einem hypothetischen Vorfahren zu ermitteln. Phylogenie wird meistens in binären Bäumen, azyklische Graphen bei denen jeder innere Knoten drei Nachbarn besitzt, dargestellt. Blätter des Baumes werden als „OTUs“, „operational taxonomical units“, 2 Patrick Hoffmann bezeichnet und stellen die in der heutigen Umwelt beobachtbaren Arten dar, aus denen ein Algorithmus die Topologie des Baumes ermitteln kann. Innere Knoten nennt man „HTUs“, „hypothetical taxonomical units“. Diese entsprechen einem möglichen gemeinsamen Vorfahren der beiden Kindsknoten. Der Wurzelknoten kann auch als „HTU“ verstanden werden, jedoch besitzen nicht alle phylogenetischen Bäume eine Wurzel, da diese oftmals nicht bekannt ist. Zudem sind einige Algorithmen nur für die Berechnung ungewurzelter Bäume geeignet. Oftmals besteht die Möglichkeit einen ungewurzelten Baum durch eine „outgroup“ zu wurzeln. Dabei wählt man als „outgroup“ eine Art, von der man weiß, dass die Verwandtschaft zu den anderen Arten sehr weit entfernt ist. Es existieren Bäume, bei denen die Distanz zwischen mehreren Knoten wichtig ist, wenn die einzelnen Kanten gewichtet sind. Diese Distanz repräsentiert eine Schätzung der evolutionären Distanz. Solche Bäume werden aber im Folgenden nicht mehr diskutiert. Folgende Abbildung veranschaulicht einen phylogenetischen Baum: Abbildung 1: Terminologie phylogenetischer Baum [1] Für einen ungewurzelten binären Baum mit n Blättern existieren Möglichkeiten einen phylogenetischen Baum zu erstellen. Somit gibt es für 9 Arten bereits 135135 mögliche Bäume. Je nach Input-Datensatz kann man die Rekonstruktion der Phylogenie in zwei Arten unterteilen. Zum einen gibt es distanzbasierte Methoden, welche vergleichende nummerische Daten als Eingabe bekommen. Zum anderen gibt es merkmalsbasierte Methoden, die diskrete Merkmale, wie Schnabelform, Anzahl der Finger oder auch eine bestimmte DNA-Sequenz, für die Bestimmung der Phylogenie verwenden. Letztere Methoden werden im Rahmen dieser Seminararbeit vorgestellt. 3 Merkmalsbasierte Methoden Zunächst müssen einige Annahmen getätigt werden, damit die im Folgenden beschriebenen Algorithmen anwendbar sind. Man muss annehmen, dass Merkmale bedeutungsvoll für die Rekonstruktion phylogenetischer Bäume sind. Eine weitere Annahme ist die unabhängige Vererbung von Merkmalen. Zudem muss man annehmen, dass alle beobachteten Zustände eines Merkmals sich von einem Grundzustand des nächsten gemeinsamen Vorfahren entwickelt haben. Merkmale die diese Annahme erfüllen, nennt man homolog. Evolutionary Trees (Character-Based Methods) Verschiedene Merkmale unterschiedlicher Taxa lassen sich in einer „character state matrix“ veranschaulichen. Diese Matrix besteht aus n Zeilen (Taxa) und m Spalten (Merkmale), wobei Mij für den Zustand des j-ten Merkmals des i-ten Taxon steht. In Abbildung 2 ist ein Beispiel für eine „character state matrix“ angegeben. Bei der Rekonstruktion der Phylogenie aus einer „character state matrix“ können Schwierigkeiten auftreten, da fast alle Methoden auf der Annahme beruhen, dass Taxa, die den gleichen Zustand für ein Merkmal haben, genetisch näher miteinander verwandt sind. Ein Problem tritt auf, wenn zwei oder mehrere Taxa den gleichen Zustand für das gleiche Merkmal aufweisen, aber genetisch nicht nah verwandt sind. Dies trifft beispielsweise auf das vorhanden sein von Flügeln bei Vögeln und Fledermäusen zu und wird Konvergenz bzw. parallele Evolution genannt. Um dieses Problem zu vermeiden, muss man annehmen, dass Konvergenz kaum oder gar nicht in Erscheinung tritt. Eine weitere Schwierigkeit sind Merkmalsumkehrungen. Da oft nicht bekannt ist, welcher Zustand eines Merkmals der Grundzustand und welcher der veränderte Zustand bezüglich eines Vorfahren ist, muss ein Zustand als Grundzustand ausgewählt werden. Es kann vorkommen, dass ein Taxon ein Merkmal von seinem Vorfahren erworben hat, wohingegen ein anderes Taxon, welches vom selben Vorfahren abstammt, dieses Merkmal nicht mehr aufweist. Dies wird als Merkmalsumkehrung bezeichnet. Genau wie bei der Konvergenz muss vorausgesetzt werden, dass Merkmalsumkehrungen selten oder gar nicht auftreten. 3.1 Kompatibilität Ein phylogenetischer Baum T, der sowohl Konvergenz als auch Merkmalsumkehrungen vermeiden soll, muss folgende Eigenschaft erfüllen: Für jeden Zustand s von jedem Merkmal c müssen alle Knoten u (damit sind sowohl innere Knoten als auch Blätter gemeint) für die der Zustand bezüglich c s ist, einen Teilbaum von T bilden. Eine Phylogenie, welche dieses Charakteristikum erfüllt, nennt man perfekte Phylogenie. Immer wenn eine „character state matrix“ M von Taxa eine perfekte Phylogenie zulässt, dann nennt man die Merkmale kompatibel. Beispielsweise ist ein binäres Merkmal m zu einem Baum T kompatibel, wenn es eine Kante (v,w) gibt, sodass das Löschen dieser Kante T in zwei Bäume aufspaltet, von denen alle Blätter eines Baumes den Zustand 0 haben und alle des anderen Baumes den Zustand 1. Somit ergibt sich die Problematik der perfekten Phylogenie. Die Berechnung der perfekten Phylogenie gliedert sich in zwei Teile. Zunächst wird geprüft ob M eine perfekte Phylogenie zulässt. Eine Menge S bestehend aus n Taxa, welche durch m Merkmale bestimmt werden, lässt sich in einer m x n „character state matrix“ M, bei der Mij der Zustand von dem Merkmal j des Taxons i ist, darstellen. Für jedes Merkmal i ist Oj die Menge der Taxa mit dem Zustand 1, also Oj = {i | Mij = 1}. Somit ist für Abbildung 2 O1 = {1,5}, O2 = {1} und O3 = {2,4}. X1 X2 X3 M Species 1 1 1 0 Species 2 0 0 1 Species 3 0 0 0 Species 4 0 0 1 Species 5 1 0 0 Abbildung 2: character state matrix [2] 3 4 Patrick Hoffmann Für jedes Paar an Merkmalen i und j gilt, dass sie paarweise kompatibel sind, wenn die Mengen Oi und Oj getrennt sind oder eine von ihnen die andere enthält. Daraus ergibt sich folgendes Lemma. Lemma1[2]: M erlaubt eine perfekte Phylogenie wenn jedes Paar von Merkmalen i und j paarweise Kompatibel sind. Beweis[2]: Es ist gegeben, dass M eine perfekte Phylogenie zulässt und |Oj| ≤ n/2 für jedes Merkmal j. Nun nimmt man an, dass zwei beliebige Merkmale i und j nicht paarweise kompatibel sind, also gibt es z.B. drei Taxa X, Y, Z mit X ∈ Oj - Oi, Y ∈ Oi - Oj und Z ∈ Oi ∩ Oj. Da Oi ∩ Oj nicht leer ist, gilt |Oi ∪ Oj| < n. Somit existiert ein Taxon W ∉ Oi, Oj. Weil Merkmal i kompatibel in T ist, gibt es eine Kante e in T die Y und Z von X und W trennt. Da Merkmal j kompatibel in T ist, gibt es eine Kante e' in T die X und Z von Y und W trennt. Daraus folgt ein Widerspruch, da T nicht sowohl e als auch e' enthalten kann. Somit sind i und j paarweise kompatibel. Für die Rückrichtung wird angenommen i und j sind paarweise kompatibel. Ohne Beschränkung der Allgemeinheit werden die Merkmale so angeordnet, dass |Oi| ≥ |Oj| für i < j. Jetzt wird gezeigt, dass es möglich ist, eine perfekte Phylogenie in m Durchläufen iterativ zu erstellen. Für jeden Durchlauf i sei M(i) eine Submatrix von M für die Merkmale 1,2,...,i. Es ist zu beachten, dass mehrere Taxa die gleichen Zustände für die Merkmale 1,2,...,i haben können. Diese werden in einer Zeile r in M(i) zusammengetragen und die dazugehörige Menge an Taxa wird als N(i)(r) bezeichnet. Das Ziel von Durchlauf i ist es, eine perfekte Phylogenie für M(i) zu erstellen. Im ersten Durchgang besitzt M(1) nur ein Merkmal mit den Zuständen 0 und 1. Die perfekte Phylogenie für M(1) besteht aus einer Wuzel mit zwei angehängten Blättern, von denen eines den Zustand 0 und das andere den Zustand 1 hat. Durch Induktion wird angenommen, dass T eine perfekte Phylogenie für M(i-1) in Durchgang i-1 ist. Nun nimmt man an, dass Oj eine Teilmenge von N(i-1)(r) für eine beliebige Zeile r in M(i-1) ist. Somit erhält man die perfekte Phylogenie für M(i) durch Aufteilen des Blattes r aus T in zwei Knoten u und v, so dass N(i)(u) = Oi und N(i)(v) = N(i-1)(r) - Oi. Es wird angenommen, dass die Taxa in Oi in N(i-1)(r) und N(i-1)(s) für beliebige Zeilen r und s aus M(i-1) vorkommen. Da die Zeilen r und s unterschiedlich in M(i-1) sind, gibt es ein Merkmal j < i mit Mrj(i-1) = 0 und Msj(i-1) = 1. Somit haben manche Taxa in Oi den Zustand 0 und manche Taxa in Oj den Zustand 1 für das Merkmal j. Folglich gilt Oi ⊈ Oj. Da aber auch |Oj| ≥ |Oi|, Oj ⊈ Oi gilt bedeutet es, dass Oi und Oj weder aufgeteilt sind, noch das eine Menge die andere enthält. Das widerspricht der ersten Annahme, nach der i und j paarweise kompatibel sind. ∎ Um einen effizienten Algorithmus, der überprüft ob eine „character state matrix“ M eine perfekte Phylogenie zulässt, zu erhalten, wird eine Hilfsmatrix L aus M benutzt, mit der geprüft wird, ob die Merkmale paarweise kompatibel sind. Zuerst werden die Merkmale in M so umstrukturiert, dass |Oi| ≥ |Oj| gilt falls i < j. L wird definiert mit Lij = 0 wenn Mij = 0, andernfalls Lij = max{-1,max{k < j | Mik = 1}}. Folgendes Lemma zeigt wie L benutzt werden kann um zu ermitteln ob M eine perfekte Phylogenie zulässt. Lemma2[2]: Wenn es irgendeine Spalte j in L mit zwei verschiedenen Einträgen, die nicht null entsprechen, gibt, dann lässt M keine perfekte Phylogenie zu. Andernfalls lässt M eine perfekte Phylogenie zu. Beweis[2]: Zuerst wird angenommen Lij = x und Lkj = x', wobei weder x noch x' null entspricht. Ohne Beschränkung der Allgemeinheit gilt x > x'. Da Lij und Lkj nicht leer sind, gilt per Definition, dass Mij = Mkj = 1. Weil Lij = x und Lkj > x ist Mix = 1 und Mxj = 0. Somit Evolutionary Trees (Character-Based Methods) beinhaltet Oj die Taxa i und k und Ox beinhaltet das Taxon i,aber nicht das Taxon k. Daraus folgt Oj ∩ Ox ≠ ∅ [1] und es gilt, dass Oj keine Teilmenge von Ox ist [2]. Weil |Ox| ≥ |Oj| gilt j > x. Zudem ist Ox keine Teilmenge von Oj, da k ∉ Ox und somit Ox ein Taxon besitzen sollte, welches nicht in Oj vorkommt [3]. Nach [1] [2] und [3] und der Verwendung von Lemma1 erlaubt M keine perfekte Phylogenie. Nun wird angenommen, dass alle Einträge Lij, die nicht null entsprechen, für jedes Merkmal j den gleichen Wert haben. Zudem wird die Behauptung aufgestellt, dass jedes Paar an Merkmalen paarweise kompatibel ist und M deswegen eine perfekte Phylogenie zulässt. Sei k ≠ 0 der Wert des Eintrags Lij, für ein bestimmtes Merkmal j. Da alle Einträge Lij, die nicht null sind, den gleichen Wert k haben, gilt Oj ⊆ Ok und Op ∩ Oj = 0 für k < p < j. Daher ist j paarweise kompatibel mit jedem Merkmal p, wenn k ≤ p < j gilt. Falls k > 0 ist, dann wird k' als Wert von dem Eintrag Lik, der nicht null ist, gesetzt. Nun ist j wieder paarweise kompatibel mit jedem p, wenn k' ≤ p < k gilt. Dies kann so lange wiederholt werden bis k = -1. Somit ist j paarweise kompatibel mit jedem Merkmal p ist, wenn p < j gilt ∎ Der Algorithmus zur Überprüfung der Kompatibilität läuft wie folgt ab. Zunächst wird anhand einer gegebenen Matrix M die Matrix L berechnet. Dann werden für jedes j zwei Taxa i und k gesucht, so dass Lij ≠ Lkj und Lij, Lkj ≠ 0. Falls es ein solches Paar an Taxa gibt, meldet der Algorithmus, dass M keine perfekte Phylogenie zulässt. Andernfalls zeigt der Algorithmus an, dass M eine perfekte Phylogenie zulässt. Da L in O(mn) berechnet wird und es für m Merkmale O(n) dauert, um zu überprüfen, ob es zwei unterschiedliche Einträge gibt, die nicht null entsprechen, ergibt sich eine Laufzeit von O(mn). Der Algorithmus zu Rekonstruierung der perfekten Phylogenie nimmt an, dass M eine perfekte Phylogenie zulässt. Ohne Beschränkung der Allgemeinheit wird angenommen, dass die Spalten von M so angeordnet sind, dass |Oi| ≥ |Oj| für 1 ≤ i < j ≤ m. Es wird eine perfekte Phylogenie Ti für die Merkmale {1,2,...,i}, i = 1,2,...,m, inkrementell gebildet. Für jedes Blatt v in T gilt, dass N(v) die Menge aller Taxa ist, welche den gleichen Zustand für die Merkmale 1 bis i aufweisen. Zu Beginn startet der Algorithmus mit einem Baum T0, der nur einen einzigen Knoten r besitzt wobei N(r) = {1,2,...,n}. Danach wird der Baum gebildet, indem jedes Merkmal einzeln verarbeitet wird. Da M eine perfekte Phylogenie zulässt wird Ti für jedes i berechnet, dadurch dass maximal ein Blatt in Ti-1 in zwei Blätter geteilt wird. Weil es für jedes Merkmal j O(n) dauert um ein Blatt zu bestimmen und es in zwei Blätter aufzuteilen, beträgt die Laufzeit O(nm). 3.2 Maximum Parsimony Hinter „maximum parsimony“ steckt die Annahme, dass die Evolution immer den kürzesten Weg nimmt. Somit wird mit „maximum parsimony“ immer die Phylogenie mit den wenigsten Punktmutationen berechnet. Der Input ist wieder eine n x m „character state matrix“ M. Die „parsimony length“ L(T) ist definiert als die geringste Anzahl an Mutationen, die benötigt werden, um den phylogenetischen Baum T zu erklären. Das Ziel der „parsimony“ Problematik ist es, einen Baum T so zu berechnen, dass L(T) möglichst klein bleibt. Dieser Baum wird „most parsimonious tree“ bzw. sparsamster Baum genannt. Es ist zu beachten, dass es mehrere sparsamste Bäume für eine Matrix M geben kann. Die „parsimony“ Problematik lässt sich in zwei Teile unterteilen. 5 6 Patrick Hoffmann Das „small parsimony“ Problem besteht darin, zu einer gegebenen Matrix M, einer Menge von Taxa S und einem gegebenen phylogenetischen Baum T die Zuordnung aller Zustände der inneren Knoten so zu bestimmen, dass die Anzahl an Mutationen gering bleibt. Eine mögliche Lösung ist der Fitch-Algorithmus, der einen gewurzelten Binärbaum verwendet. Zunächst wird angenommen M habe nur eine Spalte. Damit wird jedes Taxon in S durch ein Merkmal c repräsentiert. Sei Σ die Menge aller möglichen Zustände für c und sei jedes Blatt v in T mit einem Zustand c(v) ∈ Σ verbunden. Für jeden Knoten u in T und für jedes σ ∈ Σ, bezeichnet man Tu als Teilbaum von T mit der Wurzel u. L(Tu,σ) ist die kleinste Anzahl an Zustandsänderungen in den Kanten von Tu, wenn u mit σ bezeichnet ist. Es gilt L(Tu) = minσ∈∑ L(Tu,σ). Sei Ru die Menge an Zuständen für die L(Tu,σ) = L(Tu) gilt, also Ru = {σ ∈ ∑ | L(Tu,σ) = L(Tu)}. Folgendes Lemma gibt die Formel zur rekursiven Berechnung für Ru und L(Tu) an. Lemma3[2]: Für jedes Blatt u in T gilt, Ru = {c(u)}, L(Tu) = 0. Für jeden inneren Knoten u in T, bei dem v und w die Kindsknoten sind, soll δ = 1 sein, falls Rv ∩ Rw = ∅, andernfalls δ = 0. Daraus ergibt sich L(Tu) = L(Tv) + L(Tw) + δ, Ru= Rv ∩ Rw, falls δ = 0, andernfalls Rv ∪ Rw. Beweis[2]: Beim Input ist festgelegt, dass der Zustand jedes Blattes (u) ist. Daraus folgt Ru = {c(u)}. L(Tu) = 0, weil es keine Mutationen gibt. Für jeden inneren Knoten gibt es zwei Fälle, die bestimmen, ob δ = 1 oder = 0 ist. Wenn δ = 0, Rv ∩ Rw= ∅ wird angenommen, dass L(Tu) = L(Tv) + L(Tw). Da die „parsimony length“ von Tu mindestens L(Tv) + L(Tw) ist, gilt L(Tu) ≥ L(Tv) + L(Tw). Wenn man u, v, w mit einem beliebigen σ ∈ Rv ∩ Rw wählt, dann weisen die Kanten (u,v) und (u,v) keine Zustandsänderung auf. Somit ergibt sich L(Tu) ≤ L(Tu,σ) ≤ L(Tv,σ) + L(Tw,σ) = L(Tv) + L(Tw). Diese Gleichung erfüllt sich, wenn Ru = Rv ∩ Rw. Wenn δ = 1, Rv ∩ Rw= ∅ wird angenommen, dass L(Tu) = L(Tv) + L(Tw)+ 1. Da es keinen gemeinsamen Zustand in Rv und Rw gibt muss L(Tu) echt größer sein als L(Tv) + L(Tw) und somit gilt L(Tu) ≥ L(Tv) + L(Tw) + 1. Wenn man v und w jeweils mit σ1 ∈ Rv und σ2 ∈ Rw wählt und u mit σ, wobei σ entweder σ1 oder σ2 entspricht, erhält man L(Tu) ≤ L(Tu,σ) ≤ H(σ,σ1) + H(σ,σ2) + L(Tv,σ1) + L(Tw,σ2) = 1+(Tv) + L(Tw). Diese Gleichung wird erfüllt, wenn Ru = Rv ∪ Rw2. ∎ Nach diesem Lemma kann ein zweistufiger Algorithmus das „small parsimony“ Problem lösen. Zuerst werden die Knoten u in T von unten nach oben durchgegangen und es werden sowohl L(Tu) als auch Ru berechnet. Im zweiten Teil wird zu jedem inneren Knoten, von oben nach unten, ein Merkmal ausgewählt, sodass L(T) stimmt. Die Zeitkomplexität des Fitch Algorithmus ist O(n|∑|), wobei n die Anzahl an Taxa ist. Da M in Wirklichkeit m Spalten hat, ergibt sich eine Laufzeit von O(mn|∑|). Bei dem „large parsimony“ Problem“ ist ein phylogenetischer Baum mit geringer L(T) für eine gegebene „character state matrix“ M gesucht. Eine mögliche Lösung dafür ist der „branch and bound algorithm“ von Hendy und Penny. Dieser berechnet den sparsamsten Baum für eine Menge von Taxa S {a1,a2,...,an}. Es wurde beobachtet, dass beim Einfügen eines neuen Blattes ai+1 zu einem Baum T die „parsimony length“ monoton steigt. Falls die „parsimony length“ von T, welcher unvollständig ist, größer als von einem vollständigen bekannten Baum ist, werden die Bäume, die sich von T fortsetzen nicht mehr berechnet. Dadurch wird die Zeit für die Berechnung deutlich reduziert. Diese Methode ist nur effektiv, wenn bereits ein vollständiger Baum mit einer sehr kleinen „parsimony length“ bekannt ist. Deshalb werden andere effiziente Algorithmen, die phylogenetische Bäume erstellen, benutzt Evolutionary Trees (Character-Based Methods) um einen Baum zu berechnen, der die geeigneten Voraussetzungen erfüllt. Eine solche Methode ist beispielsweise „neighbor-joining“, für Details siehe [2]. 4 Diskussion Sowohl der Algorithmus zum Erstellen einer perfekte Phylogenie als auch die „maximum parsimony“ Methode geben jeweils den besten phylogenetischen Baum wieder. Jedoch ist zu beachten, dass keiner dieser beiden Bäume der „echte“ phylogenetischen Baum sein muss. Beide Methoden beruhen auf die in Punkt drei (Merkmalsbasierte Methoden) genannten Annahmen, die jedoch aus biologischer Sicht nicht immer korrekt sind. Außerdem macht es bei der vorgestellten Methode zum Erstellen einer perfekten Phylogenie etwas aus, ob die Merkmale geordnet oder ungeordnet sind. Beispielsweise ist ein Merkmale mit vier Zuständen geordnet, wenn die Änderung der Zustände eine lineare Reihenfolge hat (3→1→4→2). Man spricht von ungeordneten Merkmalen, wenn die Merkmale von jedem Zustand aus in jeden beliebigen Zustand aus einer bestimmen Menge an Zuständen wechseln können. Eine weite Schwierigkeit ist der horizontale Gentransfer, da Gene nicht nur vertikal, von Generation zu Generation, vererbt werden sondern auch horizontal zwischen verschiedenen Arten ausgetauscht werden können. Ein sehr bekanntes Beispiel dafür ist der Austausch von Resistenzen bei Bakterien. Ein weiteres Beispiel sind Anteile an retroviralen Sequenzen vielen eukaryotischen Genomen. Das kann bei den merkmalsbasierten Methoden zu Problemen führen, wenn DNA-Sequenzen betrachtet werden. 5 Literaturverzeichnis [1] Nach Vorträgen von C-B Stewart, Department of Biological Sciences University at Albany, SUNY und Tal Pupko, Faculty of Life Science Tel-Aviv University [2] W.-K: Sung: Algorithms in Bioinformatics — A Practical Introduction, Abschnitt, 7.1, 7.2, CRC Press, 2010 [3] J. Setubal, J. Meidanis: Introduction to Computational Molecular Biology, PWS, 1997; Abschnitte 6.1, 6.2 sowie Errata zu Lemma 6.1. [4] V. Storch, U. Welsch, M. Wink: Evolutionsbiologie. Heidelberg: Springer Verlag, 2013; Seite 281f 7