Schriftliche Ausarbeitung zum Vortrag über Genome Rearrangements im Proseminar Bioinformatik (Sommersemester 2011) Verfasser: Christof Schramm Betreuer: Prof. Heun
1 Biologischer Hintergrund Ein wichtiges Ziel der Bioinformatik ist es, Verwandtschaftsbeziehungen zwischen Arten zu untersuchen. Die Resultate derartiger Untersuchungen sind für die biologische Grundlagenforschung sehr wichtig, da sie ein Verstehen von Evolutionsvorgängen in der Vergangeneit ermöglichen. Die normale Herangehensweise zum Ermitteln des Verwandtschaftsgrades mehrerer Arten ist, ein Gen auszuwählen, welches im Genom jeder Art vorkommt, und dann ein Ähnlichkeitsmaß zwischen den verschiedenen Ausprägungen des Gens in den jeweiligen Genomen zu bilden. Diese Ähnlichkeitsmaße verwenden zumeist Mutationen an einzelnen Positionen oder Teilabschnitten der Nukleotidsequenz oder der Aminosäuresequenz des vom Gen codierten Proteins. Ein sehr einfaches Beispiel ist die p-distance[3], ein einfaches Maß für die Anzahl der Mutationen an einzelnen Positionen der Nukleotidsequenz, die nötig sind, um eine Sequenz A in eine Sequenz B zu überführen: p= d L L = Anzahl der Positionen im Gen, d = Unterschiedliche Positionen In manchen Fällen kann es jedoch sein, dass man beim paarweisen Vergleich von Genen kaum Mutationen vorfindet, so zum Beispiel in den Genomen von Mitochondrien oder Chloroplasten verschiedener Arten oder den Genen der X-Chromosomen der Säugetiere[2]. Obwohl die Sequenzen der einzelnen Gene in diesen Fällen fast identisch sind, wurden bei näherer Untersuchung oft große Unterschiede in der Genandordnung entdeckt. Solche Änderungen in der Genanordnung bezeichnet man als Genome-Rearrangements. Ähnlich wie mit einzelnen Mutationen kann man auch Ähnlichkeitsmaße erstellen, die auf Genome- Rearrangements beruhen. Man ermittelt dazu die minimal benötigte Anzahl von Rearrangements, die benötigt wird, um jeweils ein Genom in ein anderes zu überführen. Es gibt verschiedene Arten von Genome-Rearrangements. Hier seien vorgestellt: Transposition: Verschiebung einer Folge von Genen innerhalb eines Chromosoms ohne Umkehrung der Reihenfolge Reziproke Transposition: Vertauschung der Endabschnitte zweier Chromosomen Reversal: Umkehrung einer Genfolge innerhalb eines Chromosoms ohne Verschiebung. Es sind auch noch weitere Arten von Genome-Rearrangements denkbar, aber im Folgenden wird ein vereinfachter Fall betrachtet, der voraussetzt, dass es nur Reversals gibt, dass kein Gen doppelt vorkommt und dass das gesamte Genom aus einem einzigen Chromosom besteht. Wir suchen also nach einem Algorithmus, der die minimale Anzahl an Reversals benötigt, um eine lineare Gen-Folge ohne Duplikate in eine andere umzuwandeln. 1
2 Abstraktion & Definitionen In diesem Abschnitt wird das Problem etwas formaler dargestellt. Dies dient dem einfachen Zweck, ein besseres Verständnis der Problemstellung zu erarbeiten und ein präziseres Vokabular für die nachfolgende Darstellung eines Lösungsansatzes zu erhalten. Zunächst einmal können wir die Folge von Genen auf dem Chromosom A einfach als aufsteigende Folge (1,...,n) darstellen. Die Folge auf dem Chromosom, zu dem der evolutionäre Abstand ermittelt werden soll, kann damit einfach als Permutation π=(π 1,..., π n ) der Folge (1,...,n) dargestellt werden. Die identische Permutation ist die Permutation, für die gilt: π 1 =1,..., π n =n. Im Folgenden werden wir die erweiterte Darstellung der Permutation π, bezeichnet mit ext(π) benutzen. Diese ist dadurch definiert, dass am Anfang der Permutation π ein Element π 0 =0 eingefügt, und am Ende ein Element π n+1 =n+1 angehängt wird. Wenn in den folgenden Abschnitten von der Permutation π die Rede ist, so ist die erweiterte Darstellung gemeint. Diese Schreibweise wurde zur Vereinfachung gewählt Nun definieren wir einige Merkmale einer Permutation π, die uns den weiteren Umgang damit erheblich erleichtern. Das wichtigste sind Breakpoints, welche umgangssprachlich ausgedrückt kontinuierlich aufsteigende oder absteigende Teile der Permutation voneinander trennen. Genauer ist ein Breakpoint ein Paar (i,i+1),so dass π i π i+1 >1. Die Anzahl k der Breakpoints von π wird angegeben durch k=brp(π). Aus der obigen Definition eines Breakpoints folgt direkt die Definition von Strips. Sei k = brp(π) und seien (i 1,i 1 +1),...,(i k,i k +1) mit i 1 <...<i k die Breakpoints von π. Dann sind die Teilfolgen s 0 =(π 0,...,π i1 ),..., s k =(π ik +1,...,π n+1 ) die Strips von π. Die Strips von π stellen also kontinuierliche Abschnitte da, innerhalb derer jedes Element immer um eins größer oder kleiner ist als das vorhergehende. Gleichheit kann aufgrund unserer Forderung, dass jedes Gen nur einmal vorkommt, nicht zustande kommen. Ein Strip s j ist damit entweder aufsteigend, falls π i j +1<...<π i j+1, oder absteigend, falls π i j +1>...>π i j+1. Einelementige Strips definieren wir als absteigend, es sei denn, es handelt sich um den ersten Strip s 0 =π 0 oder um den letzten Strip s k =π n+1. Beispiel: Sei π = (0 5 4 3 7 8 1 2 6 9 10). Diese Permutation hat folgende fünf Breakpoints: (0,1), (3,4),(8,1),(2,6) und (6,10). Damit folgt, dass die π sechs Strips hat: s 0 =(0), s 1 =(5,4,3), s 2 =(7,8), s 3 =(1,2), s 4 =(6), s 5 =(9,10). Folgende Strips sind aufsteigend: s 0, s 2, s 3,s 5. Die restlichen Strips sind absteigend. Zu letzt noch die genaue Definition eines Reversals: Ein (i,j) Reversal ist eine Umkehrung ρ(i,j), so dass gilt π ρ(i, j)=(π 1,..., π i 1,π j,π j 1,...,π i+1,π i,π j +1,...,π n ) für 1 i< j n 3 Beobachtungen Beobachtung 1 In diesem Abschnitt wird gezeigt, dass man, sobald in einer Permutation mindestens ein absteigender Strip vorhanden ist, ein Reversal durchführen kann, welches einen Breakpoint eliminert. Der Beweis erfolgt so, dass zunächst gezeigt wird, dass in gewissen Situationen ein Breakpoint eliminert werden kann. Anschliessend wird gezeigt, dass eine dieser Situationen immer vorkommen muss, sobald ein absteigender Strip in der Permutation existiert. 2
Teil 1: Ist k {0,..., n+1} ein Element von ext(π), liegt k in einem absteigenden Strip und liegt k- 1 in einem aufsteigenden Strip von ext(π), dann existiert ein Reversal ρ, welches garantiert einen Breakpoint eliminiert. Die Begründung hierfür ist, dass sowohl k als auch k-1 Teil eines Breakpoints sein müssen weil sie jeweils das rechts stehende Element ihres Strips sind. Das Reversal ρ ist damit jenes Reversal, welches k-1 neben k platziert, wodurch dieser Breakpoint eliminiert wird. Dabei ist zu beachten, dass es keine Rolle spielt, ob der aufsteigende Strip in der Permutation vor oder nach dem absteigenden liegt. Dieser Beweis lässt sich analog auch für die These führen, dass falls l {0,...,n+1} in einem absteigenden Strip - und l+1 in einem Aufsteigenden Stirp von π liegt ein Reversal σ existiert, welches auch einen Breakpoint eliminiert. Teil 2: Jetzt sei π eine Permutation mit mindestens einem absteigenden Strip. Dann lässt sich der erste Fall aus Teil 1 dieses Beweises immer zur Anwendung bringen. Ersichtlich wird dies, wenn man das kleinste Element k aus allen absteigenden Strips von π betrachtet. Dann muss k-1 in einem aufsteigenden Strip liegen. Hier ist besonders zu beachten, dass das Element π 0 =0 welches mit der erweiterten Darstellung von π eingeführt wurde immer in einem aufsteigenden Strip liegt, auch wenn es alleine steht. Erst durch dieses Element ist garantiert, dass der erste Strip der Permutation ein aufsteigender ist, und nur deshalb gilt dieser Beweis für jede Permutation. Beobachtung 2 In diesem Abschnitt wird gezeigt, dass man, sobald der Fall vorliegt, dass π keine absteigenden Strips hat, ein Reversal durchführen kann, welches die Anzahl der Breakpoints nicht erhöht, falls π nicht die identische Permutation ist. Zunächst zeigen wir, dass π mindestens zwei Breakpoints hat, sobald es nicht die identische Permutation ist. Dazu rufen wir uns noch einmal die Merkmale der erweiterten Darstellung der Permutation in Erinnerung, insbesondere sind hier die an die Enden angefügten Elemente π 0 =0 und π n+1 =n+1 wichtig, welche immer in aufsteigenden Strips liegen. Sind π 0 und π n+1 Elemente des selben Strips, so wäre π die identische Permutation. Deshalb existieren die zwei aufsteigenden Strips s 0 =(π 0,...,π i ) und s k =(π j,...,π n+1 ). Damit existieren mindestens die Breakpoints (i,i+1) und (j,j-1) [1]. Führt man ein Reversal ρ = (i+1,j-1) aus, so macht man aus den dazwischenliegenden Strips Absteigende, erzeugt jedoch keinen neuen Breakpoint, da die Anzahl der Breakpoints im umgedrehten Stück sich nicht verringert. Durch die Beobachtungen 2 und 3 ist schon ein Algorithmus impliziert, welcher das MinSR Problem löst, im Folgenden wird jedoch noch eine weitere Besonderheit betrachtet, welche dem dann folgenden Algorithmus einige wichtige später näher erläuterte Eigenschaften verleiht. Beobachtung 3 Die Permutation π besitze jetzt mindestens einen absteigenden Strip. Seien k, l {0,..., n+1} Elemente der Permutation. Sei k das kleinste Element aus allen absteigenden Strips, und l das größte Element aus allen absteigenden Strips (es muss wie schon im Vortrag erwähnt nicht der Selbe sein). Sei nun ρ das Reversal, welches k-1 neben k platziert, und σ das Reversal, welches l neben l+1 platziert. Falls nun πρ und πσ keine absteigenden Strips enthalten, so gilt ρ=σ und brp(πρ) = brp 2. Beim Beweis dieser Behauptung wird auf den ersten Teil des Beweises der Beobachtung 1 zurück gegriffen. 3
Da k das kleinste Element aus allen absteigenden Strips ist, muss k-1 in einem aufsteigenden Strip liegen. Läge nun k-1 in π rechts von k, so würde das Reversal ρ den aufsteigenden Strip in dem k-1 liegt so umdrehen, dass k-1 neben k läge, dann entstünde jedoch keine Permutation ohne absteigenden Strip. Aufgrund dieser Tatsache ist davon auszugehen, dass k-1 in π links von k liegt. Ebenso kann man folgern, dass l+1 in π rechts von l liegen muss, da πσ sonst absteigende Strips enthielte. Nun können wir ausserdem aus den gestellten Bedingungen folgern, dass k in dem von σ umgedrehten Teil der Permutation liegen muss, da sonst ein absteigender Teil der Permutation erhalten bliebe. Ebenso können wir folgern, dass l in dem von ρ umgedrehten Teil der Permutation liegen muss da sonst der absteigende Strip in dem l liegt erhalten bliebe. Durch Widerspruch wird gezeigt, dass ρ=σ gelten muss. Dass sich die Anzahl der Breakpoints nach dem Reversal um 2 verringert folgt einfach aus der Tatsache, dass l neben l+1 platziert wird, und k neben k-1(k, k-1, l und l-1 sind Teile von Breakpoints). Angenommen es gilt ρ σ, dann muss ein Strip s x existieren, der nur von einem beiden Reversals beeinflusst wird, sei dies o.b.d.a. in diesem Fall ρ. Ist s x in π aufsteigend, dann ist er in πρ absteigend, dies ist jedoch nach den gegeben Voraussetzungen ausgeschlossen. Ist s x in π absteigend, dann würde er in πσ erhalten beliben, damit würden wir jedoch gegen die Bedingung verstoßen, dass sowohl πρ als auch πσ keine absteigenden Strips mehr enthalten dürfen. Damit muss gelten ρ=σ[1]. 4 Beschreibung des Algorithmus Nun betrachten wir den Algorithmus, welcher durch die Beobachtungen 1,2 und 3 impliziert wird: 1: Eingabe: Permutation π der Länge n 2: rev = () //Liste der durchgeführten Reversals 3: solange π nicht die identische Permutation 4: falls π hat absteigende Strips 5: Bestimme kleinstes Element k der absteigenden Strips von π 6: Bestimme Position i von k und Position i' von k-1 7: ρ=(i'+1,i) 8: falls πρ hat keine absteigenden Strips 9: Bestimme das größte Element l der absteigenden Strips von π 10: Bestimme die Position j von l in π und die Postion j' von l+1 in π 11: ρ=(j,j'-1) 12: sonst // π hat keinen absteigenden Strip 13: ρ = (Reversal zwischen den ersten beiden Breakpoints von π) 15: π = πρ 15: rev += ρ 16: Rückgabe rev Die Zeilen 12 und 13 sorgen dafür, dass die Permutation einen absteigenden Strip bekommt, sofern sie keinen (mehr) hat. Damit macht sie sich Beobachtung 2 zu nutze. Beobachtung 1 kommt in den Zeilen 5-7 zur Verwendung, indem einfach das kleinste Element in der absteigenden Strips von π neben das nächst kleinere gestellt wird, dadurch wird ein Breakpoint eliminiert. 4
Beobachtung 3 wird in den Zeilen 8-11 verwendet, und ist besonders wichtig, da sie garantiert, dass der Algorithmus im Durchschnitt pro Schritt einen Breakpoint entfernt. Ist πρ frei von absteigenden Strips, so wurden entweder gemäß Beobachtung 3 zwei Breakpoints eliminiert, oder es wurde nur ein Breakpoint eliminiert, dann ist aber das Reversal σ welches das größte Element l neben l+1 platziert nicht gleich ρ und es wird zwar auch ein Breakpoint eliminiert, aber dafür πσ hat wieder einen absteigenden Strip. Daraus folgt, dass falls die durch ein Reversal ρ resultierende Permutation πρ keinen absteigenden Strip mehr enthält, zwei Breakpoints entfernt werden. Da aber das Einführen eines absteigenden Strips keinen Breakpoint entfernt, balancieren sich diese beiden Operationen aus, und entfernen im Durchschnitt einen Breakpoint. Da das letzte Reversal immer zwei Breakpoints entfernt, wird Ausserdem der mögliche Fall ausgeglichen, dass die Ausgangspermutation keinen absteigenden Strips enthält. Damit wird im Durchschnitt pro Schleifendurchlauf ein Breakpoint entfernt. 5 Laufzeitanalyse und Vergleich mit anderen Verfahren In diesem Abschnitt wird die Laufzeit des Algorithmus analysiert und unser Ergebniss mit dem theorethisch möglichen Optimum verglichen. Zum Abschluss wird noch kurz auf performantere existierende Algorithmen eingegangen. Wie oben dargelegt entfernt unser Algorithmus pro Schleifendurchlauf im Mittel einen Breakpoint, damt ist die Anzahl der Schleifendurchläufe O(n). In jedem Schleifendurchlauf müssen zunächst die Strips bestimmt werden, was ebenso wie die Bestimmung der kleinsten / größten Elemente in linearer Laufzeit erfolgt. Die Durchführung des Reversals selbst erfolgt auch in linearer Laufzeit, damit ist der gesamte Algorithmus O(n²). Ein optimaler Algorithmus würde pro Reversal zwei Breakpoints entfernen, dies ist jedoch nur möglich, wenn man Reversals druchführt, welche auch innerhalb von Strips ansetzen, dies ist jedoch nicht ohne weiteres in polynomieller Laufzeit möglich. Der vorgestellte Algorithmus braucht im Vergleich zum möglichen Optimum also das 2-fache an Reversals. Der beste bisher bekannte Algorithmus für die Lösung des Problems (von Berman, Hannenhalli und Karpinski) benötigt jedoch nur das 1,375-fache der Vergleiche die der optimale Algorithmus benötigt.[1] Damit erzielt er zwar weitaus bessere Ergebnisse als der Algorithmus, welcher hier vorgestellt wurde, aber er beruht auf komplizierten Berechnungen, welche sich nicht im Rahmen eines Proseminars bearbeiten lassen. 5
6 Literaturverzeichnis [1] H.-J. Böckenhauer, D.Bongratz: Algorithmische Grundlagen der Bioinformatik - Modelle, Methoden und Komplexität, B.G. Teubner Verlag, 2003, Abschnitt 10.1und 10.2 [2] P. Pevzner: Computational Molecular Biology An Algorithmic Approach, MIT Press, 2000, Abschnitt 10.1 [3] M. Zvelebil, J.O. Baum: Understanding Bioinformatics, Garland Science, 2008, Abschnitt 8.1 6