23.06.2013 Aufrufe

aktuelle Version des Vorlesungsskripts - ZIB

aktuelle Version des Vorlesungsskripts - ZIB

aktuelle Version des Vorlesungsskripts - ZIB

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!