Informatik

Minimaler Spannbaum: Kruskal und Prim verstehen

Minimaler Spannbaum: Kruskal und Prim verstehen
Minimaler Spannbaum: Kruskal und Prim verstehen
Für Quiz, Lückentext, Lernkarten und Fortschritt ist JavaScript nötig. Alle Inhalte und Lösungen bleiben direkt lesbar.

Ein minimaler Spannbaum verbindet alle Knoten eines gewichteten, ungerichteten Graphen mit möglichst kleinem Gesamtgewicht. Er enthält keinen Kreis. Du kannst ihn zum Beispiel mit dem Kruskal- oder dem Prim-Algorithmus bestimmen.

Deine Lernziele

Hake ab, was du schon kannst — und komm am Ende hierher zurück!

Woran erkennst du einen minimalen Spannbaum?

Ein Graph besteht aus Knoten und Kanten. Bei einem gewichteten Graphen trägt jede Kante eine Zahl, etwa eine Entfernung oder Kostenangabe.

Definition

Spannbaum

Ein Spannbaum enthält alle Knoten des Ausgangsgraphen, ist zusammenhängend und besitzt keinen Kreis. Ein Kreis ist ein geschlossener Weg, der zum Ausgangsknoten zurückführt.

Ein Spannbaum mit $n$ Knoten hat genau $n-1$ Kanten. Hat ein Graph beispielsweise fünf Knoten, benötigt jeder seiner Spannbäume vier Kanten.

Definition

Minimaler Spannbaum

Ein minimaler Spannbaum ist ein Spannbaum, dessen Kantengewichte zusammen die kleinstmögliche Summe ergeben. Die englische Abkürzung lautet MST für Minimum Spanning Tree.

Ein minimaler Spannbaum existiert nur, wenn der ungerichtete Graph zusammenhängend ist. Bei einem nicht zusammenhängenden Graphen entsteht stattdessen ein Spannwald aus mehreren Bäumen.

Merke

„Minimal“ bezieht sich auf die Summe der Kantengewichte – nicht auf die Anzahl der Kanten. Jeder Spannbaum desselben Graphen hat bereits gleich viele Kanten.

Teste dich
Frage 1 von 1LeichtWelche Kantenmenge kann bei fünf Knoten ein Spannbaum sein?
Lösung: Vier Kanten, die alle Knoten kreisfrei verbinden — Ein Baum mit $n$ Knoten besitzt $n-1$ Kanten. Außerdem müssen alle Knoten verbunden sein.
Wie arbeitet der Kruskal-Algorithmus?

Kruskal baut zunächst einen Wald aus einzelnen Knoten auf. Er prüft die Kanten vom kleinsten zum größten Gewicht und verbindet nach und nach verschiedene Komponenten.

  1. Sortiere alle Kanten aufsteigend nach ihrem Gewicht.
  2. Beginne mit allen Knoten, aber ohne Kanten.
  3. Prüfe die Kanten in der sortierten Reihenfolge.
  4. Nimm eine Kante auf, wenn dadurch kein Kreis entsteht.
  5. Beende das Verfahren, sobald $n-1$ Kanten aufgenommen wurden.

Eine Zusammenhangskomponente ist eine Gruppe von Knoten, die bereits durch Wege verbunden sind. Liegen die Endpunkte einer neuen Kante schon in derselben Komponente, würde die Kante einen Kreis schließen.

Beispiel

Gegeben ist ein ungerichteter Graph mit den Knoten A, B, C, D und E.

KanteGewicht
BC1
AB2
DE2
AC3
BD4
CD5
CE6

Kruskal prüft die Kanten in dieser Reihenfolge:

  1. BC mit 1: aufnehmen. B und C werden verbunden.
  2. AB mit 2: aufnehmen. A kommt zur Komponente mit B und C.
  3. DE mit 2: aufnehmen. D und E bilden eine zweite Komponente.
  4. AC mit 3: verwerfen. A und C sind bereits über A–B–C verbunden; AC würde den Kreis A–B–C–A schließen.
  5. BD mit 4: aufnehmen. Die beiden bisherigen Komponenten werden verbunden.

