Zu Abschnitt 2.8: BinPacking (Suchvariante) als stark NP-vollständiges Problem (Such-)Problem BinPacking Input: x = (a1 , . . . , an , b, `), alles natürliche Zahlen. Gesucht: Aufteilung der n Objekte mit Volumina a1 , . . . , an auf ` Behälter mit Größe b. Technisch: Eine Lösung für x ist eine Funktion % : {1, . . . , n} → {1, . . . , `} mit der Eigenschaft, dass für jedes j ∈ {1, . . . , `} gilt: X ai ≤ b. 1≤i≤n %(i)=j Wir wissen schon, dass BinPacking NP-vollständig ist, wobei das Problem Partition auf BinPacking reduziert wurde. Bei beiden Problemen handelt es sich um Zahlprobleme; man kann zeigen, ähnlich wie bei Rucksack∗ , dass Partition einen pseudopolynomiellen Algorithmus hat. Wiederum ähnlich hierzu kann man sich überlegen, dass BinPacking mit 2 Behältern (k = 2 fixiert) einen pseudopolynomiellen Algorithmus hat. Interessanterweise ist BinPacking selbst aber stark NP-vollständig. Hierfür wird eine ganz andere Reduktion benötigt. (Such-)Problem 3-PartiteMatching (3PM) Input: Mengen A, B, C mit |A| = |B| = |C| = n, Menge E ⊆ A × B × C. Gesucht: Ein 3-partites perfektes Matching“, das ist eine Menge M ⊆ E ” mit |M | = n derart, dass die ersten Komponenten der Elemente von M ganz A ergeben, die zweiten ganz B, die dritten ganz C. Technisch: (1) ∀a ∈ A ∃b ∈ B, c ∈ C : ∀b ∈ B ∃a ∈ A, c ∈ C : ∀c ∈ C ∃a ∈ A, b ∈ B : (a, b, c) ∈ M ; (a, b, c) ∈ M ; (a, b, c) ∈ M. Das Problem 3-PartiteMatching ist ein strukturelles Problem, kein Zahlproblem. Wir haben durch direkte Reduktion von 3-SAT bewiesen, dass es NP-vollständig ist (Satz 2.7.1). 1 Wir wollen nun zeigen: Satz 2.8.5 (Teil) 3PM ≤p BinPacking via (f, h), wobei die Reduktionsfunktion f die Eigenschaft hat, dass die größte Zahl, die in f (x) vorkommt, nicht größer als O(|f (x)|4 ) ist. (Mit Satz 2.8.4 folgt dann, dass BinPacking stark NP-vollständig ist.) Beweis: Gegeben sei eine Eingabe x für 3PM, mit folgenden Komponenten: A B C E = = = ⊆ {a1 , . . . , an } {b1 , . . . , bn } {c1 , . . . , cn } A×B×C (Männer) (Frauen) (Häuser) (Menge der kompatiblen Tripel) Wir konstruieren einen Input f (x) für BinPacking, der nicht allzu große Zahlen enhält, und für den gilt: (2) x ∈ 3PM ⇒ f (x) ∈ BinPacking. (Später geben wir eine polynomialzeitberechenbare Abbildung h an, die zu x und einer Lösung für f (x) eine Lösung für x liefert.) Für die Konstruktion von f (x) gehen wir so vor: Wir bringen die Kanten in eine beliebige, aber feste Anordnung E = (t1 , . . . , tm ) und bilden für jeden Eintrag ts = (ai , bj , ck ) in dieser Liste vier Tripel: B C ts = (ai , bj , ck ), tA s = (ai , bj , ck ), ts = (ai , bj , ck ), ts = (ai , bj , ck ). Die unterstrichenen Komponenten werden eventuell noch modifiziert, wie folgt: Wenn der Eintrag ai in t1 , . . . , ts−1 nicht vorkommt ( erstes Vorkom” 1 men“), schreiben wir tA s = (ai , bj , ck ). Analog gehen wir für bj und ck vor: erste Vorkommen von unterstrichenen Varianten werden mit einer hochgestellten 1 markiert. Diesen 4m Tripeln werden nun Volumina, also Zahlen, zugeordnet. In den Input f (x) für BinPacking gelangen natürlich nur diese 4m Zahlen sowie die Kapazität bx und die Binanzahl `x . Wir wählen eine Zahl K, die um einen genügend großen Faktor größer als n ist, zum Beispiel K = 100n. 2 Es sei ts = (ai , bj , ck ) ein Eintrag in E. Tripel ts = (ai , bj , ck ) erhält Volumen (3) ws = 8 + 10K 4 − iK − jK 2 − kK 3 . Das Tripel tA s erhält Volumen 1 + 10K 4 + iK, A (4) ws = 1 + 11K 4 + iK, 1 falls tA s = (ai , bj , ck ), falls tA s = (ai , bj , ck ). Man durchläuft also E = (t1 , . . . , tm ) von links nach rechts und schaut für jedes ai ∈ A nach, an welcher Stelle es zum ersten Mal in der Version ai erscheint. Dieses Tripel erhält dann den besonderen Wert (Summand 10K 4 ), die weiteren Vorkommen von ai führen zu dem anderen Wert (Summand 11K 4 ). Das Tripel tB s erhält Volumen 2 + 10K 4 + jK 2 , B (5) ws = 2 + 11K 4 + jK 2 , 1 falls tB s = (ai , bj , ck ), falls tB s = (ai , bj , ck ). Das Tripel tC s erhält Volumen 4 + 10K 4 + kK 3 , C (6) ws = 4 + 8K 4 + kK 3 , 1 falls tC s = (ai , bj , ck ), C falls ts = (ai , bj , ck ). Dies ergibt 4m Volumina. Nun setzen wir noch die Behältergröße auf bx = 15 + 40K 4 fest und die Behälter-Anzahl auf `x = m. Zusammen ergibt sich: A B C f (x) = (w1 , w1A , w1B , w1C , . . . , wm , wm , wm , wm , 40K 4 + 15, m). Wir müssen nun (2) beweisen. Um zu verstehen, wie mögliche Bepackungen aussehen, muss man sich zuerst klarmachen, dass der K 4 -Summand in den Volumina dominierend ist. (Weil K eine so große Zahl ist, ist jedes iK 3 um mehr als den Faktor 100 kleiner als K 4 .) Um einen Behälter mit Kapazität etwa 40K 4 zu füllen, könnten wir vier Tripel mit Volumen je etwa 10K 4 nehmen oder eines mit 10K 4 , zwei mit 11K 4 und eines mit 8K 4 . Lemma 1. Die Summe aller Volumina in f (x) ist m(15 + 40K 4 ). 3 Das bedeutet: wenn man die Tripel in f (x) in die m Behälter der Größe 15 + 40K 4 verpacken kann, dann geht das nur so, dass jeder Behälter bis zum Rand gefüllt ist. B C Beweis des Lemmas: Wir summieren die Beiträge für ts = (ai , bj , ck ), tA s ,ts ,ts . Das Resultat ist 15 + 40K 4 + xs · K 4 , wobei xs ∈ {−2, −1, 0, 1, 2} und der Wert von xs dadurch bestimmt wird, wieviele und welche der Komponenten ai , bj , ck in ts zum ersten Mal auftauchen (in E von links nach rechts gesehen). Nun passiert es genau n-mal, dass ein ai zum ersten Mal auftaucht (+1), ebenso für die bj (+1), ebenso für die ck (−2); daher ist die Summe aller xs gleich 0 und die Summe aller Volumina gleich m(15 + 40K 4 ). Nun kommen wir zum Beweis von (2). Sei x = (A, B, C, E) ein Input für 3PM und sei M ⊆ E ein perfektes 3partites Matching (mit den in (1) genannten Eigenschaften). Wir können sagen: M = {ts | s ∈ I} für eine Menge I ⊆ {1, . . . , m} mit n Elementen. Nun packen wir n Behälter mit Tripeln voll, die zu den ts , s ∈ I, gehören, und m − n mit den restlichen, wie folgt. In Behälter Nummer s kommt ts = (ai , bj , ck ), weiterhin das Tripel tA s0 = 1 (ai , bj 0 , ck0 ), in dem (in E von links gesehen) ai zum ersten Mal auftaucht, 1 das Tripel tB s00 = (ai00 , bj , ck00 ), in dem bj zum ersten Mal auftaucht, und das 1 Tripel tC s000 = (ai000 , bj 000 , ck ), in dem ck zum ersten Mal auftaucht. Wenn man die Volumina dieser vier Tripel addiert, erhält man nach der Definition ((3), (4), (5), (6)): ws + wsA0 + wsB00 + wsC000 = (8 + 10K 4 − iK − jK 2 − kK 3 ) + (1 + 10K 4 + iK) + (2 + 10K 4 + jK 2 ) + (4 + 10K 4 + kK 3 ) = 15 + 40K 4 = bx . In die restlichen m−n Behälter packen wir die verbleibenden 4(m−n) Tripel, und zwar folgendermaßen: Ein Tripel ts = (ai , bj , ck ), mit s ∈ / I, weiterhin A 0 0 irgendein Tripel ts0 = (ai , bj , ck ), in dem (in E von links gesehen) ai zum wiederholten Mal auftaucht, und irgendein Tripel tB `00 = (ai00 , bj , ck00 ), in dem bj zum wiederholten Mal auftaucht, und irgendein Tripel tC `000 = (ai000 , bj 000 , ck ), in 4 dem ck zum wiederholten Mal auftaucht. (Man macht sich klar, dass das genau aufgeht“, weil z. B. die Anzahl der Vorkommen von ai in einem puren“ ” ” Tripel (ai , bj , ck ) ebenso groß ist wie die Anzahl der Vorkommen von a1i und ai zusammen.) Wenn man die Volumina dieser vier Tripel zusammenzählt, bekommt man nach der Definition ((3), (4), (5), (6)): ws + wsA0 + wsB00 + wsC000 = (8 + 10K 4 − iK − jK 2 − kK 3 ) + (1 + 11K 4 + iK) + (2 + 11K 4 + jK 2 ) + (4 + 8K 4 + kK 3 ) = 15 + 40K 4 = bx . Damit sind die Volumina aus f (x) in m Behälter verpackt – jeder der Behälter ist exakt voll. (Siehe das Ende dieses Abschnittes für ein Beispiel.) Nun müssen wir zu gegebenem 3PM-Input x = (A, B, C, E) und einer Aufteilung % der Objekte in f (x) auf `x = m Behälter ein perfektes 3-partites Matching M = h(x, %) konstruieren. Weil K so groß ist, ist das Volumen jedes Objekts größer als 8K 4 + 3 = bx /5. Daher liegen in jedem Behälter höchstens 4 Objekte. Weil es aber genau 4m Objekte gibt, die auf m Behälter aufgeteilt sind, müssen in jedem Behälter genau 4 Objekte liegen. Nach Lemma 1 wissen wir, dass die Summe der Volumina der Objekte in jedem Behälter genau 15 + 40K 4 ist. Unser Ziel ist es zu zeigen, dass n von diesen Behältern Tripel (ai , bj , ck ) enthalten, die zusammen ein Matching bilden. Y Betrachten wir zunächst einen ganz beliebigen Behälter mit Tripeln tX s1 , ts2 , tZs3 , tUs4 , wobei X, Y, Z, U entweder A, B, C oder nichts“ sind. Wenn wir die ” Volumina modulo K nehmen, sehen wir, dass die 4 einzelnen Zahlen aus {1, 2, 4, 8}, die in wsX1 , wsY2 , wsZ3 , wsU4 vorkommen, sich zu 15 addieren müssen. Nun gibt es nur eine einzige Möglichkeit, 4 Summanden (auch mit Wiederholungen) aus {1, 2, 4, 8} auszuwählen, so dass die Summe 15 ist, nämlich jede der Zahlen 1, 2, 4, 8 einmal. Das heißt, dass in unserem Behälter 4 Objekte liegen müssen, die zu den 4 verschiedenen Arten gehören: e(A) ts = (ai , bj , ck ), tA s0 = (ai0 e(B) e(C) C , bj 0 , ck0 ), tB s00 = (ai00 , bj 00 , ck00 ), ts000 = (ai000 , bj 000 , ck000 ). Dabei sind die Markierungen e(A), e(B), e(C) jeweils 1 oder nichts“. Da die ” Terme in den Volumina, die Vielfache von K 3 , K 2 und K sind, die Anteile, 5 die von den K 4 -Termen her kommen, nicht ausgleichen können, gibt es nur zwei Fälle: B C 4 Typ 1: Der Beitrag von tA s0 , ts00 und ws000 ist jeweils 10K . Dann gehören alle diese Tripel zu ersten Vorkommen“, also ist e(A) = e(B) = e(C) = 1. ” B 4 C 4 Typ 2: Der Beitrag von tA s0 und ts00 ist jeweils 11K , der von ws000 ist 8K . Dann gehören alle drei Tripel zu wiederholten Vorkommen“, also sind e(A), ” e(B), e(C) alle nichts“. ” Offensichtlich gibt es n Behälter vom Typ 1 (weil es n verschiedene AObjekte, B-Objekte und C-Objekte gibt), und dann noch m − n Behälter vom Typ 2. Wir betrachten nun einen festen Behälter vom Typ 1, mit Objekten 1 1 B 1 C ts = (ai , bj , ck ), tA s0 = (ai0 , bj 0 , ck0 ), ts00 = (ai00 , bj 00 , ck00 ), ts000 = (ai000 , bj 000 , ck000 ). Wir haben die Gleichung ws + wsA0 + wsB00 + wsC000 = 15 + 40K 4 . Wenn wir auf beiden Seiten 15 + 40K 4 subtrahieren, ergibt sich (−iK − jK 2 − kK 3 ) + i0 K + j 00 K 2 + k 000 K 3 = 0, oder (i0 − i)K + (j 00 − j)K 2 + (k 000 − k)K 3 = 0. Weil K viel größer als jede der Differenzen (i0 − i) und (j 00 − j) ist, folgt daraus, dass k = k 000 , j = j 00 und i = i0 sein muss. In diesem Behälter vom Typ 1 sehen also das A-Tripel, das B-Tripel und das C-Tripel so aus: 1 1 B C 1 tA s0 = (ai , . . .), ts00 = (. . . , bj , . . .), ts000 = (. . . , ck ). Weil nun jedes der Objekte ai ∈ A, bj ∈ B, ck ∈ C in der Folge E genau einmal zum ersten Mal vorkommen kann, und in den n Behältern vom Typ 1 genau 3n solche erste Vorkommen“ vorliegen, kommt jedes Objekt aus ” A, B und C genau einmal im gewöhnlichen Tripel (ai , bj , ck ) in einem der n Behälter vom Typ 1 vor. Wenn wir also definieren: M := {(ai , bj , ck ) | (ai , bj , ck ) steht in einem Typ-1-Behälter}, dann bildet M ein perfektes 3-partites Matching zu E. 6 Beispiel für die Reduktion 3-PM ≤p BINPACKING (Suchvariante) A = {Axel, Alf, Arne}, B = {Bine, Babs, Bea}, C = {Haus, Villa, Zelt}. E = {(Axel, Bine, Haus), (Arne, Bea, Haus), (Axel, Babs, Villa), (Alf, Babs, Zelt), (Alf, Bine, Zelt)}. Die zu verpackenden Objekte, mit Indizes und Volumina: 10 Axel 11 Axel1 12 Axel 13 Axel Bine Bine Bine1 Bine Haus Haus Haus Haus1 1 1 1 1 1 1 1 1 1 1 1 1 8 + 10 · 3004 − 300 − 3002 − 3003 1 + 10 · 3004 + 300 2 + 10 · 3004 + 3002 4 + 10 · 3004 + 3003 20 Arne 21 Arne1 22 Arne 23 Arne Bea Bea Bea1 Bea Haus Haus Haus Haus 3 3 1 3 3 1 3 3 1 3 3 1 8 + 10 · 3004 − 3 · 300 − 3 · 3002 − 3003 1 + 10 · 3004 + 3 · 300 2 + 10 · 3004 + 3 · 3002 4 + 8 · 3004 + 3003 30 Axel 31 Axel 32 Axel 33 Axel Babs Babs Babs1 Babs Villa Villa Villa Villa1 1 2 2 1 2 2 1 2 2 1 2 2 8 + 10 · 3004 − 300 − 2 · 3002 − 2 · 3003 1 + 11 · 3004 + 300 2 + 10 · 3004 + 2 · 3002 4 + 10 · 3004 + 2 · 3003 40 Alf 41 Alf1 42 Alf 43 Alf Babs Babs Babs Babs Zelt Zelt Zelt Zelt1 2 2 3 2 2 3 2 2 3 2 2 3 8 + 10 · 3004 − 2 · 300 − 2 · 3002 − 3 · 3003 1 + 10 · 3004 + 2 · 300 2 + 11 · 3004 + 2 · 3002 4 + 10 · 3004 + 3 · 3003 50 Alf 51 Alf 52 Alf 53 Alf Bine Bine Bine Bine Zelt Zelt Zelt Zelt 2 1 3 2 1 3 2 1 3 2 1 3 8 + 10 · 3004 − 2 · 300 − 3002 − 3 · 3003 1 + 11 · 3004 + 2 · 300 2 + 11 · 3004 + 3002 4 + 8 · 3004 + 3 · 3003 Ein perfektes Matching in E ist M = {(Arne, Bea, Haus), (Axel, Babs, Villa), (Alf, Bine, Zelt)}. Die entsprechenden Behälter mit Typ-I-Füllung enthalten folgende Objekte: (20, 21, 22, 13), (30, 11, 32, 33), (50, 41, 12, 43). Die verbleibenden Behälter mit Typ-II-Füllung enthalten folgende Objekte: (10, 31, 52, 23), (40, 51, 42, 53). 7