finale Version des Vorlesungsskripts - ZIB
finale Version des Vorlesungsskripts - ZIB
finale 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.
5.2 Optimale Bäume und Wälder<br />
Die Laufzeit <strong>des</strong> Algorithmus (5.12) hängt natürlich sehr stark von den Datenstrukturen<br />
ab, die man zur Ausführung <strong>des</strong> Schrittes 2 implementiert. Wir können an dieser<br />
Stelle nicht ausführlich auf Implementierungstechniken eingehen und verweisen hierzu<br />
auf Mehlhorn (1984), Vol 2, Kapitel IV, Abschnitt 8. Hier wird gezeigt, dass bei geeigneten<br />
Datenstrukturen eine Laufzeit von O(n log log m) Schritten erreicht werden kann.<br />
Für planare Graphen ergibt sich sogar eine O(n)-Laufzeit.<br />
Spanning-Tree-Algorithmen werden häufig als Unterprogramme zur Lösung von Travelling-Salesman-<br />
und anderen Problemen benötigt. Speziell ist hier eine Implementation<br />
dieser Algorithmen für vollständige Graphen erforderlich. Der nachfolgende Algorithmus<br />
lässt sich gerade für diesen Fall vollständiger Graphen einfach implementieren und hat sowohl<br />
empirisch wie theoretisch günstige Rechenzeiten aufzuweisen. Dieses Verfahren, das<br />
offensichtlich ebenfalls eine Spezialisierung von (5.12) ist, wird häufig PRIM-Algorithmus<br />
genannt.<br />
(5.14) PRIM-Algorithmus.<br />
Eingabe: Zusammenhängender Graph G = (V, E) mit Kantengewichten c(e) für alle<br />
e ∈ E.<br />
Ausgabe: Aufspannender Baum T minimalen Gewichts c(T ).<br />
1. Wähle w ∈ V beliebig, setze T := ∅, W := {w}, V := V \ {w}.<br />
2. Ist V = ∅, dann gib T aus und STOP.<br />
3. Wähle eine Kante uv mit u ∈ W , v ∈ V , so dass c(uv) = min{c(e) | e ∈ δ(W )}.<br />
4. Setze<br />
T := T ∪ {uv}<br />
W := W ∪ {v}<br />
V := V \ {v}<br />
und gehe zu 2. △<br />
Das PRIM-Verfahren hat, bei geeigneten Datenstrukturen, eine Laufzeit von O(m +<br />
n log n) und kann für den vollständigen Graphen Kn so implementiert werden, dass seine<br />
Laufzeit O(n2 ) beträgt, was offenbar bezüglich der Ordnung (also bis auf Multiplikation<br />
mit Konstanten und bis auf lineare Terme) bestmöglich ist, da ja jede der n(n−1)<br />
2 Kanten<br />
min<strong>des</strong>tens einmal überprüft werden muss. Bereits bei dieser Überprüfung sind O(n2 )<br />
Schritte notwendig. Nachfolgend finden Sie eine Liste eines PASCAL-Programms für<br />
Algorithmus (5.14), das für die Bestimmung minimaler aufspannender Bäume im Kn<br />
konzipiert ist.<br />
(5.15) Algorithmus PASCAL-Implementierung von Algorithmus (5.14).<br />
PROGRAM prim(inp, outp);<br />
85