Document

Werbung
Datenstrukturen und
Algorithmen
Union-Find Problem
VO 708.031
D&A: Union-Find Problem
[email protected]
1
Union-Find Problem: Motivation
• Beispielproblem: Konstruktion minimaler Netzwerke
(Minimaler Spannbaum)
• Gegeben: gewichteter Graph G (Gewicht=Kantenlänge)
• Gesucht: Graph mit min. Gewichtssumme der alle Knoten verbindet.
• Kruskal‘s Algorithmus:
– Sortiere die Kanten aufsteigend nach Länge
– Verwalte einen Subgraphen S (anfangs leer)
– Für jede Kante e in sortierter Ordnung:
• Wenn die Endknoten von e nicht verbunden in S sind: zu S hinzufügen.
– Gib S aus.
D&A: Union-Find Problem
[email protected]
2
Union-Find Problem
• Verwaltung von Daten ≙ Mengenoperationen (siehe auch
Wörterbuchproblem, Warteschlange)
• Union-Find-Problem: Wir suchen eine Datenstruktur zur
Verwaltung von disjunkten Teilmengen M1 ,, M t  M  x1 ,, xn 
M i  M j  ,
mit den Operationen
t
M
i
M
i 1
– UNION(Mi, Mj): vereinige Mi und Mj zu einer neuen Menge Mk
– FIND(x): berichte i sodass x ∈ Mi
Anfangszerlegung von M: M1={x1}, ..., Mn={xn}
D&A: Union-Find Problem
[email protected]
3
Union-Find Problem : Lösung 1
• Lösung 1 (favorisiert FINDS):
Speichere jedes Mi als Baum der Höhe 1
xj
• Blätter speichern die Elemente von Mi in
beliebiger Reihenfolge
• Wurzel speichert den Mengenindex, i
• Zeiger auf jedes xj verfügbar (kein Suchen,
xj in O(1) Zeit erreichbar)
– FIND: Zeiger zur Wurzel; O(1) Zeit
– UNION: Umhängen der Blätter; O(k) Zeit, wenn k Blätter umgehängt
D&A: Union-Find Problem
[email protected]
4
Union-Find Problem: Lösung 1
• Lösung 1:
– Worst case für UNION:
– Modifikation: Hänge immer die kleinere Menge um (weighted-union
heuristic)
Satz: Eine Folge von n-1 UNIONs und f FINDs benötigt
O(n log n + f) Zeit.
D&A: Union-Find Problem
[email protected]
5
Union-Find-Problem : Lösung 2
• Lösung 2 (favorisiert UNIONS):
Speichere jedes Mi als Baum
• Knoten speichern die Elemente von Mi in
beliebiger Reihenfolge
• Wurzel speichert zusätzlich den
Mengenindex i, und die Größe |Mi|
• Zeiger auf jedes xj verfügbar
(kein Suchen, xj in O(1) Zeit erreichbar)
– FIND(x): Laufe zur Wurzel, O(Tiefe(x)) Zeit
– UNION: Hänge einen Baum an die Wurzel des anderen, O(1) Zeit
D&A: Union-Find Problem
[email protected]
6
Union-Find-Problem : Lösung 2
• Baum kann entarten: worst case für FIND: Θ(n)
• 1. Modifikation (union by rank):
– UNION: Wurzel des Baums der kleineren Menge wird zum Sohn der
Wurzel des größeren Baums
j,5 9
i,4
Satz: Eine Folge von n-1 UNIONs und f FINDs benötigt
O(n + f log n) Zeit.
D&A: Union-Find Problem
[email protected]
7
Union-Find-Problem : Lösung 2
• 2. Modifikation (path compression)
– Hänge die bei einer FIND-Operation durchlaufenen Knoten direkt an
die Wurzel (spätere FINDs begünstigt)
n-1 UNIONs und f ≥ n FINDs brauchen nur
O(f log*n) Zeit (fast-lineare Lösung)
log*n = min{ i ∈ ℕ | ld(i)n ≤ 1 }
D&A: Union-Find Problem
[email protected]
8
Herunterladen