23.06.2013 Aufrufe

finale Version des Vorlesungsskripts - ZIB

finale Version des Vorlesungsskripts - ZIB

finale 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.

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!