¨Ubungen zur Algorithmischen Bioinformatik I Blatt 9 Abgabetermin

Werbung
Institut für Informatik
Sommersemester 2009
Praktische Informatik und Bioinformatik
Prof. Dr. Ralf Zimmer
Dr. Caroline Friedel, Dr. Orland Gonzalez, Lukas Windhager
Übungen zur Algorithmischen Bioinformatik I
Blatt 9
Abgabetermin: Dienstag, 07.07.2009, 10 ct
1. Aufgabe (Einfache Reduktionen):
Um das Prinzip der Reduktion weiter einzuüben, zeigen Sie, dass folgende Probleme NP vollständig
sind. Zeigen Sie dazu, dass gegebene Lösungen in polynomieller Zeit überprüft werden können und
dass ein bekannt NP vollständiges Problem auf das neue Problem reduziert werden kann. D.h.
insbesondere, dass eine Probleminstanz eines bekannt NP vollständigen Problems in polynomieller
Zeit in eine Instanz des neuen Problems überführt werden kann. Lösungen sind hier jeweils Mengen
von Mengen. Die Instanzgröße entspricht der Anzahl der gegebenen Mengen.
(a) X3C (Exact Cover by 3-Sets): Eine Menge X mit |X| = 3q und eine Menge C von 3elementigen Teilmengen von X seien gegeben. Gibts es ein C 0 ⊆ C, das X exakt überdeckt?
D.h gibt es eine Teilmenge C 0 von C, sodass jedes Element von X in genau einer Menge aus
C 0 vorkommt? (Hinweis: 3DM ist NP vollständig.)
(b) Set Packing: Eine Menge C von endlichen Mengen und eine positive Integerzahl K ≤ |C|
seien gegeben. Enthält C zumindest K gegenseitig disjunkte Mengen?
2. Aufgabe (Brückensuche):
Eine Kante in einem zusammenhängenden, ungerichteten Graphen heißt Brücke, wenn das Entfernen dieser Kante den Graphen in zwei Teile zerfallen läßt. Entwerfen Sie einen möglichst effizienten
Algorithmus, der zu einem gegebenen Graphen alle Brücken ermittelt. Analysieren Sie die Laufzeit
Ihres Algorithmus. Die Instanzgröße ist die Anzahl der Knoten im Graphen.
Hinweis: Eine einfache mögliche Lösung beruht auf Spannbäumen. Eine effizientere Lösung beruht
auf Tiefensuche. Hierbei sollte man besonderes Augenmerk auf die Schritte/Zeitpunkte legen,an
denen man Knoten bei der Tiefensuche erstmalig erreicht.
Achtung: Algorithmen, die “alle (möglichen) Pfade suchen, die Y erfüllen ” oder “alle X auf Y
testen” haben oft exponentielle Laufzeit. Überprüfen Sie ihren Algorithmus daraufhin und zeigen
Sie gegebenenfalls, warum in Ihrem Fall die Laufzeit doch nur polynomiell (oder niedriger) ist.
1
3. Aufgabe (Original PARTITION):
Implementieren Sie den pseudo Polynomialzeit Algorithmus für das PARTITION Problem so wie
in der Vorlesung angegeben. D.h. erzeugen sie eine Tabelle mit Einträgen t(i, j) : i ∈ (1, . . . , n), j ∈
(1, . . . , B2 ) mithilfe von dynamischer Programmierung. Das Programm soll TRUE zurückgeben genau dann, wenn eine Partition möglich ist. Ansonsten FALSE. Kommandozeilenparameter soll der
Pfad zu einer Datei sein. Die Datei enthält pro Zeile eine positive ganze Zahl, die eines der Gewichte
angibt.
Testen Sie ihr Programm mit den gegebenen Beispieldateien. Die Gewichte in bigweights.txt dürften
von ihrem Programm nicht partitioniert werden können. Stellen Sie die Ursache fest und geben sie
eine Erklärung. Die Aussage “Weil Java eine Fehlermeldung bringt” reicht nicht aus.
Hinweis: Benutzen Sie Double.parseDouble(String s), um Ausdrücke wie 10E5 als Zahl einzulesen.
4. Aufgabe (Verbesserte(?) PARTITION):
Verbessern Sie Ihre Implementierung des pseudo Polynomialzeit Algorithmus derart, dass auch
bigweights.txt oder ähnliche Instanzen partitioniert werden können. Möglicherweise muss nicht die
vollständige t(i, j) Matrix gespeichtert werden.
Testen Sie ihr Programm mit den gegebenen Beispieldateien. Die Gewichte in manyweights.txt
dürften von ihrem Programm nicht partitioniert werden können. Stellen Sie die Ursache fest und
geben sie eine Erklärung. Die Aussage “Weil Java eine Fehlermeldung bringt” reicht nicht aus.
2
Herunterladen