Steinerbäume Seminarausarbeitung Hochschule Aalen Fakultät für Elektronik und Informatik Studiengang Informatik Schwerpunkt Software Engineering Verfasser Flamur Kastrati Betreuer Prof. Dr. habil. Thomas Thierauf 1 Zusammenfassung Das Steinerbaumproblem ist ein Problem in der Mathematik, speziell in der Graphentheorie, welches sich mit dem kürzesten Pfad in einem Graphen beschäftigt. Das Problem ist eine Verallgemeinerung des minimalen Spannbaums, mit der Besonderheit, das man zusätzliche Knoten, auch Steinerpunkte genannt, zur eigentlichen Knotenmenge und Kanten zur Kantenmenge hinzufügen kann, um die Gesamtlänge der Pfade zusätzlich zu verkürzen. 1 Einleitung Ein altes, dennoch bis in unsere Zeit reichendes mathematisches Problem, wird seit Jahrhunderten von vielen Mathematikern aufs Neue entdeckt und definiert. Das sogenannte Steinerbaumproblem“, welches nach dem Schweizer Mathematiker Jacob Steiner benannt ” wurde. Das Problem beschreibt einen Graphen mit einer Menge von Punkten P1 , . . . , Pn , die so zusammenhängen, dass (i ) jeder Knoten, mit jedem beliebigen anderen Knoten über eine oder mehreren Kanten verbunden ist und (ii ) die Gesamtlänge aller Kanten (gemessen mit Bedacht auf einigen vordefinierten Kostenfunktionen) minimal ist. Die genannten Bedingungen erinnern an den minimalen Spannbaum, und tatsächlich ist der Steinerbaum eine Verallgemeinerung dessen. Genau so, wie der minimale Spannbaum verbreitet ist, besitzt auch der Steinerbaum in vielen Bereichen seine Wichtigkeit. Wie zum Beispiel in der Elektrotechnik, wo man sich optimale Positionen von Transistoren auf einem integrierten Schaltkreis berechnen lassen kann. Das Steinerbaumproblem klingt sehr simpel, ist jedoch nicht umsonst ein seit Jahrhunderten bekanntes Problem. In dieser Ausarbeitung wird hauptsächlich auf das Steinerbaumproblem näher eingegangen. Die allgemeine Beschreibung und einen Algorithmus zum Steinerbaum. Zusätzlich der Beweis, dass das Problem ein schwieriges ist und eine Approximation zum Problem. Alle Informationen zu dieser Ausarbeitung wurden aus dem Buch [PDHJP02] entnommen. 2 Steinerbäume Bevor wir zum Theorem des Steinerbaumproblems kommen, müssen noch einige kleine Dinge geklärt werden. Man darf hier nicht vergessen, dass das Steinerbaumproblem ein anderes Problem ist, als das des minimalen Spannbaums. Der Steinerbaum besitzt zu der normal gegebenen endlichen Knotenmenge (den Terminalen) noch eine endliche Anzahl freier Knoten (den Steinerpunkten oder auch Nicht-Terminalen). Diese Nicht-Terminalen Punkte werden dazu eingesetzt, die Gesamtlänge des Steinerbaums zusätzlich zu minimieren. Es gibt zwei verschieden Arten des Steinerbaumproblems. Bei dem einen sind verschiedene Steinerpunkte bereits gegeben und bei dem anderen kann man die Steinerpunkte frei Wählen. In dieser Ausarbeitung werden wir uns lediglich der ersteren Variante mit den bereits gegebenen Nicht-Terminalen zuwenden. Dann gibt es da noch folgende Lemmata. Die Lemmata werden in dieser Ausarbeitung nicht bewiesen, da sie bereits in den Vorlesungen ausführlich besprochen wurden. Dies dient als Hilfestellung zum eigentlichen Steinerbaum Theorem. 2 1. Lemma 2.1 (a) Sei G = (V, E) ein Wald mit n Knoten und mit c ≥ 1 Komponenten, dann ist |E| = n − c 2. Korollar 2.2 (a) Jeder Baum T mit n Knoten, besitzt genau n − 1 Kanten. 3. Korollar 2.3 (b) Jeder Baum T hat mindesten 2 Blätter. 4. Lemma 2.4 (b) Graph G = (V, E) ist genau dann ein zusammenhängender Graph, wenn es einen Spannbaum enthält. 2.1 Theorem Theorem 2.5 Sei G = (V, E) mit einer Anzahl n Knoten und mit folgenden Behauptungen gegeben: (i ) G ist ein Baum. (ii ) Für jedes Paar x, y ∈ V und x6=y besitzt G exakt einen Pfad von x nach y. (iii ) G ist minimal Zusammenhängend. (d.h., G ist Zusammenhängend und für alle {x, y} ∈ E gilt: G − {x, y} ist nicht zusammenhängend) (iv ) G ist maximal azyklisch. (d.h., G ist azyklisch und für alle {x, y} ∈ / E gilt: G + {x, y} ist zyklisch) (v ) G ist azyklisch und |E| = n − 1 (vi ) G ist zusammenhängend und |E| = n − 1 Beweis: Sei G ein Baum, x, y ∈ V und x6=y. Da G ein zusammenhängender Baum ist, gibt es mindestens einen Weg von x nach y. G ist zudem azyklisch und jedes Paar Knoten sind über mindestens einem Weg verbunden. Dies zeigt, dass (i) ⇒ (ii). Die Implikationen (ii) ⇒ (iii) und (iii) ⇒ (iv) sind selbstverständlich. (iv) ⇒ (v) und (v) ⇒ (vi) stimmen durch Lemma (a) und (vi) ⇒ (i) ist auch wahr, da wir durch Lemma (b) wissen, dass jeder zusammenhängende Graph einen Spannbaum enthält. |E(T )| = n − 1 wird durch Korollar (a) abgedeckt. Dieses Wissen würde ausreichen, um einen minimalen Spannbaum zu beschreiben. Aber wie wäre es, wenn wir das Problem etwas interessanter gestalten. Nehmen wir an, es gibt eine Teilmenge K⊆V aus einem zusammenhängenden Graphen G = (V, E). Mit dieser Teilmenge K (möglicherweise aber auch mit einigen zusätzliche Knoten), suchen wir einen Teilgraphen von G, der ebenfalls zusammenhängend ist und eine möglichst minimale Anzahl an Kanten besitzt. Durch Lemma 2 und 4 können wir aber bereits sagen, dass jeder Teilgraph (zusammenhängend) nicht mehr als |V | − 1 Kanten haben darf und somit minimal ist. Außerdem können wir auch festhalten, dass alle Blätter Elemente aus der Menge K sein müssen. 3 2.2 Definition Die bisher gesammelten Informationen führen zu folgender Definition: Ein Teilgraph T von G wird Steinerbaum für K genannt, wenn T ein Baum ist und alle Knoten aus K besitzt (d.h., K⊆V (T )) und alle Blätter aus T Elemente in K sind. Die Knoten K werden auch Terminale von T genannt, wohingegen V (T )\K Steinerpunkte (oder auch Nichtterminale) genannt werden. Ein minimaler Steinerbaum für K in G ist ein Steinerbaum T mit minimaler Anzahl Kanten. Jetzt können wir, den Steinerbaumproblem einen passenden Namen geben: Minimum Steiner Problem in Graphs Geg.: Ein zusammenhängender Graph G = (V, E) und eine Menge T ⊆V aus Terminalen. Ges.: Einen minimalen Steinerbaum für K in G. Sprich, einen Steinerbaum T für K mit |E(T )| = min{ |E(T 0 )| | T 0 ist ein Steinerbaum für K in G } Dieses Problem sieht zunächst einfach aus, ist aber aus Sicht eines Algorithmus ein nicht triviales und in vielen Aspekten herausforderndes. Von der praktischen Seite aus ist es oft erwünscht eine komplexere Version des Problems zu analysieren. Ein Gewichteter Graph N = (V, E, l), bestehend aus G = (V, E) und l : E(G)→R≥0 , welches eine Funktion ist, die jeder Kante einen positiven Wert anrechnet. Dieser Wert kann als Länge, Gewicht oder anderes betrachtet werden. Die Länge eines Teilgraphen H von G lässt sich also wie folgt berechnen: P l(H) = e∈E(H) l(e) (die Summe aller Kantenwerte) Ist der Graph ein ungerichteter Graph, wird die Gesamtsumme aller Kanten gleich deren Anzahl gesetzt (wird auch die Länge von H genannt, gekennzeichnet |H|). Man kann sich hier vorstellen, dass man jeder Kante den Wert 1 zugeschrieben hat. Für zwei Knoten v und w, kennzeichnen wir mit P (v, w) die Länge des kürzesten Pfades von v nach w. Mit diesem Wissen, können wir eine Definition dieser Version des Steinerbaumproblems erstellen. Minimum Steiner Problem in Networks / Weighted Graph Geg.: Ein Gewichteter Graph N = (V, E, l) und eine Menge T ⊆V aus Terminalen. Ges.: Einen minimalen Steinerbaum für K in N . Sprich, einen Steinerbaum T für K mit l(T ) = min{ l(T 0 ) | T 0 ist ein Steinerbaum für K in N } 2.3 Komplexität Es wurde des Öfteren gesagt, dass das Steinerbaumproblem ein schwieriges Problem sei. Und tatsächlich liegt das Steinerbaumproblem in der Komplexitätsklasse der NP-Vollständigen Probleme. Der Beweis dazu wird durch eine Reduktion von 3Sat auf Minimum Steiner Problem in Graphs (Spg) erbracht. Theorem 2.6 Das Steinerbaumproblem ist NP-Vollständig. Beweis: Die Vollstaendigkeit erhaelt man durch eine Reduktion vom 3Sat auf Spg. Zunächst suchen wir einen Graphen G = (V, E) mit einer Menge Terminalen K und einer Schranke B, so dass G den Steinerbaum T nach K enthält und die Schranke B nicht überschreitet. Eine weitere Bedingung ist, dass der Graph G nur genau dann konstruiert werden kann, wenn es 4 ein 3Sat Konstrukt gibt, welches erfüllbar ist. Startpunkt ist eine Formel F (x1 , . . . , xn ) = C1 ∧ C2 ∧ · · · ∧ Cm . Daraus wird eine beliebige Instanz für 3Sat mit Variablen x1 , . . . , xn und Klauseln C1 , . . . , Cm konstruiert. Der Graph G wird wie folgt konstruiert. Zuerst, verbinden wir die Knoten u und v mit einem variablen Pfad, gezeigt in Abbildung 2.1. x1 xj x2 xn−1 xn u v x1 xj x2 xn−1 xn Abbildung 2.1: Transformation von 3Sat auf Spg: Der Variablen Pfad Als nächstes kreieren wir für jede Klausel Ci einen Knoten mit Verbindungen zu den einzelnen Literalen, die zu der jeweiligen Klausel gehören. Die Pfadlänge beträgt t = 2n + 1. Als Terminale Menge wählen wir K = {u, v}∪{C1 , . . . , Cm } und setzten B auf B = 2n+t·m. Ci x1 x2 xj xn−1 xn u v x1 x2 xj xn−1 xn Abbildung 2.2: Klausel Ci = x2 ∨xj ∨xn . Die Gestrichelte Linie zeigen auf die einzelnen Literale der Klausel Ci mit einer Pfadlänge t = 2n + 1 Nehmen wir an, die 3Sat Instanz wäre Erfüllbar. Um einen Steinerbaum nach K zu konstruieren, starten wir zunächst mit dem Pfad von u nach v, welches eine erfüllende Belegung P darstellt. Das heißt, dass wir xi ∈P haben, wenn xi wahr ist und xi ∈P , wenn nicht wahr. Weiterhin müssen wir beachten, dass für jede Klausel, dessen Knoten Ci über einen Pfad der Länge t mit P verbunden ist. Somit erhalten wie einen Steinerbaum nach K mit einer Gesamtlänge von 2n + t·m = B Gehen wir nun einen Schritt weiter. Sei T ein Steinerbaum nach K mit einer Gesamtlänge von nicht mehr als B. Trivialerweise ist jeder Klausel-Knoten Ci mit dem variierbaren Pfad verbunden. Gehen wir für einen Moment davon aus, dass es eine Klausel Ci0 gibt, die auf mindestens zwei Wegen mit dem variierbaren Pfad verbunden ist. Somit hätten wir 5 |E(T )| ≥ (m + 1) · t > B, und das dürfte nicht sein. Dies zeigt uns, dass u und v nur auf dem variierbaren Pfad verbunden werden können, welches mindestens 2n Kanten voraussetzt. Da jede Klausel mindestens t Kanten braucht, um Ci mit dem variierbaren Pfad zu verbinden, schließen wir daraus, dass der Pfad u nach v exakt 2n Kanten besitzt und, dass jede Klausel exakt t Kanten benutzen muss, um mit diesem Pfad verbunden zu sein. Somit gibt der Pfad von u nach v eine erfüllbare Belegung wieder. Die Beobachtung, dass diese Konstruktion leicht in polynomieller Zeit erhalten werden kann, erschließt den Beweis des Theorems. 3 Approximationsalgorithmus In diesem Kapitel werden wir einen simplen Approximationsalgorithmus vorstellen, der auf einer Minimum Spanning Tree Berechnung aufbaut. Der Algorithmus ist eine 2Approximation. Um die Notation zu verkürzen, werden wir folgende Schreibweisen in diesem Kapitel benutzen. N = (V, E, l; K) steht für ein Steinerproblem in einem zusammenhängenden gewichteten Graphen mit positiven Längenfunktion l ≥ 0 und einer Menge Terminalen K. Jedes Steinerproblem N = (V, E, l; K) verbinden wir mit einem complete distance network (CDN ) ND = (K, ED , lD ). Ein CDN ist kurz gesagt ein Graph, aufbauend auf der Menge Terminalen K, worin jede Kante die Länge des kürzesten Pfades der korrespondierenden zwei Terminalen besitzt. Das Steinerproblem N und der CDN werden wie folgt miteinander assoziiert. Die Knotenmenge des ND ist gleich der Menge Terminalen K, die Kantenmenge h i K ist mit ED = 2 gegeben und die Längenfunktion lD fügt zu jeder Kante {x, y}∈ED die Länge des kürzesten Pfades von x nach y in N ein. Zusätzlich kürzen wir die Länge eines minimalen Steinerbaums in N mit Knoten aus der Menge Terminalen K mit smt(N) ab. 3.1 Simpler Algorithmus Die ausschlaggebende Idee vom folgenden Lemma dieses Algorithmus ist, dass wir die Länge eines minimalen Spannbaums in einem gewichteten Graphen mit der Länge eines minimalen Steinerbaums im korrespondierenden CDN relativieren. Sprich, wir erzeugen uns einen minimalen Spannbaum und benutzen die erzeugten Pfade als Wegweiser für den minimalen Steinerbaum. Lemma 3.1 Sei N = (V, E, k; K) ein Steinerproblem, dann erfüllt jeder minimale Spannbaum T im CDN ND die Ungleichung lD (T ) ≤ 2 − 2 k · smt(N ). k = |K| bezeichnet die Kardinalität der Menge Terminalen. Beweis: Sei Sopt ein beliebiger minimaler Steinerbaum in N . Stellen wir uns nun Sopt als zweidimensionalen planaren Graphen vor, und dass wir einen Weg W am Rand der Kanten entlang haben. Auf diesem Weg W besuchen wir jeden Terminal genau ein und jede Kante zwei mal. Die Gesamtlänge ist dementsprechend genau doppelt so lang, wie die Länge von Sopt . Sei t die Anzahl der Blätter in Sopt . Dann besitzt Weg W t ≤ k Pfade zwischen den aufeinanderfolgenden Blättern in Sopt . Nun entfernen wir den längsten Pfad in W . Dieser 6 5 3 2 4 6 8 1 7 Abbildung 3.3: Illustriert den Beweis von Lemma 3.1. Der Weg W besteht aus den Pfaden 1-2, 2-3, ..., 7-8 und 8-1. Um den Weg W 0 zu erhalten, entfernen wir den Weg von 7 nach 8. Pfad wäre aus dem Beispiel in der Abbildung 3.3 der Pfad 7 nach 8. Die Länge des übrig bleibenden Weges W 0 beträgt jetzt nicht mehr als das (1 − 1t )-fache des Weges W . Jetzt sieht man, dass wenn man den Weg W 0 folgt, man ganz einfach einen Spannbaum (und sogar einen Pfad) mit einer maximalen Länge von W 0 in ND aufziehen kann. Durch diese Beobachtung können wir nun den Beweis von Lemma 3.1 schlussfolgern. Beispiel 3.2 Gewichteter Graph N = (V, E, k; K) mit v1 2−e 2−e v2 V = {v0 , v1 , . . . , vk }, vk 1 1 1 2−e 2−e 1 v0 v3 K = V \{v0 }, E = {{vi , vi+1 } | 1 ≤ i ≤ k} 1 vk−1 1 2−e l(e) = v4 ∪ {{vk , v1 }} ∪ {{v0 , vi } | 1 ≤ i ≤ k}, ( 1 , if v0 ∈ e 2 − e, sonst zeigt, dass Schranke aus Lemma 3.1 die Bestmögliche ist. Aus den Vorlesungen wissen wir, dass der minimale Spannbaum leicht zu berechnen ist. Eine kurze Wiederholung: Ein minimaler Spannbaum ist ein Spannbaum mit minimaler Gesamtlänge der Summe der Kanten. Ein minimaler Steinerbaum ist dann minimal, wenn die Summe aller Kanten zwischen den Terminalen minimal ist. In Lemma 3.1 sahen wir auch, dass die Länge des minimalen Spannbaums aus einem complete distance network (kurz: cdn) für eine 2-Approximation des minimalen Steinerbaums sorgt. Genau genommen kann man den minimalen Spannbaum dafür benutzen, einen Steinerbaum zu erzeugen, dessen Länge nicht die doppelte Länge des minimalen Steinerbaums überschreitet. 7 Algorithmus 3.3 (MST-Algorithm) Input: Gewichteter Graph N = (V, E, l; K). Output: Steinerbaum SK für N . (1) Berechne den complete distance network ND = (K, ED , lD ). (2) Berechne einen minimalen Spannbaum TD in ND . (3) Wandle TD in einen gewichteten Teilgraphen N [TD ] um, indem jede Kante aus TD durch den Korrespondierenden kürzesten Pfad ersetzt wird. (4) Berechne einen minimalen Spannbaum T für N [TD ]. (5) Wandle T in einen Steinerbaum SK für N um, indem nacheinander jeder Blattknoten entfernt wird, der kein Terminal ist. Das Abbild 3.4 zeigt die verschiedenen Schritte des Algorithmus. Man sollte dort auch sehen, wieso die Schritte (4) und (5) unabdingbar sind. Theorem 3.2 Sei N = (V, E, l; K) ein gewichteter Graph. Dann berechnet der MSTAlgorithm in polynomieller Zeit einen Steinerbaum SK 4 für N aus, so dass l(SK ) ≤ 2 − k2 · smt(N ). Beweis: Lemma 3.1 zufolge ist lD (T ) ≤ 2 − 2 k · smt(N ).Somit haben die aufeinanderfol- genden Schritte (3), (4) und (5) die Eigenschaften l(TD ) geql(T ) ≥ l(SK ). 4 4 4 4 4 4 4 N = (V, E, l ≡ 1; K) (3) N [TD ] 4 4 (1): ND = (K, ED , lD ) (4): T (2): TD (5): SK Abbildung 3.4: Illustriert die einzelnen Schritte des MST-Algorithm Eine direkte Analyse des MST-Algorithm zeigt, dass der am meisten Zeit brauchende Teil des Algorithmus, die Berechnung des CDN ND ist. Dieser gewichtete Graph wird durch einen k kürzesten Wege Algorithmus mit Laufzeit O(n log n + m) berechnet. 8 Literatur [PDHJP02] Prof. Dr. Angelika Steger Prof. Dr. Hans Juergen Prömel. The Steiner Tree Problem, A Tour through Graphs, Algorithms, and Complexity. Friedr. Vieweg & Sohn Verlagsgesellschaft mbH, 1st edition, 2002.