Algorithmik für schwere Probleme Departement Informatik Prof. Dr. Juraj Hromkovič Dr. Hans-Joachim Böckenhauer Dr. Richard Královič http://www.ita.inf.ethz.ch/alscpr17 Lösungsvorschläge – Blatt 5 Zürich, 28. März 2017 Lösung zu Aufgabe 7 (a) Wenn für zwei Bags Xi und Xj gilt, dass Xi ⊆ Xj , dann gilt auch Xi ⊆ Xk für alle Knoten Xk auf dem Pfad von Xi nach Xj . Folglich ist eine Baumzerlegung genau dann klein, wenn für jede Kante {Xi , Xj } in T gilt, dass Xi 6⊆ Xj und Xj 6⊆ Xi . Also genügt es, alle Kanten {Xi , Xj } einer Baumzerlegung zu inspizieren und diejenigen, welche die Bedingung für eine kleine Baumzerlegung nicht erfüllen, zu kontrahieren, d. h. durch einen neuen Knoten Xij zu ersetzen mit Xij = Xi ∪ Xj . Es ist offensichtlich, dass dies in Linearzeit (bezüglich |V (T )|) möglich ist. (b) Die Baumzerlegung hat Weite k, also hat jede Bag höchstens Grösse k + 1. Ein Algorithmus muss jede mögliche 3-Färbung dieser Menge betrachten und überprüfen, ob sie gültig ist. Es gibt für eine Knotenmenge der Kardinalität höchstens k + 1 höchstens 3k+1 viele verschiedene 3-Färbungen. Die Überprüfung, ob eine 3-Färbung gültig ist, kann mit einer geeigneten Datenstruktur (z. B. einer Adjazenzliste) in Zeit k 2 erfolgen. Die Gesamtlaufzeit des Algorithmus pro Bag ist somit in O(3k+1 · k 2 ). (c) Wir beweisen die Aussage per Induktion über |V |. Für |V | = 1 gilt sie offensichtlich: Eine kleine Baumzerlegung eines Graphen mit einem Knoten v enthält genau eine Bag {v}. Die Aussage gelte nun also für |V | − 1. Wir nehmen an, sie gilt nicht für |V | und betrachten o. B. d. A. eine beliebige kleine Baumzerlegung der Grösse |V | + 1. Sei X ein Blatt in dieser Baumzerlegung. Wir beobachten, dass in X mindestens ein Knoten vorkommt, der sonst in keiner Bag vorkommt. (Andernfalls würden alle Knoten in X auch in ihrer Nachbar-Bag vorkommen, und es würde sich nicht um eine kleine Baumzerlegung handeln.) Wir nehmen o. B. d. A. an, dass es genau einen solchen Knoten v in X gibt. Durch Entfernen von X und der adjazenten Kante entsteht eine kleine Baumzerlegung für den Graphen G[V − {v}] der Grösse |V |, was jedoch ein Widerspruch zur Annahme ist, dass die Aussage für |V | − 1 gilt. (d) Für jedes Blatt Xi in T gilt offensichtlich Extcol(Xi ) = Col(Xi ). Für einen beliebigen inneren Knoten X nehmen wir an, Extcol(X1 ), . . . , Extcol(Xm ) wurden bereits berechnet, wobei X1 , . . . , Xm die Kinder von X sind. Dann besteht Extcol(X) aus allen Färbungen c ∈ Col(X), so dass für jedes Kind Xi eine Färbung ci ∈ Col(Xi ) besteht und c und ci übereinstimmen für alle Knoten in X ∩ Xi . Ein Algorithmus muss folglich für jede mögliche Kombination einer Färbung c ∈ Col(X) und einer Färbung ci ∈ Col(Xi ) überprüfen, ob sie für alle Knoten in X ∩ Xi übereinstimmt. Offensichtlich gilt |Extcol(Xi )| ≤ |Col(Xi )| ≤ 3k+1 für jede Bag Xi . Somit gibt es (3k+1 )2 = 32(k+1) mögliche Kombinationen von Färbungen. Die Überprüfung, ob c und ci auf allen Knoten in X ∩Xi übereinstimmen, benötigt höchstens Zeit 2(k +1). Somit ist die Gesamtlaufzeit des Algorithmus pro Kante in O(32(k+1) 2(k + 1)) = O(32k · k). Der Algorithmus wird auf jeder Kante genau einmal ausgeführt (nämlich für den jeweiligen Elternknoten), insgesamt ist seine Laufzeit also in O(|E(T )| · 32k · k). Wir gehen davon aus, dass die betrachtete Baumzerlegung klein ist, also gilt gemäss Aufgabenteil (c) |E(T )| = |V (T )| − 1 ≤ |V | − 1. Die Laufzeit des Algorithmus ist somit in O(|V | · 32k · k). Lösung zu Aufgabe 8 Wir betrachten das (l × l)-Gitter Gl×l = (V, E) aus der Aufgabenstellung. Zunächst nummerieren wir die Knoten von oben links nach unten rechts durch, wir bezeichnen also den j-ten Knoten der i-ten Zeile mit v(i−1)l+j für i, j ∈ {1, 2, . . . , l}. Die Aussage beweisen wir konstruktiv durch die explizite Angabe einer Baumzerlegung. Dazu setzen wir Xk = {vk , vk+1 , . . . , vk+l }, für k = 1, 2, . . . , l(l − 1). Dann ist (V 0 , E 0 ) mit V 0 := {X1 , X2 , . . . , Xl(l−1) } und E 0 := {{Xi , Xi+1 } | 1 ≤ i ≤ n − 1} eine gültige Baumzerlegung für Gl×l . Um uns davon zu überzeugen, überprüfen wir die drei Eigenschaften: (i) Es ist nach Konstruktion sofort klar, dass jeder Knoten aus V in mindestens einer Menge Xk vorkommt. (ii) Zu sehen, dass jede horizontale Kante in mindestens einer Bag ist, ist offensichtlich. Jede vertikale Kante ist ebenfalls in einer Bag enthalten. Dies folgt sofort aus der Grösse der Bags (diese sind grösser als die Länge einer Zeile) und der Tatsache, dass sich jeweils die Bag Xk+1 aus der Bag Xk durch Entfernen und Hinzufügen eines Knotens ergibt. (iii) Alle Bags, die einen festen Knoten enthalten, bilden nach Konstruktion offensichtlich einen Teilbaum in T . Es gilt |Xk | = l + 1 für 1 ≤ k ≤ l(l − 1), wir haben also gezeigt, dass die Baumweite von Gl×l höchstens l ist. Bemerkung: Wir haben hier sogar einen Spezialfall gezeigt, denn der Baum T ist ein Pfad.