aktuelle Version des Vorlesungsskripts - ZIB
aktuelle Version des Vorlesungsskripts - ZIB
aktuelle Version des Vorlesungsskripts - ZIB
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
Eingabe: Graph G = (V, E) mit Kantengewichten c(e) für alle e ∈ E.<br />
Ausgabe: Maximaler Wald T ⊆ E mit minimalem Gewicht c(T ).<br />
5.2 Optimale Bäume und Wälder<br />
1. (Sortieren): Numeriere die m Kanten <strong>des</strong> Graphen G, so dass gilt<br />
c(e1) ≤ c(e2) ≤ . . . ≤ c(em).<br />
2. Setze T := ∅.<br />
3. FOR i = 1 TO m DO:<br />
Falls T ∪ {ei} keinen Kreis enthält, setze T := T ∪ {ei}.<br />
4. Gib T aus. △<br />
Aus Satz (5.8) und unseren Überlegungen zur Reduktion <strong>des</strong> Waldproblems auf das<br />
Baumproblem und umgekehrt folgt:<br />
(5.10) Satz. Algorithmus (5.9) liefert einen maximalen Wald T (d. h. für jede Zusammenhangskomponente<br />
G ′ = (V ′ , E ′ ) von G ist T ∩ E ′ ein aufspannender Baum), <strong>des</strong>sen<br />
Gewicht c(T ) minimal ist. Ist G zusammenhängend, so ist T ein aufspannender Baum<br />
von G minimalen Gewichts c(T ). △<br />
Die Laufzeit von Algorithmus (5.7) bzw. (5.9) kann man wie folgt abschätzen. Mit<br />
den gängigen Sortierverfahren der Informatik (z. B. HEAP-SORT) kann man die Kanten<br />
von E in O(k log 2 k) bzw. O(m log 2 m) Schritten in der geforderten Weise ordnen. In<br />
Schritt 3 ruft man k- bzw. m-mal ein Unterprogramm auf, das überprüft, ob eine Kantenmenge<br />
einen Kreis besitzt oder nicht. Durch Benutzung geeigneter Datenstrukturen<br />
kann man einen derartigen Aufruf in höchstens O(n) Schritten abarbeiten. Daraus folgt,<br />
dass Schritt 3 in höchstens O(mn) Schritten ausgeführt werden kann. Dies ist auch die<br />
Gesamtlaufzeit <strong>des</strong> Verfahrens. Mit speziellen “Implementierungstricks” kann die Laufzeit<br />
von Schritt 3 auf O(m + n log n) gesenkt und damit die Gesamtlaufzeit sogar auf<br />
O(m log m) Schritte reduziert werden. In der Literatur wird Algorithmus (5.9) häufig<br />
Kruskal-Algorithmus genannt.<br />
Einen gewichtsminimalen aufspannenden Baum kann man übrigens auch mit folgendem<br />
Verfahren finden.<br />
(5.11) “Dualer” Greedy-Algorithmus.<br />
Eingabe: Zusammenhängender Graph G = (V, E) mit Kantengewichten c(e) für alle<br />
e ∈ E.<br />
Ausgabe: Aufspannender Baum T ⊆ E minimalen Gewichts c(T ).<br />
1. (Sortieren): Numeriere die m Kanten <strong>des</strong> Graphen G, so dass gilt<br />
c(e1) ≥ c(e2) ≥ . . . ≥ c(em).<br />
2. Setze T := E.<br />
3. FOR i = 1 TO m DO:<br />
83