đ Union Find¶
đ 1ď¸âŁ Begriffe & Grundlagen¶
-
Menge (Set):
Eine Gruppe von Elementen, die zusammengehĂśren.
Beispiel:{1, 2, 3}
ist eine Menge. -
Disjunkte Mengen:
Mengen, die keine gemeinsamen Elemente haben.
Beispiel:{1, 2}
und{3, 4}
sind disjunkt. -
Repräsentant (Root/Wurzel):
Ein "Leader" der Menge.
Jeder Knoten zeigt (direkt oder indirekt) auf diesen Repräsentanten. -
Union-Find (Disjoint-Set Union, DSU):
Eine Datenstruktur, die hilft:- Zu prĂźfen, ob zwei Elemente in derselben Menge sind (
find
). - Zwei Mengen zu einer Menge zu vereinigen (
union
).
- Zu prĂźfen, ob zwei Elemente in derselben Menge sind (
đ Zusammenfassung der wichtigsten Punkte¶
Begriff | Beschreibung |
---|---|
Union | Verbindet zwei Mengen (macht einen gemeinsamen Repräsentanten). |
Find | Findet den Repräsentanten (Wurzel) einer Menge. |
Rank | Schätzung der "Tiefe" des Baumes (hilft, die Struktur beim union flach zu halten). |
Path Compression | Optimiert die find -Methode, indem alle Knoten direkt mit der Wurzel verbunden werden. |
đ 2ď¸âŁ Operationen in Union-Find¶
-
find(x)
â Finde den Repräsentanten der Menge vonx
.- Gibt den "Root" der Menge zurĂźck, zu der
x
gehĂśrt. - Beispiel: In
{1 â 2 â 3}
, ist3
der Repräsentant von1
. -
union(x, y)
â Vereine die Mengen vonx
undy
. -
Falls
x
undy
in verschiedenen Mengen sind â Vereine sie. - Nach
union(x, y)
haben beide Elemente denselben Repräsentanten.
- Gibt den "Root" der Menge zurĂźck, zu der
-
union
(mit Rank):- Bestimmt, wie Mengen zusammengefĂźhrt werden, um die Struktur flach zu halten.
- Flache Bäume â schnellere
find
-Operationen. -
find
(mit Path Compression): -
Optimiert die Struktur nachträglich, wenn wir nach einem Repräsentanten suchen.
- Macht den Baum noch flacher, indem alle Knoten direkt mit der Wurzel verbunden werden.
INITIALISIERE parent[x] = x, rank[x] = 0 fĂźr jedes x
FUNKTION find(x):
WENN parent[x] != x:
parent[x] = find(parent[x]) // Path Compression
GIB parent[x] zurĂźck
FUNKTION union(x, y):
rootX = find(x)
rootY = find(y)
WENN rootX == rootY:
GIB // Schon in derselben Menge
WENN rank[rootX] < rank[rootY]:
parent[rootX] = rootY // rootY bleibt Wurzel
ANDERNFALLS WENN rank[rootX] > rank[rootY]:
parent[rootY] = rootX // rootX bleibt Wurzel
ANDERNFALLS:
parent[rootY] = rootX // Einer wird Wurzel
rank[rootX] += 1 // Rank erhĂśhen
đ Fazit¶
- â Union verbindet zwei Mengen.
- â Find findet den Repräsentanten (Root) einer Menge.
- â Rank sorgt dafĂźr, dass die Bäume flach bleiben.
- â Path Compression macht die Bäume nachträglich noch flacher.
- â
Optimierte Union-Find ist extrem effizient: \(O(\log n)\) bis \(O(1)\) fĂźr
find
undunion
.
Kruskalâs Algorithmus â Schritt-fĂźr-Schritt¶
đ Was ist das Ziel von Kruskalâs Algorithmus?¶
Ziel:
- Finde den Minimalen Spannbaum (MST) eines gewichteten, ungerichteten Graphen.
- Alle Knoten so gĂźnstig wie mĂśglich miteinander verbinden.
Ein Minimaler Spannbaum (MST):
- Verbindet alle Knoten des Graphen.
- Minimiert die Gesamtkosten der Kanten (Summe der Kantengewichte).
- Keine Zyklen â der MST ist ein baumartiges Netzwerk.
đ WofĂźr ist das nĂźtzlich?¶
- â Optimale Netzwerke: Minimierung der Länge von StraĂen, Kabeln, Netzwerken.
- â Kosteneinsparung: Verbindungen herstellen, ohne unnĂśtige "teure" Kanten zu verwenden.
- â Effiziente Ressourcenverteilung: Z.B. in Computernetzwerken, Elektrizitätsnetzen, Transportnetzen.
Grundidee - Wie funktioniert:¶
- Sortiere alle Kanten nach ihrem Gewicht (aufsteigend).
- FĂźge die leichteste Kante zum MST hinzu, sofern kein Zyklus entsteht.
- Wiederhole, bis der MST alle Knoten verbindet.
đŠ Wichtig:¶
- Um Zyklen zu vermeiden, verwenden wir den Union-Find-Algorithmus.
- Wenn zwei Knoten bereits im selben Set sind â Kante nicht hinzufĂźgen (wĂźrde einen Zyklus bilden).
đ 3ď¸âŁ Beispiel zur Veranschaulichung¶
Stell dir vor, wir wollen Städte (A, B, C, D) mit Stromnetze verbinden. Jedes Stromnetz hat Kosten (Gewicht).
4ď¸âŁ Kruskalâs Algorithmus â Schritt-fĂźr-Schritt¶
Die zentrale Regel:¶
- Elemente dĂźrfen nicht doppelt in dieselbe Menge aufgenommen werden sonst entsteht ein Zyklus
â Schritt 1: Kantenliste aufstellen und sortieren (nach Gewicht)¶
- (A, C) = 1
- (B, D) = 2
- (A, D) = 3
- (A, B) = 4
- (C, D) = 5
â Schritt 2: Kanten auswählen (kein Zyklus bilden)¶
1ď¸âŁ Kante (A, C) = 1
- Verbinden â Kein Zyklus â HinzufĂźgen
2ď¸âŁ Kante (B, D) = 2
- Verbinden â Kein Zyklus â HinzufĂźgen
3ď¸âŁ Kante (A, D) = 3
- Verbinden â Kein Zyklus â HinzufĂźgen
4ď¸âŁ Kante (A, B) = 4
- WĂźrde einen Zyklus bilden (AâDâB) â Nicht hinzufĂźgen
5ď¸âŁ Kante (C, D) = 5
- WĂźrde einen Zyklus bilden (CâAâD) â Nicht hinzufĂźgen
đ Ergebnis:¶
- Minimaler Spannbaum (MST):
- Kanten: (A, C), (B, D), (A, D)
- Gesamtkosten: 1 + 2 + 3 = 6
đ 6ď¸âŁ Vergleich: Mit und ohne Kruskal¶
Ohne Kruskal (beliebige Verbindungen) | Mit Kruskal (MST) |
---|---|
AâB = 4 | AâC = 1 |
AâC = 1 | BâD = 2 |
BâD = 2 | AâD = 3 |
AâD = 3 | Gesamtkosten = 6 |
CâD = 5 | |
Gesamtkosten = 15 |
- Ohne Kruskal: Wir kĂśnnten unnĂśtig teure Kanten verwenden.
- Mit Kruskal: Wir verwenden nur die gĂźnstigsten Kanten, um alle zu verbinden.