Algorithmus von Kruskal
Der Algorithmus von Kruskal ist ein Algorithmus der Graphentheorie zur Berechnung minimaler_Spannbäume von ungerichteten_Graphen. Der Graph muss dazu zusätzlich zusammenhängend, kantengewichtet und endlich sein.Der Algorithmus stammt von Joseph Kruskal, der ihn 1956 in der Zeitschrift ?Proceedings of the American Mathematical Society? veröffentlichte. Er beschrieb ihn dort wie folgt:
:Führe den folgenden Schritt so oft wie möglich aus: Wähle unter den noch nicht ausgewählten Kanten von (dem Graphen) die kürzeste Kante, die mit den schon gewählten Kanten keinen Kreis bildet.Joseph Kruskal: On the shortest spanning subtree and the traveling salesman problem. In: Proceedings of the American Mathematical Society. 7 (1956), S. 48?50
Die kürzeste Kante bezeichnet dabei jeweils die Kante mit dem kleinsten Kantengewicht. Nach Abschluss des Algorithmus bilden die ausgewählten Kanten einen minimalen Spannbaum des Graphen.
Wendet man den Algorithmus auf unzusammenhängende Graphen an, so berechnet er einen minimalen Wald, also minimal spannende Bäume für jede Zusammenhangskomponente des Graphen.
Beispiel
Formalisierter Algorithmus
Die Grundidee ist, die Kanten in Reihenfolge aufsteigender Kantengewichte zu durchlaufen und jede Kante zur Lösung hinzuzufügen, die mit allen zuvor gewählten Kanten keinen Kreis bildet. Es werden somit sukzessiv sogenannte Komponenten zum minimalen_Spannbaum verbunden.
Input
Als Eingabe dient ein zusammenhängender kantenbewerteter Graph . bezeichnet die Menge der Ecken (vertices), die Menge der Kanten (edges). Die Gewichtsfunktion ordnet jeder Kante ein Kantengewicht zu.
Output
Der Algorithmus liefert einen minimalen Spannbaum mit .
Algorithmus
Der Algorithmus von Kruskal arbeitet nicht deterministisch, d.h. er liefert unter Umständen beim wiederholten Ausführen unterschiedliche Ergebnisse. Alle diese Ergebnisse sind minimale Spannbäume von .
: ein zusammenhängender, ungerichteter, kantengewichteter Graph
kruskal(G)
1 Sortiere die Kanten von aufsteigend nach ihrem Kantengewicht.
2
3
4 solange
5 wähle eine Kante mit kleinstem Kantengewicht
6 entferne die Kante aus
7 wenn der Graph keinen Kreis enthält
8 dann
9 ist ein minimaler Spannbaum von .
Derselbe Algorithmus lässt sich analog für einen maximalen Spannbaum anwenden. Sei etwa ein zusammenhängender kantengewichteter Graph. Dann geben wir mit , und im Algorithmus von Kruskal ein. Als Ausgabe erhalten wir schließlich einen minimalen Spannbaum von und somit einen maximalen von .
Korrektheitsbeweis
Sei ein zusammenhängender kantengewichteter Graph und die Ausgabe des Algorithmus von Kruskal. Um nun die Korrektheit des Algorithmus zu beweisen, müssen wir folgendes zeigen:
# der Algorithmus terminiert (er enthält keine Endlosschleife).
# ist ein minimaler Spannbaum von , also:
## ist spannender Untergraph von .
## enthält keinen Kreis.
## ist zusammenhängend.
## ist bezüglich minimal.
Im Nachstehenden geben wir nun Beweisideen, die die Gültigkeit der einzelnen Aussagen darlegen:
;Terminierung : Durch Zeile 6 entfernen wir in jedem Schleifendurchlauf genau ein Element aus . Außerdem wird durch keine weitere Operation verändert. Aus werden wegen Zeile 4 nur solange Elemente entfernt, bis . Da zu Beginn im Algorithmus gesetzt wurde und nach Definition nur endlich ist, wird auch die Schleife nur endlich oft durchlaufen. Wir folgern daraus, dass Kruskals Algorithmus terminiert.
;M ist spannender Untergraph von G : Da die Menge der Knoten nach Definition des Algorithmus bei und gleich ist und wegen Zeile 8 offensichtlich gilt, ist spannender Untergraph von .
;M enthält keinen Kreis : Dass keinen Kreis beinhalten kann, ist durch Zeile 7 trivial.
;M ist zusammenhängend : Wir zeigen nun indirekt, dass zusammenhängend ist. Sei also nicht zusammenhängend. Dann gibt es in zwei Knoten und , die nicht durch einen Weg verbunden sind. Da aber und in durch einen Weg verbunden sind, existiert eine Kante in , welche nicht in vorhanden ist. Der Algorithmus betrachtet in Zeile 7 garantiert jede Kante aus und damit auch . Der Graph in Zeile 7 muss kreisfrei sein, da es zwischen und in keinen Weg gibt. Mit Zeile 8 wird dann in eingefügt. Dies widerspricht allerdings der Tatsache, dass nicht in enthalten ist. Somit ist unsere Annahme hinfällig und doch zusammmenhängend.
;M ist bezüglich G minimal : Dies ergibt sich aus dem allgemeineren Satz, dass jeder Greedy-Algorithmus (wie der Kruskal-Algorithmus einer ist) auf einem Matroid (wie das System der Bäume in einem zusammenhängenden Graph eines ist) eine Lösung minimalen Gewichts findet. In diesem Spezialfall lautet der BeweisHubertus Th. Jongen: Optimierung B. Skript zur Vorlesung, Aachen: Verlag der Augustinus-Buchhandlung, ISBN 3-925038-19-1:
: Bei nur einer Kante kann nichts schiefgehen, die kleinste Kantenzahl, bei der der Algorithmus scheitern kann, muss also größer als 1 sein. Angenommen, bei dieser kleinsten Kantenzahl erzeuge der Algorithmus den Baum , aber sei ein Spannbaum geringeren Gewichts als . Beide Spannbäume enthalten gleich viele Kanten. Sortiert man alle Kanten so, dass leichtere vor schwereren liegen, dann gibt es einen minimalen Index , für den die -te Kante aus schwerer ist als die -te Kante aus . Wir betrachten den Teilbaum , den der Algorithmus nach Hinzunahme der ersten Kanten erzeugt hat. Dann gibt es unter den ersten Kanten aus eine, gegen die ausgetauscht werden kann, so dass sich ein neuer Baum ergibt. ist entweder die -te Kante aus und damit leichter als , oder ist die -te Kante aus (mit