Nun sind alle fünf Knoten durch vier Kanten verbunden. Das Gesamtgewicht beträgt $1+2+2+4=9$.

Bei gleich schweren Kanten kann die Prüfungsreihenfolge variieren. Dadurch können unterschiedliche minimale Spannbäume entstehen. Haben dagegen alle Kanten verschiedene Gewichte, ist der minimale Spannbaum eindeutig.

Teste dich
Frage 1 von 1MittelWarum wird im Beispiel die Kante AC verworfen?
Lösung: Ihre Endpunkte sind bereits durch einen Weg verbunden. — Über A–B–C besteht bereits ein Weg. Die zusätzliche Kante AC würde deshalb einen Kreis erzeugen.
Warum führen günstige Kanten zum richtigen Ergebnis?

Kruskal handelt greedy: Der Algorithmus trifft jeweils eine dauerhaft gültige, möglichst günstige Entscheidung. Die Begründung dafür liefert die Schnitteigenschaft.

Definition

Schnitt

Ein Schnitt teilt die Knoten in zwei Gruppen. Eine Kante kreuzt den Schnitt, wenn ihre Endpunkte in verschiedenen Gruppen liegen. Der Schnitt ist mit den bereits gewählten Kanten verträglich, wenn keine von ihnen ihn kreuzt.

Unter den Kanten, die einen solchen verträglichen Schnitt kreuzen, ist eine Kante mit minimalem Gewicht eine sichere Wahl. Angenommen, ein minimaler Spannbaum enthält stattdessen eine teurere Kante über denselben Schnitt: Fügt man die leichtere Kante hinzu, entsteht ein Kreis. Entfernt man daraus die andere Schnittkante, bleibt der Graph ein Spannbaum und wird nicht teurer. So entsteht wieder ein minimaler Spannbaum.

Bei Kruskal bilden die bisherigen Komponenten die entscheidenden Gruppen. Die nächste zulässige Kante verbindet zwei dieser Komponenten mit dem kleinsten noch verfügbaren Gewicht.

Merke

Eine günstige Kante darf nicht allein wegen ihres Gewichts gewählt werden. Sie muss zwei verschiedene Komponenten verbinden und darf keinen Kreis schließen.

Teste dich
Frage 1 von 1MittelWelche Kante ist nach der Schnitteigenschaft eine sichere Wahl?
Lösung: Eine leichteste Kante über einen geeigneten Schnitt — Eine leichteste Schnittkante kann gegen eine mindestens gleich schwere Schnittkante ausgetauscht werden, ohne die Minimalität zu verlieren.
Wie wächst ein Spannbaum mit Prim?

Prim beginnt nicht mit einem Wald, sondern mit einem beliebigen Startknoten. Von dort wächst genau ein zusammenhängender Baum.

  1. Wähle einen Startknoten.
  2. Betrachte alle Kanten vom bisherigen Baum zu noch nicht aufgenommenen Knoten.
  3. Wähle darunter eine Kante mit kleinstem Gewicht.
  4. Füge die Kante und den neuen Knoten hinzu.
  5. Wiederhole dies, bis alle Knoten enthalten sind.
Beispiel

Prim startet im Beispielgraphen bei A:

  1. Von A führen AB mit 2 und AC mit 3 nach außen. Prim wählt AB.
  2. Vom Baum mit A und B führen unter anderem BC mit 1 und BD mit 4 nach außen. Prim wählt BC.
  3. Vom Baum mit A, B und C ist BD mit 4 die günstigste Verbindung zu einem neuen Knoten.
  4. Nun verbindet DE mit 2 den letzten Knoten E mit dem Baum.

Der Spannbaum enthält AB, BC, BD und DE. Sein Gesamtgewicht ist wieder $2+1+4+2=9$.

