finale Version des Vorlesungsskripts - ZIB
finale Version des Vorlesungsskripts - ZIB finale Version des Vorlesungsskripts - ZIB
Eingabe: Graph G = (V, E) mit Kantengewichten c(e) für alle e ∈ E. Ausgabe: Maximaler Wald T ⊆ E mit minimalem Gewicht c(T ). 5.2 Optimale Bäume und Wälder 1. (Sortieren): Numeriere die m Kanten des Graphen G, so dass gilt c(e1) ≤ c(e2) ≤ . . . ≤ c(em). 2. Setze T := ∅. 3. FOR i = 1 TO m DO: Falls T ∪ {ei} keinen Kreis enthält, setze T := T ∪ {ei}. 4. Gib T aus. △ Aus Satz (5.8) und unseren Überlegungen zur Reduktion des Waldproblems auf das Baumproblem und umgekehrt folgt: (5.10) Satz. Algorithmus (5.9) liefert einen maximalen Wald T (d. h. für jede Zusammenhangskomponente G ′ = (V ′ , E ′ ) von G ist T ∩ E ′ ein aufspannender Baum), dessen Gewicht c(T ) minimal ist. Ist G zusammenhängend, so ist T ein aufspannender Baum von G minimalen Gewichts c(T ). △ Die Laufzeit von Algorithmus (5.7) bzw. (5.9) kann man wie folgt abschätzen. Mit den gängigen Sortierverfahren der Informatik (z. B. HEAP-SORT) kann man die Kanten von E in O(k log 2 k) bzw. O(m log 2 m) Schritten in der geforderten Weise ordnen. In Schritt 3 ruft man k- bzw. m-mal ein Unterprogramm auf, das überprüft, ob eine Kantenmenge einen Kreis besitzt oder nicht. Durch Benutzung geeigneter Datenstrukturen kann man einen derartigen Aufruf in höchstens O(n) Schritten abarbeiten. Daraus folgt, dass Schritt 3 in höchstens O(mn) Schritten ausgeführt werden kann. Dies ist auch die Gesamtlaufzeit des Verfahrens. Mit speziellen “Implementierungstricks” kann die Laufzeit von Schritt 3 auf O(m + n log n) gesenkt und damit die Gesamtlaufzeit sogar auf O(m log m) Schritte reduziert werden. In der Literatur wird Algorithmus (5.9) häufig Kruskal-Algorithmus genannt. Einen gewichtsminimalen aufspannenden Baum kann man übrigens auch mit folgendem Verfahren finden. (5.11) “Dualer” Greedy-Algorithmus. Eingabe: Zusammenhängender Graph G = (V, E) mit Kantengewichten c(e) für alle e ∈ E. Ausgabe: Aufspannender Baum T ⊆ E minimalen Gewichts c(T ). 1. (Sortieren): Numeriere die m Kanten des Graphen G, so dass gilt c(e1) ≥ c(e2) ≥ . . . ≥ c(em). 2. Setze T := E. 3. FOR i = 1 TO m DO: 83
5 Bäume und Wege Falls T \ {ei} zusammenhängend ist, setze T := T \ {ei}. 4. Gib T aus. △ Der Korrektheitsbeweis für Algorithmus (5.11) bleibt einer Übungsaufgabe überlassen. Wie bereits erwähnt, gibt es eine Vielzahl weiterer Verfahren zur Bestimmung minimaler aufspannender Bäume. Ein gemeinsames Skelett für mehrere dieser Algorithmen kann wie folgt skizziert werden. (5.12) Algorithmus META-MST. Eingabe: Zusammenhängender Graph G = (V, E) mit Kantengewichten c(e) für alle e ∈ E. Ausgabe: Aufspannender Baum T von G minimalen Gewichts. △ 1. (Initialisierung): FOR ALL i ∈ V DO: Setze Vi := {i} und Ti := ∅. 2. DO |V | − 1 TIMES: (a) Wähle eine nicht-leere Menge Vi. (b) Wähle eine Kante uv ∈ E mit u ∈ Vi, v ∈ V \ Vi und c(uv) ≤ c(pq) für alle pq ∈ E mit p ∈ Vi, q ∈ V \ Vi. (c) Bestimme j, so dass v ∈ Vj. (d) Setze Vi := Vi ∪ Vj; Vj := ∅. (e) Setze Ti := Ti ∪ Tj ∪ {uv}; Tj := ∅. 3. Gib diejenige Kantenmenge Ti mit Ti = ∅ aus. Algorithmus (5.9) ist ein Spezialfall von Algorithmus (5.12). Überlegen Sie sich wieso! (5.13) Satz. Algorithmus (5.12) bestimmt einen minimalen aufspannenden Baum. △ Beweis. Wir zeigen durch Induktion über p = |T1| + . . . + |Tn|, dass G einen minimalen aufspannenden Baum T enthält mit Ti ⊆ T für alle i. Ist p = 0, so ist nichts zu zeigen. Sei uv eine Kante, die bei einem Durchlauf von Schritt 2 in (b) gewählt wurde. Nach Induktionsvoraussetzung sind alle bisher bestimmten Mengen Ti in einem minimalen aufspannenden Baum T enthalten. Gilt uv ∈ T , so sind wir fertig. Ist uv ∈ T , so enthält T ∪ {uv} einen Kreis. Folglich muss es eine Kante rs ∈ T geben mit r ∈ Vi, s ∈ V \ Vi. Aufgrund unserer Wahl in (b) gilt c(uv) ≤ c(rs). Also ist T := (T \{rs})∪{uv} ebenfalls ein minimaler aufspannender Baum und der neue Baum T erfüllt unsere Bedingungen. Die Korrektheit des Algorithmus folgt aus dem Fall p = n − 1. ✷ 84
- Seite 38 und 39: 2.3 Polyeder und lineare Programme
- Seite 40 und 41: V. Chvátal. Linear Programming. Fr
- Seite 42 und 43: 3 Diskrete Optimierungsprobleme Die
- Seite 44 und 45: 3.2 Klassische Fragestellungen der
- Seite 46 und 47: (a) (b) 3.2 Klassische Fragestellun
- Seite 48 und 49: 3.3 Graphentheoretische Optimierung
- Seite 50 und 51: 3.3 Graphentheoretische Optimierung
- Seite 52 und 53: 3.3 Graphentheoretische Optimierung
- Seite 54 und 55: 3.3 Graphentheoretische Optimierung
- Seite 56 und 57: • Schaltkreisentwurf • Standort
- Seite 58 und 59: 3.3 Graphentheoretische Optimierung
- Seite 60 und 61: 3.3 Graphentheoretische Optimierung
- Seite 62 und 63: Literaturverzeichnis T. L. Gertzen
- Seite 64 und 65: 4 Komplexitätstheorie und Speicher
- Seite 66 und 67: 4.1 Probleme, Komplexitätsmaße, L
- Seite 68 und 69: 4.2 Die Klassen P und N P, N P-Voll
- Seite 70 und 71: 4.2 Die Klassen P und N P, N P-Voll
- Seite 72 und 73: 4.2 Die Klassen P und N P, N P-Voll
- Seite 74 und 75: 4 4.3 Datenstrukturen zur Speicheru
- Seite 76 und 77: 4.3 Datenstrukturen zur Speicherung
- Seite 78 und 79: 4.3 Datenstrukturen zur Speicherung
- Seite 80: R. E. Tarjan. Data structures and n
- Seite 83 und 84: 5 Bäume und Wege Der Beweis ist et
- Seite 85 und 86: 5 Bäume und Wege (2) =⇒ (3) Ist
- Seite 87: 5 Bäume und Wege Haben wir einen A
- Seite 91 und 92: 5 Bäume und Wege /****************
- Seite 93 und 94: 5 Bäume und Wege THEN w[dope[i]+j]
- Seite 95 und 96: 5 Bäume und Wege Wie Beispiel (5.1
- Seite 97 und 98: 5 Bäume und Wege (a) F. Schiller.
- Seite 99 und 100: 5 Bäume und Wege DISTk(u) die Län
- Seite 101 und 102: 5 Bäume und Wege VOR(3) = 2. Wir s
- Seite 103 und 104: 5 Bäume und Wege 4. DO u = 1 TO v
- Seite 105 und 106: 5 Bäume und Wege Sei nun P ein kü
- Seite 107 und 108: 5 Bäume und Wege (b) D enthält ge
- Seite 109 und 110: 5 Bäume und Wege C2 C1 s 4 C3 C4 2
- Seite 111 und 112: 5 Bäume und Wege ders vorgehen: z.
- Seite 113 und 114: 5 Bäume und Wege ist ein System vo
- Seite 115 und 116: 5 Bäume und Wege heißt (allgemein
- Seite 117 und 118: 5 Bäume und Wege Um lästige Trivi
- Seite 119 und 120: Literaturverzeichnis A. Goldberg. P
- Seite 121 und 122: 6 Maximale Flüsse in Netzwerken Al
- Seite 123 und 124: 6 Maximale Flüsse in Netzwerken de
- Seite 125 und 126: 6 Maximale Flüsse in Netzwerken s
- Seite 127 und 128: 6 Maximale Flüsse in Netzwerken W
- Seite 129 und 130: 6 Maximale Flüsse in Netzwerken Da
- Seite 131 und 132: 6 Maximale Flüsse in Netzwerken s
- Seite 133 und 134: Literaturverzeichnis L. R. Ford, Jr
- Seite 135 und 136: 7 Flüsse mit minimalen Kosten Ein
- Seite 137 und 138: 7 Flüsse mit minimalen Kosten Dami
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