Informatik · Klasse 11–13 · aktualisiert
Minimaler Spannbaum: Kruskal und Prim verstehen
Du lernst, was ein minimaler Spannbaum ist, führst Kruskal und Prim Schritt für Schritt aus und unterscheidest ihn von einem kürzesten Weg.
0 von 13 Aufgaben gelöst
Kurz gesagt
Ein minimaler Spannbaum verbindet alle Knoten eines zusammenhängenden, gewichteten Graphen ohne Kreis. Die Summe der Kantengewichte ist dabei so klein wie möglich. Kruskal und Prim berechnen ihn. Ein kürzester Pfad verbindet dagegen nur zwei bestimmte Knoten.
Ein Netzbetreiber will mehrere Städte verbinden und möglichst wenig Geld für Kabel ausgeben. Er braucht kein Kabel zu viel, aber jede Stadt muss erreichbar sein. Genau dafür gibt es minimale Spannbäume. Hier lernst du, wie du sie erkennst, berechnest und von kürzesten Wegen unterscheidest.
Deine Lernziele
Hake ab, was du schon kannst. Löst du alle Aufgaben eines Abschnitts, hakt Mela das Ziel für dich ab.
4 Abschnitte
Zuerst die Bausteine. Ein Graph besteht aus Knoten (Punkten) und Kanten (Verbindungen). Ungerichtet heißt: Die Kanten haben keine Richtung. Ein Pfad ist ein Weg, der keinen Knoten doppelt benutzt. Ein Kreis ist ein Weg, der wieder zum Startknoten zurückführt. Zusammenhängend heißt: Von jedem Knoten kommst du zu jedem anderen.
Ein Baum ist ein zusammenhängender, kreisfreier, ungerichteter Graph. Ein Baum mit n Knoten hat genau n − 1 Kanten. Zwischen je zwei Knoten gibt es genau einen Pfad. Entfernst du eine beliebige Kante, hängt der Baum nicht mehr zusammen. Fügst du zwischen zwei beliebigen Knoten eine weitere Kante hinzu, entsteht ein Kreis.
Ein Spannbaum eines Graphen ist ein Teilgraph, der ein Baum ist und alle Knoten des Graphen enthält. Andere Namen sind „aufspannender Baum“ und „Gerüst“. Spannbäume gibt es nur in zusammenhängenden Graphen. Einen Spannbaum, der nicht unbedingt minimal ist, findest du auch mit Breitensuche oder Tiefensuche.
In einem Graphen mit Kantengewichten (zum Beispiel Kabelkosten) ist das Gewicht des Graphen die Summe seiner Kantengewichte. Ein Spannbaum heißt minimal, wenn es im selben Graphen keinen anderen Spannbaum mit geringerem Gewicht gibt. Man schreibt oft MST, nach dem englischen Minimum Spanning Tree. Sind alle Kantengewichte verschieden, gibt es genau einen minimalen Spannbaum.
Definition
Spannbaum
Ein Spannbaum ist ein Teilgraph eines ungerichteten Graphen, der ein Baum ist und alle Knoten des Graphen enthält.
Definition
Minimaler Spannbaum
Ein Spannbaum ist minimal, wenn es im selben Graphen keinen anderen Spannbaum mit geringerem Gewicht gibt. Das Gewicht ist die Summe der Kantengewichte.
Beispiel: Der vollständige Graph mit 4 Knoten
- 1Vollständig heißt hier: Jeder Knoten ist direkt mit jedem anderen verbunden. Dieser Graph heißt K₄.
- 2Er hat 4 hoch (4 − 2) = 4² = 16 verschiedene Spannbäume.
- 3Jeder dieser Spannbäume hat 4 Knoten und damit genau 3 Kanten (n − 1 = 3).
Teste dich
Kruskal arbeitet in zwei Phasen. Erst sortierst du alle Kanten aufsteigend nach ihrem Gewicht. Dann gehst du die sortierten Kanten der Reihe nach durch. Du wählst jeweils die kürzeste noch nicht gewählte Kante, die mit den schon gewählten Kanten keinen Kreis bildet. „Kürzeste Kante“ heißt: die Kante mit dem kleinsten Kantengewicht. Der Graph muss dafür zusammenhängend, kantengewichtet und endlich sein.
Sind mehrere Kanten gleich leicht, darfst du eine beliebige davon zuerst nehmen. Deshalb kann Kruskal bei gleichen Gewichten bei jedem Durchlauf andere Ergebnisse liefern. Alle diese Ergebnisse sind minimale Spannbäume.
Prim startet mit einem einzigen beliebigen Knoten als Baum T. In jedem Schritt suchst du die Kante mit minimalem Gewicht, die einen weiteren Knoten mit T verbindet. Diese Kante und der neue Knoten kommen zu T. Du wiederholst das, bis alle Knoten in T sind. Dann ist T ein minimaler Spannbaum. Der Startknoten ist frei wählbar.
Beide Verfahren sind zwei Wege zum minimalen Spannbaum. Im Beispiel unten kennst du nicht alle Gewichte, denn es kommt nur auf die Reihenfolge und die Kreisprüfung an.
Beispiel: Kruskal an einem Graphen mit den Knoten A bis G
- 1AD und CE sind am kürzesten. Beide wären erlaubt, AD wird zufällig gewählt.
- 2CE ist nun die kürzeste noch nicht gewählte Kante und bildet mit AD keinen Kreis: gewählt.
- 3DF hat Länge 6 und bildet keinen Kreis: gewählt.
- 4AB und BE haben beide Länge 7. AB wird zufällig gewählt. BD würde einen Kreis bilden und wird verworfen.
- 5BE (Länge 7) bildet keinen Kreis: gewählt. BC, DE und FE würden Kreise bilden und werden verworfen.
- 6EG (Länge 9) wird als letzte gewählt, FG wird verworfen. Die gewählten Kanten sind ein minimaler Spannbaum.
Merke: Kruskal: Kanten aufsteigend sortieren, der Reihe nach prüfen, bei Kreis verwerfen. Prim: bei einem beliebigen Knoten starten, immer die leichteste Kante zu einem neuen Knoten nehmen.
Teste dich
Bei Kruskal entscheidet allein der Kreis. Eine Kante kommt in den Baum, wenn sie zwei Knoten verbindet, die noch nicht durch einen Pfad schon gewählter Kanten verbunden sind. Sind beide Knoten schon verbunden, würde die Kante einen Kreis schließen. Dann wird sie verworfen und danach nicht mehr betrachtet. Im Beispiel mit den Knoten A bis G gilt das für BD.
Auch gleich lange Kanten werden einzeln geprüft. Im Beispiel wird nach AB (Länge 7) auch BE (Länge 7) gewählt, weil BE keinen Kreis bildet. Die Kante EG ist die letzte, weil alle kürzeren oder gleich langen Kanten schon gewählt sind oder einen Kreis bilden würden.
Bei Prim musst du keinen Kreis prüfen. Prim betrachtet nur Kanten, die einen Knoten außerhalb des Baums mit dem Baum verbinden. Deshalb entsteht nie ein Kreis. Führen zwei Kanten zum selben neuen Knoten, nimmst du nur die leichtere. Wichtig: Es muss immer die aktuell leichteste Kante gewählt werden, sonst ist das Ergebnis nicht korrekt.
Beispiel: Prim mit Start bei D im Graphen mit den Knoten A bis G
- 1Von D aus erreichst du A, B, E und F. DA hat das geringste Gewicht: A kommt mit DA in den Baum.
- 2Nun stehen AB oder DB (für B), DE (für E) und DF (für F) zur Wahl. DF ist am leichtesten: F kommt dazu.
- 3Im letzten Schritt führen EG und FG zu G. EG hat das geringere Gewicht und kommt mit G in den Baum. FG wird nicht gewählt.
Merke: Kruskal fragt bei jeder Kante: Sind beide Knoten schon durch einen Pfad verbunden? Wenn ja, wird sie verworfen. Bei Prim entsteht per Konstruktion kein Kreis.
Teste dich
Ein kürzester Pfad liegt zwischen zwei bestimmten, verschiedenen Knoten. Unter allen Pfaden dazwischen hat er die kleinste Länge bezüglich der Kantengewichte. Haben alle Kanten das Gewicht 1, ist es der Pfad mit den wenigsten Kanten. Der Algorithmus von Dijkstra berechnet kürzeste Pfade von einem Startknoten zu allen übrigen Knoten. Er wählt dafür unter den unbesuchten Knoten den mit der kleinsten Distanz.
Ein minimaler Spannbaum enthält dagegen alle Knoten und hat unter allen Spannbäumen das geringste Gesamtgewicht. Er berechnet sich mit Prim oder Kruskal. Der Baum aus den kürzesten Wegen von einem Startknoten ist zwar ein Spannbaum, aber nicht notwendigerweise minimal.
Ein kleines Beispiel mit vier Knoten: Die Kanten sind A-B (1), B-C (2), C-D (3) und A-D (4). Kruskal verwirft A-D, denn A und D sind dann schon verbunden. Dijkstra mit Start bei A findet aber für D genau die Kante A-D mit Länge 4 als kürzesten Weg. Für C ist der kürzeste Weg A → B → C mit Länge 3. Die Kante A-D gehört also zu einem kürzesten Weg, aber nicht zum minimalen Spannbaum.
Beispiel: Dijkstra-Baum und minimaler Spannbaum mit den Knoten s, a, b
- 1Gegeben sei eine Zahl x größer als 0 und ein Graph mit den Knoten s, a und b.
- 2Ein minimaler Spannbaum besteht aus {a,s} und {a,b} oder aus {b,s} und {a,b}. Sein Gesamtgewicht ist 2 + x.
- 3Dijkstra mit Start s liefert {a,s} und {b,s}. Das Gesamtgewicht dieses Spannbaums ist 2 + 2x.
- 4Wegen x > 0 ist 2 + 2x größer als 2 + x. Der Dijkstra-Baum ist hier nicht minimal.
| Merkmal | Minimaler Spannbaum | Kürzester Pfad |
|---|---|---|
| Welche Knoten? | Alle Knoten des Graphen | Zwei bestimmte, verschiedene Knoten |
| Ziel | Geringstes Gesamtgewicht aller Kanten | Kleinste Länge zwischen den beiden Knoten |
| Berechnung | Prim oder Kruskal | Zum Beispiel Dijkstra |
Teste dich
Alles auf einen Blick
Minimaler Spannbaum
Spannbaum
Teilgraph, der ein Baum ist und alle Knoten des Graphen enthält
Minimal
Kein anderer Spannbaum im selben Graphen hat ein geringeres Gewicht
Kruskal
Kanten aufsteigend sortieren und nur aufnehmen, wenn kein Kreis entsteht
Prim
Mit einem beliebigen Knoten starten, immer die leichteste Kante zu einem neuen Knoten wählen
Kreis
Kruskal verwirft Kreiskanten, bei Prim entsteht per Konstruktion kein Kreis
Unterschied
Der Spannbaum verbindet alle Knoten, der kürzeste Pfad nur zwei bestimmte
Musteraufgabe · Schritt für Schritt
Kruskal und Prim im selben Graphen (Rechenbeispiel)
- 1Graph mit den Knoten A, B, C, D und den Kanten A-B: 4, A-C: 1, B-C: 3, B-D: 2, C-D: 5, A-D: 6.
- 2Kruskal, sortiert: A-C (1), B-D (2), B-C (3), A-B (4), C-D (5), A-D (6).
- 3A-C (1) bildet keinen Kreis: aufgenommen. B-D (2): aufgenommen. B-C (3): aufgenommen, denn A, C und B, D waren noch nicht untereinander verbunden.
- 4A-B (4): verworfen, A und B sind schon verbunden. C-D (5) und A-D (6) werden aus demselben Grund verworfen.
- 5Gesamtgewicht: 1 + 2 + 3 = 6.
- 6Prim mit Start bei A: billigste Kante aus dem Baum heraus ist A-C (1), neu im Baum: C. Dann B-C (3), neu: B. Dann B-D (2), neu: D.
- 7Auch hier gilt: 1 + 3 + 2 = 6. Beide Verfahren liefern das Gesamtgewicht 6.
Fehler finden
Prüfe die Schritte bei Kruskal In einer Zeile steckt ein Fehler. Tippe sie an.
Fehler in Zeile 4Hier wird ein kürzester Weg mit der Kreisprüfung verwechselt. Richtig: A-D (4) wird verworfen, weil A und D schon verbunden sind und ein Kreis entstünde. Der Baum hat dann 3 Kanten und das Gesamtgewicht 6.
Lückentext
Wähl in jeder Lücke das passende Wort und prüf dann deine Antworten.
Ein Baum mit n Knoten hat genau Kanten. Kruskal sortiert die Kanten zuerst nach Gewicht. Eine Kante wird verworfen, wenn ihre beiden Knoten .
Karteikasten
Erst selbst überlegen, dann umdrehen.
Übung mit Feedback