Der Startknoten darf beliebig gewählt werden. Bei Gewichtsgleichständen können verschiedene Entscheidungen zu verschiedenen, aber gleich teuren minimalen Spannbäumen führen.

Teste dich
Frage 1 von 1MittelPrim hat bereits die Knoten A, B und C aufgenommen. Welche Kante wählt er im Beispiel als Nächstes?
Lösung: BD mit Gewicht 4 — Prim vergleicht nur Kanten, die vom aktuellen Baum zu einem noch nicht aufgenommenen Knoten führen. Unter BD, CD und CE ist BD am günstigsten.
Wie unterscheiden sich Kruskal, Prim und kürzeste Wege?

Kruskal und Prim lösen dasselbe Problem, treffen ihre Auswahl aber aus unterschiedlichen Mengen.

MerkmalKruskalPrim
Startalle Knoten, keine Kantenein beliebiger Startknoten
ZwischenzustandWald aus mehreren Komponentenein zusammenhängender Baum
nächste Wahlglobal günstigste kreisfreie Kantegünstigste Kante vom Baum zum Rest
typische DatenstrukturUnion-FindPrioritätswarteschlange oder Heap

Union-Find verwaltet die Komponenten bei Kruskal. Find prüft, ob zwei Knoten bereits zur gleichen Komponente gehören. Union vereinigt zwei Komponenten nach der Aufnahme einer Kante.

Ein minimaler Spannbaum ist kein kürzester Weg. Beim minimalen Spannbaum soll die gesamte Verbindung aller Knoten möglichst wenig kosten. Ein Kürzeste-Wege-Verfahren minimiert dagegen die Weglänge zwischen bestimmten Knoten oder von einem Startknoten zu anderen Knoten.

Lückentext

Wähle in jeder Lücke die passende Form und prüfe anschließend deine Antworten.

Kruskal lässt zunächst einen wachsen. Prim erweitert immer einen . Beide minimieren das .

Lösungen: Lücke 1: Wald; Lücke 2: zusammenhängenden Baum; Lücke 3: Gesamtgewicht des Spannbaums. Kruskal kann mehrere getrennte Komponenten besitzen, während Prims Zwischenstruktur stets zusammenhängend ist. Das gemeinsame Ziel ist die kleinste Summe aller Baumkanten.
Karteikasten
Karteikasten

Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.

Alles auf einen Blick
Mindmap
  • Minimaler Spannbaum
    • Eigenschaften: alle Knoten verbunden, keine Kreise, kleinstes Gesamtgewicht
    • Kruskal: Kanten sortieren, Komponenten verbinden, Kreise vermeiden
    • Prim: Startknoten wählen, Baum über günstigste ausgehende Kanten erweitern
    • Abgrenzung: Gesamtvernetzung statt kürzester Einzelweg
Abschluss-Check
Teste dich
Frage 1 von 3LeichtWelche Aussage gilt für jeden Spannbaum mit $n$ Knoten?
Lösung: Er besitzt genau $n-1$ Kanten. — Zusammenhang und Kreisfreiheit führen bei $n$ Knoten genau zu $n-1$ Kanten.
Frage 2 von 3MittelKruskal hat im Beispiel BC, AB und DE aufgenommen. Was geschieht mit AC?
Lösung: AC wird verworfen, weil A und C bereits verbunden sind. — A und C liegen schon in der Komponente mit A, B und C. AC würde den Kreis A–B–C–A erzeugen.
Frage 3 von 3SchwerEin Unternehmen möchte fünf Standorte mit minimalen gesamten Leitungskosten verbinden. Welches Ziel passt dazu?
Lösung: Einen minimalen Spannbaum konstruieren — Gesucht ist eine Verbindung aller Standorte mit minimaler Gesamtsumme. Genau dieses Ziel beschreibt der minimale Spannbaum.

Du bist fertig, wenn du bei jeder gewählten Kante zwei Fragen beantworten kannst: Verbindet sie die richtigen Teile des Graphen? Und: Warum ist keine zulässige günstigere Wahl nötig?

Passend dazu