Tutorium zur theoretischen Informatik Übungsblatt 5 (2006-12-20) Man bringt einen Ingenieur am schnellsten dazu, ein Problem zu lösen, wenn man behauptet, das Problem sei unlösbar. Kein Ingenieur kann ein unlösbares Problem sich selbst überlassen, bis es jemand anderer löst. Weder Krankheit noch Ablenkung können den Ingenieur von dem Problem abbringen. Eine solche Herausforderung wird schnell zu einem persönlichen Kampf zwischen dem Ingenieur und den Naturgesetzen. (Scott Adams in "Das Dilbert-Prinzip.", Kapitel 14: "Von Ingenieuren, Wissenschaftlern, Programmierern und anderen seltsamen Menschen") Inhalt 1. 2. 3. 4. 5. 6. 7. Empfehlenswerte Referenzen Aufgabe 1 – Polynom-warm-up How To: NP-Probleme reduzieren Aufgabe 2 – Hamilton-Pfad ≤p Hamilton-Kreis Aufgabe 3 – Hamilton-Kreis ≤p Travelling Salesman Aufgabe 4 – Rucksack ≤p Partition Aufgaben to go Empfehlenswerte Referenzen ● ● ● ● http://www.claymath.org/millennium/ - für alle, die mal schnell nebenher etwas Geld verdienen wollen: auf den mathematisch stichhaltigen Beweis dass NP=P, bzw NP≠P sind 1.000.000 $ ausgesetzt. http://de.wikipedia.org/wiki/Komplexit%C3%A4tsklasse_NP - der obligatorische Wikipedia-Link zur Klasse NP http://en.wikipedia.org/wiki/List_of_NP-complete_problems – dieser englischsprachige Wiki-Link führt jede Menge NP-Probleme auf Uwe Schöning "Theoretische Informatik – kurzgefasst" - ab Seite 163 werden 10 gängige NP-Probleme samt Reduktionen aufgeführt Aufgabe 1 – Polynom-warm-up Welche dieser Funktionen sind Polynome und welche nicht: a(n) = n f (n) = nn + n2 + n + 2 2 b(n) = n + n + 2006 g(n) = n! c(n) = n32 h(n) = log7(n) n d(n) = 3 i (n) = ld(n) n e(n) = nn j (n) = 42 Lösung Die Funktionen a, b, c und j. Die anderen entsprechen nicht der Form n P x =∑ a i x =a n x a n−1 x i=0 i n n −1 2 ...a 2 x a 1 xa 0 Anmerkung: hier ist n bekanntlich der Grad des Polynoms (= höchste auftretende Potenz) und ai jeweils eine Konstante abhängig vom Index i. ai kann auch 0 sein – dann gibt es das jeweilige Summenglied im Polynom eben nicht. Seite 1 / 7 Tutorium zur theoretischen Informatik Übungsblatt 5 (2006-12-20) How To: NP-Probleme reduzieren Die Aufgabenstellung lautet in der Regel, dass für ein gegebenes NP-vollständiges Problem A eine polynomiale Reduktion auf ein anderes Problem B anzugeben ist – wobei man nicht davon ausgehen darf, dass B NP-vollständig ist: das ist durch die Reduktion ja zu zeigen! Formal drückt man die polynomiale Reduktion so aus: A ≤ p B Um sich vor Augen zu halten, was dabei abgeht, kann man sich vorstellen, A sei eine Black Box, die einen bestimmten Input erhält, im Inneren damit etwas anstellt und am Ende entweder eine Lösung ausgibt oder sagt, dass es keine Lösung gibt. Die Reduktion von A auf B ist gegeben, wenn man darstellen kann, wie diese Black Box funktioniert, wenn im Inneren B zur Lösungsermittlung des Problems A für eine beliebige Eingabe verwendet wird. Graphisch sieht das z. B. so aus: Die polynomiale Reduktion ist also zunächst mal eine Funktion f, das die Elemente des NP-vollständigen Problems A auf die Elemente des Problems B "mappt" – also: ihnen eine Bedeutung zuweist, die im Rahmen von B sinnvoll ist. Falls für den Input I (in der Grafik mit "Instanz" des Problems A bezeichnet) nach Anwendung von f eine Lösung S durch das Problem B gefunden wird, muss diese Lösung noch in den "Bedeutungsbereich" des Problems A zurücktransformiert werden. Dies wird durch die Funktion h bewerkstelligt. Damit die Reduktion polynomial ist, muss das Wachstum von f und h jeweils durch ein Polynom darstellbar sein, also z. B. durch O(1), O(n), O(n³), O(n777 + n + 23), ... Seite 2 / 7 Tutorium zur theoretischen Informatik Übungsblatt 5 (2006-12-20) Aufgabe 2 – Hamilton-Pfad ≤p Hamilton-Kreis Problem Hamilton-Pfad gegeben: ein Graph G=(V, E), sowie Knoten s, t mit s ≠ t gesucht: Pfad von s nach t, so dass jeder Knoten in V genau 1x besucht wird. Problem Hamilton-Kreis gegeben: ein vollständiger Graph G=(V,E) gesucht: eine Rundreise R, so dass jeder Knoten in V in R genau 1x enthalten ist. Gib Hamiton-Pfad ≤p Hamilton-Kreis an. Lösung Ham.-Pfad ist also durch den Ham.-Kreis darzustellen. Die Visualisierung der Lösung als Black Box: Es ist also für das Hamilton-Pfad-Problem eine Lösung auffindbar, genau dann, wenn für das Hamilton-Kreis-Problem eine Lösung auffindbar ist. Das allein reicht aber noch nicht: Wichtig ist auch, dass f und h mit polynomialem Aufwand durchgeführt werden können. Dies ist hier gegeben, denn sowohl das Hinzufügen eines Knotens und 2er Kanten, als auch deren Entfernung können in O(1) getan werden. Seite 3 / 7 Tutorium zur theoretischen Informatik Übungsblatt 5 (2006-12-20) Aufgabe 3 – Hamilton-Kreis ≤p Travelling Salesman Problem Travelling Salesman gegeben: Graph G=(V, E), Gewichtsfunktion δ(e ∈ E), Budget n ∈ ℕ gesucht: Rundreise R, die alle v ∈ V enthält und für die gilt: ∑ e∈E n Kante e in R Gib Hamilton-Kreis ≤p Travelling Salesman an. Lösung Die Idee ist, den Eingabe-Graphen derart zu einem vollständigen Graphen (also ein Graph, bei dem zwischen allen Knoten Kanten existieren) mit Kantengewichten zu erweitern, dass nur die ursprünglich vorhandenen Kanten Gewichte haben, die für eine Lösungsrundreise verwendet werden können. Alle neu hinzugefügten Kanten erhalten Gewichte, die so groß sind, dass jede von ihnen "das Budget n sprengen" würde, würde die Kante zur Lösung hinzugenommen werden. Daher ist klar, dass eine Lösung (wenn es eine gibt) ausschließlich aus Kanten von G bestehen muss. "id" steht hier für die identische Abbildung, die ihre Eingabe 1:1 wieder ausgibt. Die Funktion f "mapped" ihre Eingabe G wie folgt auf G': ● Die Knoten V werden ohne Änderung nach G' übernommen, denn jede gefundene gültige Rundreise soll ja jeden dieser Knoten je 1x enthalten. ● Die Menge der Kanten wird erweitert, so dass G' ein vollständiger Graph ist: ○ ∀ v1, v2 ∈ V mit v1 ≠ v2 wird gesetzt: E' = E' ∪ {Kante v1v2} ● Die Gewichtsfunktion gibt aus: ○ δ(e) = 1, wenn die Kante e auch in der Eingabe G existiert Seite 4 / 7 Tutorium zur theoretischen Informatik Übungsblatt 5 (2006-12-20) δ(e)= 1 + α, mit α > 0 wenn e nur in G' und nicht in G existiert. Das Budget n setzen wir auf die Anzahl der Knoten: n ≔ |V| Mit jeder Kante, die neu zur Lösungsrundreise R hinzugenommen wird, wird auch ein neuer Knoten hinzugenommen. Daher ist klar, dass die Anzahl der Kanten in R genau gleich der Anzahl der Knoten in R ist. Da das Budget so "knapp" bemessen wurde und alle Knoten besucht werden müssen, ist klar, dass für die Lösungsreise nur Kanten in Frage kommen, die es auch in G gibt. Sobald eine Kante mit Gewicht gleich 1 + α in die Rundreise aufgenommen wird, wird das Budget überschritten. Daher kann es nur dann eine Lösung für das Problem Hamilton-Kreis geben, wenn es auch eine Lösung für TSP gibt. h=id ist mit konstantem oder höchstens linearem Aufwand machbar (Ansichtssache) und liegt somit auf jeden Fall aber in der Klasse von polynomialem Aufwand. Zur Ermittlung des Aufwands von f müssen wir die einzelnen Schritte "durchgehen": ● Übernahme der Knotenmenge ohne Änderung: konstanter oder linearer Aufwand, also auch O(1) oder O(n) ● Erweitern zu vollständigem Graph: ist mit quadratischem Aufwand machbar ● Definition der Gewichtsfunktion: kann in O(n) realisiert werden ● Budget setzen: O(n), da die Anzahl der Knoten zusammengezählt werden muss, bzw. O(1), wenn man sie schon weiss Auf jeden Fall hat f polynomialen Aufwand. ○ ● Seite 5 / 7 Tutorium zur theoretischen Informatik Übungsblatt 5 (2006-12-20) Aufgabe 4 – Rucksack ≤p Partition Problem Rucksack gegeben: Zahlen a1, ..., ai, b ∈ ℕ gesucht: gibt es T ⊆ {1, ..., i} mit ∑ at =b ? Problem Partition gegeben: a1, ..., ai ∈ ℕ gesucht: gibt es T ⊆ {1, ..., i} mit ∑ at =∑ a t ? t ∈T t ∈T t ∉T Gib Rucksack ≤p Partition an. Lösung (Angelehnt an den Reduktionsbeweis im Buch von Uwe Schöning, s. o.) Idee: die "Rucksackgröße" b wird wie eine weitere Zahl der "in den Rucksack zu füllenden" Zahlenmenge behandelt. Dann muss man noch irgendwie dafür sorgen, dass die Zahlen aq, ..., ap einer Teilmenge der Partition zusammengezählt b ergeben, wenn b in dieser Zahlenmenge nicht enthalten ist. Die Funktion f wird also so definiert, dass zur Eingabe {a1, ..., ai} die Zahlen b+1 und i M–b+1 hinzugefügt werden, wobei M =∑ a k ist. Die Zahlen M–b+1 und b+1 können k=1 nicht beide in derselben Partitions-Teilmenge sein, da alle anderen Zahlen zusammengezählt dem Wert M-b+1 + b+1 = M+2 nicht mehr "die Waage halten" können. Um die Zahlenmenge {a1, ..., ai, M-b+1, b} in 2 partitionierende Teilmengen aufzuteilen, muss M-b+1 in der einen und b in der anderen Teilmenge sein. Wenn es eine Lösung für die Eingabe gibt, dann kann man sie beispielsweise so Seite 6 / 7 Tutorium zur theoretischen Informatik Übungsblatt 5 (2006-12-20) darstellen (wobei die Indizes evtl. anders lauten müssen) für eine Eingabe von 10 Zahlenwerten ai (die Feldlänge soll die jeweilige Größe des Wertes darstellen): a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 M a1 a2 a3 M–b a4 a5 b a6 a7 a8 1 a9 a10 1 Wie man sieht, gilt hier: b = a6 + a7 + a8 + a9 + a10 Damit ist auch schon gesagt, wie die Funktion h aussieht, die aus einer Lösung für das Problem Partition eine Lösung für Rucksack generiert: h gibt entfernt aus derjenigen Teilmenge, in der sich M-b+1 befindet, eben diese Zahl und gibt alle anderen Zahlen dieser Menge zurück. Sowohl f, als auch h lassen sich mit polynomialem Aufwand realisieren; Rucksack hat genau dann eine Lösung, wenn Partition eine Lösung hat: somit ist Rucksack auf Partition reduziert. Aufgaben to go 1. Lies und verstehe mindestens 10 Reduktionsbeweise, z. B. von den o. g. Referenzen. 2. Gib Bin Packing ≤p Minimale Prozessdauer an. Problem Bin Packing Problem Minimale Prozessdauer gegeben: eine Behältergröße b ∈ ℕ, ein gegeben: n Prozesse jeweils mit Bearbeitungsdauer pi ∈ ℕ+, Wert k ∈ ℕ+ und i ∈ {1, .., n} und ein Wert m ∈ ℕ+ "Objekte" a1, ..., an jeweils mit Größe ≤ b gesucht: gibt es einen Belegungsplan für m identische parallel arbeitende gesucht: gibt es eine Verteilung der n Prozessoren, so dass die Objekte auf k Behälter ohne, Bearbeitungsdauer minimal ist dass die Behältergröße und alle Prozesse abgearbeitet überschritten wird? werden? Seite 7 / 7