Approximationsalgorithmen 9. Vorlesung Joachim Spoerhase Lehrstuhl für Informatik I Alexander Wolff Wintersemester 2015/16 Approximationsschema Sei Π ein Optimierungsproblem. Ein Algorithmus A heißt Polynomielles Approximationsschema (PTAS), wenn dieser für jede Eingabe (I, ) mit I ∈ DΠ und > 0 eine Lösung s ∈ SΠ (I) ausgibt, die Folgendes erfüllt: • objΠ (I, s) ≤ (1 + ) · OPT, falls Π Min-Problem, • objΠ (I, s) ≥ (1 − ) · OPT, falls Π Max-Problem. Die Laufzeit von A ist polynomiell in |I| für jedes feste > 0. Approximationsschema Sei Π ein Optimierungsproblem. Ein Algorithmus A heißt Polynomielles Approximationsschema (PTAS), wenn dieser für jede Eingabe (I, ) mit I ∈ DΠ und > 0 eine Lösung s ∈ SΠ (I) ausgibt, die Folgendes erfüllt: • objΠ (I, s) ≤ (1 + ) · OPT, falls Π Min-Problem, • objΠ (I, s) ≥ (1 − ) · OPT, falls Π Max-Problem. Die Laufzeit von A ist polynomiell in |I| für jedes feste > 0. A heißt vollpolynomielles Approximationsschema (FPTAS), falls seine Laufzeit polynomiell in |I| und 1/ ist. Approximationsschema Sei Π ein Optimierungsproblem. Ein Algorithmus A heißt Polynomielles Approximationsschema (PTAS), wenn dieser für jede Eingabe (I, ) mit I ∈ DΠ und > 0 eine Lösung s ∈ SΠ (I) ausgibt, die Folgendes erfüllt: • objΠ (I, s) ≤ (1 + ) · OPT, falls Π Min-Problem, • objΠ (I, s) ≥ (1 − ) · OPT, falls Π Max-Problem. Die Laufzeit von A ist polynomiell in |I| für jedes feste > 0. A heißt vollpolynomielles Approximationsschema (FPTAS), falls seine Laufzeit polynomiell in |I| und 1/ ist. Beispiele Laufzeiten • O(n1/ ) Polynomielles Approximationsschema • O(21/ n4 ) Polynomielles Approximationsschema • O(n3 /2 ) Vollpolynomielles Approximationsschema Rucksackproblem Gegeben sei eine Menge S = {a1 , . . . , an } von Objekten. Für jedes Objekt ai , i = 1, . . . , n ist eine Größe size(ai ) ∈ N+ und ein Profit profit(ai ) ∈ N+ spezifiziert. Ferner ist eine Rucksack-Kapazität B ∈ N+ vorgegeben. Gesucht ist eine Teilmenge von Objekten deren Gesamtgröße höchstens B und deren Gesamtprofit maximal ist. Rucksackproblem Gegeben sei eine Menge S = {a1 , . . . , an } von Objekten. Für jedes Objekt ai , i = 1, . . . , n ist eine Größe size(ai ) ∈ N+ und ein Profit profit(ai ) ∈ N+ spezifiziert. Ferner ist eine Rucksack-Kapazität B ∈ N+ vorgegeben. Gesucht ist eine Teilmenge von Objekten deren Gesamtgröße höchstens B und deren Gesamtprofit maximal ist. NP-schwer Pseudopolynomieller Algorithmus Sei Π ein Optimierungsproblem dessen Instanzen durch Objekte (z.B. Mengen oder Graphen) und Zahlen (z.B. Kosten, Gewichte, Profite) repräsentiert sind. Mit |I| bezeichnen wir (wie bisher) die Größe einer Instanz I ∈ DΠ , wobei alle Zahlen in I binär kodiert sind. Mit |Iu | bezeichnen wir die Größe von I, wenn alle Zahlen in I unär kodiert sind. Pseudopolynomieller Algorithmus Sei Π ein Optimierungsproblem dessen Instanzen durch Objekte (z.B. Mengen oder Graphen) und Zahlen (z.B. Kosten, Gewichte, Profite) repräsentiert sind. Mit |I| bezeichnen wir (wie bisher) die Größe einer Instanz I ∈ DΠ , wobei alle Zahlen in I binär kodiert sind. Mit |Iu | bezeichnen wir die Größe von I, wenn alle Zahlen in I unär kodiert sind. • Die Laufzeit eines polynomiellen Algorithmus für Π ist polynomiell in |I|. Pseudopolynomieller Algorithmus Sei Π ein Optimierungsproblem dessen Instanzen durch Objekte (z.B. Mengen oder Graphen) und Zahlen (z.B. Kosten, Gewichte, Profite) repräsentiert sind. Mit |I| bezeichnen wir (wie bisher) die Größe einer Instanz I ∈ DΠ , wobei alle Zahlen in I binär kodiert sind. Mit |Iu | bezeichnen wir die Größe von I, wenn alle Zahlen in I unär kodiert sind. • Die Laufzeit eines polynomiellen Algorithmus für Π ist polynomiell in |I|. • Die Laufzeit eines pseudo-polynomiellen Algorithmus ist polynomiell in |Iu | Pseudopolynomieller Algorithmus Sei Π ein Optimierungsproblem dessen Instanzen durch Objekte (z.B. Mengen oder Graphen) und Zahlen (z.B. Kosten, Gewichte, Profite) repräsentiert sind. Mit |I| bezeichnen wir (wie bisher) die Größe einer Instanz I ∈ DΠ , wobei alle Zahlen in I binär kodiert sind. Mit |Iu | bezeichnen wir die Größe von I, wenn alle Zahlen in I unär kodiert sind. • Die Laufzeit eines polynomiellen Algorithmus für Π ist polynomiell in |I|. • Die Laufzeit eines pseudo-polynomiellen Algorithmus ist polynomiell in |Iu | • Laufzeit eines pseudo-polynomiellen Algorithmus nicht immer polynomiell in |I| Pseudopolynomieller Alg. für Rucksack • P := maxi profit(ai ) OPT ≤ nP Pseudopolynomieller Alg. für Rucksack • P := maxi profit(ai ) OPT ≤ nP • Für jedes i = 1, . . . , n und jedes p ∈ {1, . . . , nP } sei Si,p eine Teilmenge von {a1 , . . . , ai } deren Profit genau p ist und deren Gesamtgröße minimal unter allen Teilmengen mit den geforderten Eigeschaften ist. Pseudopolynomieller Alg. für Rucksack • P := maxi profit(ai ) OPT ≤ nP • Für jedes i = 1, . . . , n und jedes p ∈ {1, . . . , nP } sei Si,p eine Teilmenge von {a1 , . . . , ai } deren Profit genau p ist und deren Gesamtgröße minimal unter allen Teilmengen mit den geforderten Eigeschaften ist. • A(i, p) bezeichne Gesamtgröße der Menge Si,p (setzen A(i, p) = ∞ falls keine solche Menge existiert). Pseudopolynomieller Alg. für Rucksack • P := maxi profit(ai ) OPT ≤ nP • Für jedes i = 1, . . . , n und jedes p ∈ {1, . . . , nP } sei Si,p eine Teilmenge von {a1 , . . . , ai } deren Profit genau p ist und deren Gesamtgröße minimal unter allen Teilmengen mit den geforderten Eigeschaften ist. • A(i, p) bezeichne Gesamtgröße der Menge Si,p (setzen A(i, p) = ∞ falls keine solche Menge existiert). • Falls alle A(i, p) bekannt ergibt sich OPT durch max{ p | A(n, p) ≤ B } Pseudopolynomieller Alg. für Rucksack • A(1, p) bekannt für alle p ∈ {0, . . . , nP } Pseudopolynomieller Alg. für Rucksack • A(1, p) bekannt für alle p ∈ {0, . . . , nP } • setzen A(i, p) := ∞ für p < 0 Pseudopolynomieller Alg. für Rucksack • A(1, p) bekannt für alle p ∈ {0, . . . , nP } • setzen A(i, p) := ∞ für p < 0 • A(i + 1, p) = min{A(i, p), size(ai+1 ) + A(i, p − profit(ai+1 )} Pseudopolynomieller Alg. für Rucksack • A(1, p) bekannt für alle p ∈ {0, . . . , nP } • setzen A(i, p) := ∞ für p < 0 • A(i + 1, p) = min{A(i, p), size(ai+1 ) + A(i, p − profit(ai+1 )} • Alle A(i, p)-Werte und somit OPT lassen sich in O(n2 P ) Zeit ermitteln Pseudopolynomieller Alg. für Rucksack • A(1, p) bekannt für alle p ∈ {0, . . . , nP } • setzen A(i, p) := ∞ für p < 0 • A(i + 1, p) = min{A(i, p), size(ai+1 ) + A(i, p − profit(ai+1 )} • Alle A(i, p)-Werte und somit OPT lassen sich in O(n2 P ) Zeit ermitteln Rucksack lässt sich in pseudopolynomieller Zeit O(n2 P ) optimal lösen. FPTAS für Rucksack durch Skalierung • Laufzeit O(n2 P ) polynomiell in n, wenn P polynomiell in n FPTAS für Rucksack durch Skalierung • Laufzeit O(n2 P ) polynomiell in n, wenn P polynomiell in n • FPTAS-Idee: Skaliere Profite auf polynomielle Größe (je nach geforderter Fehlerschranke ). FPTAS für Rucksack durch Skalierung RucksackFPTAS(I,) K ← P n j profit0 (ai ) := profit(ai ) K k ermittle optimale Lösung S 0 für I bezüglich profit0 (·) return S 0 FPTAS für Rucksack durch Skalierung RucksackFPTAS(I,) K ← P n j profit0 (ai ) := profit(ai ) K k ermittle optimale Lösung S 0 für I bezüglich profit0 (·) return S 0 Lemma Die Lösung S 0 erfüllt profit(S 0 ) ≥ (1 − ) · OPT . FPTAS für Rucksack durch Skalierung RucksackFPTAS(I,) K ← P n j profit0 (ai ) := profit(ai ) K k ermittle optimale Lösung S 0 für I bezüglich profit0 (·) return S 0 Lemma Die Lösung S 0 erfüllt profit(S 0 ) ≥ (1 − ) · OPT . Satz 7.1 RucksackFPTAS ist ein FPTAS für Rucksack mit Laufzeit O(n3 /). Starke NP-Schwere Ein Optimierungsproblem heißt stark NP-schwer, wenn es auch mit unärkodierten Zahlen NP-schwer bleibt. Satz 7.2 Ein stark NP-schweres Problem besitzt keinen pseudopolynomiellen Algorithmus außer P = NP. FPTAS und pseudopolynomielle Algorithmen Satz 7.3 Sei p ein Polynom und Π ein NP-schweres Min-Problem mit ganzzahliger Zielfunktion und OPT(I) < p(|Iu |) für alle Instanzen I von Π. Wenn Π ein FPTAS besitzt, dann gibt es auch einen pseudopolynomiellen Algorithmus für Π. FPTAS und starke NP-Schwere Korollar Sei Π ein NP-schweres Optimierungsproblem, das die Restriktionen von Satz 7.3 erfüllt. Wenn Π stark NP-schwer ist, dann gibt es keinen FPTAS für Π außer P = NP.