VL-16: Minimale Spannbäume
(Datenstrukturen und Algorithmen, SS 2017)
Walter Unger
Organisatorisches
• Vorlesung: Gerhard Woeginger (Zimmer 4024 im E1) Sprechstunde: Mittwoch 11:15–12:00
• Übungen: Tim Hartmann, David Korzeniewski, Björn Tauer Email: dsal-i1@algo.rwth-aachen.de
• Webseite:http://algo.rwth-aachen.de/Lehre/SS17/DSA.php
• Nächste Vorlesung:
Donnerstag, Jun 29, 10:15–11:45 Uhr, Aula 1
Minimale Spannbäume
• Bäume & Spannbäume
• Algorithmus von Kruskal
• Algorithmus von Prim
• Implementierung & Komplexität
Spannbaum Probleme
Spannbaum
EinSpannbaumeines ungerichteten, zusammenhängenden Graphen G= (V,E)ist einTeilgraphvonG, der (i) ein ungerichteterBaumist und (ii) alle Knoten vonG enthält.
Beispiel (Spannbaum Probleme)
Alle Kunden durch Glasfaserkabel verbinden Computernetzwerke verkabeln
Verdrahtung von Schaltungen beim Chipdesign
Den Strassenbelag zwischen allen Flughafenterminals erneuern . . . .
Spannbaum Probleme
Spannbaum
EinSpannbaumeines ungerichteten, zusammenhängenden Graphen G= (V,E)ist einTeilgraphvonG, der (i) ein ungerichteterBaumist und (ii) alle Knoten vonG enthält.
Beispiel (Spannbaum Probleme)
Alle Kunden durch Glasfaserkabel verbinden Computernetzwerke verkabeln
Verdrahtung von Schaltungen beim Chipdesign
Den Strassenbelag zwischen allen Flughafenterminals erneuern
Beispiel: Glasfasernetz
Müssen alle Leitungen erneuert werden?
Wie wählt man die zu erneuernden Abschnitte aus? Gibt es eine eindeutige Lösung? so dass
Alle Kunden profitieren Jeder mit jedem über Glasfaser kommunizieren kann
Sparsamkeit: keine doppelte Verbindungen
Beispiel: Glasfasernetz
Müssen alle Leitungen erneuert werden?
Wie wählt man die zu erneuernden Abschnitte aus?
Gibt es eine eindeutige Lösung?
so dass
Alle Kunden profitieren Jeder mit jedem über Glasfaser kommunizieren kann
Sparsamkeit: keine doppelte Verbindungen
Beispiel: Glasfasernetz
Müssen alle Leitungen erneuert werden?
Wie wählt man die zu erneuernden Abschnitte aus?
Gibt es eine eindeutige Lösung?
so dass
Alle Kunden profitieren Jeder mit jedem über Glasfaser kommunizieren kann
Sparsamkeit: keine doppelte Verbindungen
Beispiel: Telefonleitungsnetz
Beispiel: Zwei Abdeckungen
Alle Kunden sind angeschlossen
. . .und sind miteinander verbunden
Beispiel: Zwei Abdeckungen
Alle Kunden sind angeschlossen . . .und sind miteinander verbunden
Ein wenig Mathematik
Einige Fakten über Bäume (1)
Satz
Die folgenden vier Aussagen sind fürT = (V,E)äquivalent:
(1) T ist ein Baum
(2) Je zwei Knoten sind durchgenaueinen Weg verbunden (3) |E|=|V| −1 undT ist zusammenhängend
(4) |E|=|V| −1 undT ist kreis-frei
(1)⇔(2):
• T zusammenhängend ⇔mindestens ein Pfad zwischenuundv
• T kreis-frei⇔höchstens ein Pfad zwischenuund v (1)⇔(3) und (1)⇔(4) folgen mit ähnlichen Argumenten
Einige Fakten über Bäume (1)
Satz
Die folgenden vier Aussagen sind fürT = (V,E)äquivalent:
(1) T ist ein Baum
(2) Je zwei Knoten sind durchgenaueinen Weg verbunden (3) |E|=|V| −1 undT ist zusammenhängend
(4) |E|=|V| −1 undT ist kreis-frei (1)⇔(2):
• T zusammenhängend ⇔mindestens ein Pfad zwischen uundv
• T kreis-frei⇔höchstens ein Pfad zwischenuund v
(1)⇔(3) und (1)⇔(4) folgen mit ähnlichen Argumenten
Einige Fakten über Bäume (1)
Satz
Die folgenden vier Aussagen sind fürT = (V,E)äquivalent:
(1) T ist ein Baum
(2) Je zwei Knoten sind durchgenaueinen Weg verbunden (3) |E|=|V| −1 undT ist zusammenhängend
(4) |E|=|V| −1 undT ist kreis-frei (1)⇔(2):
• T zusammenhängend ⇔mindestens ein Pfad zwischen uundv
• T kreis-frei⇔höchstens ein Pfad zwischenuund v
Einige Fakten über Bäume (2)
Satz
Ein Baum ist (i) maximal kreisfrei und (ii) minimal zusammenhängend.
Fügt man eine Kante zu einem Baum hinzu, so entsteht ein Kreis.
Löscht man eine Kante, so erhält man zwei Zusammenhangskomponenten.
Einige Fakten über Bäume (3)
Satz
1 Ein Baum mitnKnoten hatn−1 Kanten
2 In einem Baum mitnKnoten giltP
v∈Vdeg(v) =2n−2
3 Jeder Baum (mitn≥2 Knoten) hat mindestens 2 Blätter
Satz (Austauschsatz)
Es seiT = (V,E0)ein spannender Baum vonG = (V,E). Es seie∈E−E0.
Der Graph (V,E0∪ {e})enthält einen einzigen KreisC. Für jede Kante f ∈C gilt:(V,E0∪ {e} − {f})ist ein Baum.
Einige Fakten über Bäume (3)
Satz
1 Ein Baum mitnKnoten hatn−1 Kanten
2 In einem Baum mitnKnoten giltP
v∈Vdeg(v) =2n−2
3 Jeder Baum (mitn≥2 Knoten) hat mindestens 2 Blätter
Satz (Austauschsatz)
Es seiT = (V,E0)ein spannender Baum vonG = (V,E).
Es seie∈E−E0.
Der Graph (V,E0∪ {e})enthält einen einzigen KreisC.
Für jede Kante f ∈C gilt:(V,E0∪ {e} − {f})ist ein Baum.
Anzahl der Spannbäume (1)
Drei Spannbäume fürn=3 Knoten
Die Cayley Formel
Der vollständige Graph mitnKnoten hatnn−2Spannbäume.
Anzahl der Spannbäume (2)
Wie man einen Baum in einen Prüfer-Code übersetzt
1 R e p e a t
2 B e s t i m m e B l a t t x mit k l e i n s t e r N u m m e r 3 L o e s c h e x und i n z i d e n t e K a n t e { x , y } 4 S p e i c h e r e y im T u p e l
5 U n t i l ( nur n o c h e i n e e i n z i g e K a n t e u e b r i g )
• Knoten mit Gradd kommt genau(d−1)-mal im Prüfer-Code vor
• Verschiedene Bäume führen zu verschiedenen Prüfer-Codes
Anzahl der Spannbäume (3)
2 7 1 4 3
6 8 5
Prüfer-Code: 7, 4, 4, 1, 7, 1
Anzahl der Spannbäume (4)
Prüfer-Code =(t(1),t(2), . . . ,t(n−2))
Wie man einen Prüfer-Code in einen Baum zurückübersetzt
1 S e t z e t ( n -1) := n ; 2
3 For i =1 to n -1 do {
4 B e s t i m m e die k l e i n s t e Z a h l b ( i ) , die 5 w e d e r u n t e r b (1) ,... , b ( i -1)
6 n o c h u n t e r t ( i ) ,... , t ( n -1) v o r k o m m t
7 }
8
9 B i l d e B a u m aus den n -1 K a n t e n { b ( i ) , t ( i ) }
Minimale Spannbäume
Nun kommen die Kosten ins Bild
Beispiel
Finde den kostengünstigstenWeg, um eine Menge von Flughafenterminals, Städten, . . . zu verbinden
Verdrahtung von Schaltungen mit geringstemEnergieverbrauch Verbinde alle Kunden kostengünstigstdurch Glasfaserkabeln Computernetzwerke verkabeln
Das ist unsere Motivation für (kosten-)minimale Spannbäume!
Nun kommen die Kosten ins Bild
Beispiel
Finde den kostengünstigstenWeg, um eine Menge von Flughafenterminals, Städten, . . . zu verbinden
Verdrahtung von Schaltungen mit geringstemEnergieverbrauch Verbinde alle Kunden kostengünstigstdurch Glasfaserkabeln Computernetzwerke verkabeln
Das ist unsere Motivation für (kosten-)minimale Spannbäume!
Beispiel: Leitungskosten
Verschiedene Umgebungen verursachen verschiedene Kosten für die Verlegung von Kabeln.
Geschichtlicher Rückblick (1)
• 1920s: Elektrifizierung von Süd-West-Mähren
• 1925/26: Jindřich Saxel von Západomoravské Elektrárny (West-Moravian Powerplants) kontaktiert Otakar Borůvka
• Otakar Borůvka (1899–1995): Tschechischer Mathematiker aus Brno
Problem
GegebennPunkte/Orte in der Euklidischen Ebene, verbinde sie durch ein Netz von minimaler Länge
sodass je zwei Punkte entweder direkt oder über eine Folge anderer Punkte mit einander verbunden sind
Geschichtlicher Rückblick (2)
It is evident that a solution of this problem could have some im- portace in electricity power-line network design; hence I present the solution briefly using an example. The reader with a deeper interest in the subject is referred to the above quoted paper.
I shall give a solution of the problem in the case of 40 points given in Fig. 1. I shall join each of the given points with the nearest neighbor. Thus, for example, point 1 with point 2, point 2 with point 3, point3 with point4(point 4with point3), point5 with point 2, point6 with point 5, point 7 with point 6, point 8 with point 9, (point 9with point8), etc. I shall obtain a sequence of polygonal strokes1,2, . . . ,13(Fig. 2).
I shall join each of these strokes with the nearest stroke in the short- est possible way. Thus, for example, stroke1with stroke2, (stroke 2with stroke1), stroke3with stroke4, (stroke4with stroke3), etc.
I shall obtain a sequence of polygonal strokes 1,2, . . . ,4(Fig. 3) I shall join each of these strokes in the shortest way with the nearest stroke. Thus stroke1with stroke3, stroke2with stroke3(stroke3 with stroke1), stroke4with stroke1. I shall finally obtain a single polygonal stroke (Fig. 4), which solves the given problem.
Geschichtlicher Rückblick (3)
Was ist ein minimaler Spannbaum?
Kantengewichteter ungerichteter Graph
Ein(kanten-)gewichteterGraphG ist ein Tripel(V,E,w), wobei:
(V,E)ein ungerichteter Graph ist, und
w :E →RGewichtsfunktion.w(e)ist dasGewichtder Kantee.
Gewicht eines Graphen
DasGewichtw(G0)eines Teilgraphens G0= (V0,E0)des gewichteten GraphenG ist:w(G0) = X
e∈E0
w(e).
Minimaler Spannbaum (MST)
Ein Spannbaum des (ungerichteten, gewichteten, zusammenhängenden) GraphensG mit minimalem Gewicht heisstMinimaler Spannbaum (minimum spanning tree, MST) vonG.
Was ist ein minimaler Spannbaum?
Kantengewichteter ungerichteter Graph
Ein(kanten-)gewichteterGraphG ist ein Tripel(V,E,w), wobei:
(V,E)ein ungerichteter Graph ist, und
w :E →RGewichtsfunktion.w(e)ist dasGewichtder Kantee.
Gewicht eines Graphen
DasGewichtw(G0)eines Teilgraphens G0= (V0,E0)des gewichteten GraphenG ist:w(G0) =X
e∈E0
w(e).
Minimaler Spannbaum (MST)
Ein Spannbaum des (ungerichteten, gewichteten, zusammenhängenden) GraphensG mit minimalem Gewicht heisstMinimaler Spannbaum (minimum spanning tree, MST) vonG.
Was ist ein minimaler Spannbaum?
Kantengewichteter ungerichteter Graph
Ein(kanten-)gewichteterGraphG ist ein Tripel(V,E,w), wobei:
(V,E)ein ungerichteter Graph ist, und
w :E →RGewichtsfunktion.w(e)ist dasGewichtder Kantee.
Gewicht eines Graphen
DasGewichtw(G0)eines Teilgraphens G0= (V0,E0)des gewichteten GraphenG ist:w(G0) =X
e∈E0
w(e).
Minimaler Spannbaum (MST)
Ein Spannbaum des (ungerichteten, gewichteten, zusammenhängenden) GraphensG mit minimalem Gewicht heisstMinimaler Spannbaum (minimum spanning tree, MST) vonG.
Minimaler Spannbaum: Beispiel (1)
A
B
C
D
E
F G
H
14 6
10 5 5
3 3
4 4
8 8
2
15
15
9
9
Minimaler Spannbaum: Beispiel (2)
A
B
C
D
E
F G
H
14 6
10 5 5
3 3
4 4
8 8
2
15 15 9 9
Die roten Kanten zeigen einen MST mit Gesamtgewicht 46.
In diesem Fall ist der MST eindeutig.
Tiefensuche? Breitensuche?
A
B
C
D
E
F G
H 14
6
10 5 5
3 3
4 4
8 8
2 15 15 9 9
Tiefensuchbaum (von A gestartet) Gesamtgewicht: 55
A
B
C
D
E
F G
H 14
6
10 5 5
3 3
4 4
8 8
2 15 15 9 9
Breitensuchbaum (von A gestartet) Gesamtgewicht: 67
Der Tiefensuchbaum und der Breitensuchbaum sind zwar Spannbäume,
Prim und Kruskal
Zwei Algorithmen für MST (1)
Eingabe: ein gewichteter zusammenhängender GraphG mitnKnoten Ausgabe: ein minimaler Spannbaum vonG
Kruskal’s Algorithmus
So lange noch keinen−1 Kanten markiert sind:
1 Wähle eine billigste unmarkierte Kante
2 Markiere sie, falls sie keinen Kreis mit anderen markierten Kanten schliesst
Prim’s Algorithmus
1 Wähle einen Startknoten.
2 Markiere die billigste vom bereits konstruierten Baum ausgehende Kante, die keinen Kreis mit anderen markierten Kanten schliesst
3 Wiederhole Schritt 2., so lange noch keine n−1 Kanten markiert sind.
Zwei Algorithmen für MST (1)
Eingabe: ein gewichteter zusammenhängender GraphG mitnKnoten Ausgabe: ein minimaler Spannbaum vonG
Kruskal’s Algorithmus
So lange noch keinen−1 Kanten markiert sind:
1 Wähle eine billigste unmarkierte Kante
2 Markiere sie, falls sie keinen Kreis mit anderen markierten Kanten schliesst
Prim’s Algorithmus
1 Wähle einen Startknoten.
2 Markiere die billigste vom bereits konstruierten Baum ausgehende Kante, die keinen Kreis mit anderen markierten Kanten schliesst
3 Wiederhole Schritt 2., so lange noch keine n−1 Kanten markiert sind.
Zwei Algorithmen für MST (1)
Eingabe: ein gewichteter zusammenhängender GraphG mitnKnoten Ausgabe: ein minimaler Spannbaum vonG
Kruskal’s Algorithmus
So lange noch keinen−1 Kanten markiert sind:
1 Wähle eine billigste unmarkierte Kante
2 Markiere sie, falls sie keinen Kreis mit anderen markierten Kanten schliesst
Prim’s Algorithmus
1 Wähle einen Startknoten.
2 Markiere die billigste vom bereits konstruierten Baum ausgehende
Zwei Algorithmen für MST (2)
Kruskal’s Algorithmus wurde entdeckt:
• 1956 von Joseph Kruskal (Amerikanischer Mathematiker)
Prim’s Algorithmus wurde entdeckt:
• 1930 von Vojtech Jarnik (Tschechischer Mathematiker)
• 1957 von Robert Clay Prim (Amerikanischer Mathematiker)
• 1959 von Edsger Wybe Dijkstra (Niederländischer Mathematiker) Ist auch unter den Namen Prim-Jarnik und Prim-Dijkstra bekannt.
Beispiel: Das Inselreich der Algolaner
Korrektheit von Prim und Kruskal
Das Hauptwerkzeug
Definition
Eine KantenmengeF⊆E in GraphenG = (V,E,w)heissttschechisch, falls es einen MST gibt, der alle Kanten inF enthält.
Satz
Es seiF ⊆E eine tschechische Kantenmenge vonG= (V,E,w). Es seiU ⊆V eine Zusammenhangskomponente von(V,F). Es seie eine Kante mit kleinstem Gewicht zwischenU undV −U.
Dann gilt:F∪ {e}ist ebenfalls tschechisch Beweisskizze: Betrachte MST(V,F0)mitF⊆F0.
• (V,F0∪ {e})enthält KreisC. KreisC verwendet mindestens zwei Kantene undf zwischenU undV −U.
• w(f)≥w(e)
• Austauschsatz:(V,F0∪ {e} − {f})ist Baum
• Ergo:w(f) =w(e)und(V,F0∪ {e} − {f})ist MST
• Ergo:F∪ {e} ist tschechisch
Das Hauptwerkzeug
Definition
Eine KantenmengeF⊆E in GraphenG = (V,E,w)heissttschechisch, falls es einen MST gibt, der alle Kanten inF enthält.
Satz
Es seiF ⊆E eine tschechische Kantenmenge vonG= (V,E,w).
Es seiU ⊆V eine Zusammenhangskomponente von(V,F).
Es seie eine Kante mit kleinstem Gewicht zwischenU undV −U.
Dann gilt:F∪ {e}ist ebenfalls tschechisch
Beweisskizze: Betrachte MST(V,F0)mitF⊆F0.
• (V,F0∪ {e})enthält KreisC. KreisC verwendet mindestens zwei Kantene undf zwischenU undV −U.
• w(f)≥w(e)
• Austauschsatz:(V,F0∪ {e} − {f})ist Baum
• Ergo:w(f) =w(e)und(V,F0∪ {e} − {f})ist MST
• Ergo:F∪ {e} ist tschechisch
Das Hauptwerkzeug
Definition
Eine KantenmengeF⊆E in GraphenG = (V,E,w)heissttschechisch, falls es einen MST gibt, der alle Kanten inF enthält.
Satz
Es seiF ⊆E eine tschechische Kantenmenge vonG= (V,E,w).
Es seiU ⊆V eine Zusammenhangskomponente von(V,F).
Es seie eine Kante mit kleinstem Gewicht zwischenU undV −U.
Dann gilt:F∪ {e}ist ebenfalls tschechisch Beweisskizze: Betrachte MST(V,F0)mitF⊆F0.
• (V,F0∪ {e})enthält KreisC. KreisC verwendet mindestens zwei Kantene undf zwischenU undV −U.
• w(f)≥w(e)
• Austauschsatz:(V,F0∪ {e} − {f})ist Baum
• Ergo:w(f) =w(e)und(V,F0∪ {e} − {f})ist MST
• Ergo:F∪ {e} ist tschechisch
Das Hauptwerkzeug
Definition
Eine KantenmengeF⊆E in GraphenG = (V,E,w)heissttschechisch, falls es einen MST gibt, der alle Kanten inF enthält.
Satz
Es seiF ⊆E eine tschechische Kantenmenge vonG= (V,E,w).
Es seiU ⊆V eine Zusammenhangskomponente von(V,F).
Es seie eine Kante mit kleinstem Gewicht zwischenU undV −U.
Dann gilt:F∪ {e}ist ebenfalls tschechisch Beweisskizze: Betrachte MST(V,F0)mitF⊆F0.
• (V,F0∪ {e})enthält KreisC. KreisC verwendet mindestens zwei Kantene undf zwischenU undV −U.
• w(f)≥w(e)
• Austauschsatz:(V,F0∪ {e} − {f})ist Baum
• Ergo:w(f) =w(e)und(V,F0∪ {e} − {f})ist MST
• Ergo:F∪ {e} ist tschechisch
Das Hauptwerkzeug
Definition
Eine KantenmengeF⊆E in GraphenG = (V,E,w)heissttschechisch, falls es einen MST gibt, der alle Kanten inF enthält.
Satz
Es seiF ⊆E eine tschechische Kantenmenge vonG= (V,E,w).
Es seiU ⊆V eine Zusammenhangskomponente von(V,F).
Es seie eine Kante mit kleinstem Gewicht zwischenU undV −U.
Dann gilt:F∪ {e}ist ebenfalls tschechisch Beweisskizze: Betrachte MST(V,F0)mitF⊆F0.
• (V,F0∪ {e})enthält KreisC. KreisC verwendet mindestens zwei Kantene undf zwischenU undV −U.
• w(f)≥w(e)
• Austauschsatz:(V,F0∪ {e} − {f})ist Baum
• Ergo:w(f) =w(e)und(V,F0∪ {e} − {f})ist MST
• Ergo:F∪ {e} ist tschechisch
Das Hauptwerkzeug
Definition
Eine KantenmengeF⊆E in GraphenG = (V,E,w)heissttschechisch, falls es einen MST gibt, der alle Kanten inF enthält.
Satz
Es seiF ⊆E eine tschechische Kantenmenge vonG= (V,E,w).
Es seiU ⊆V eine Zusammenhangskomponente von(V,F).
Es seie eine Kante mit kleinstem Gewicht zwischenU undV −U.
Dann gilt:F∪ {e}ist ebenfalls tschechisch Beweisskizze: Betrachte MST(V,F0)mitF⊆F0.
• (V,F0∪ {e})enthält KreisC. KreisC verwendet mindestens zwei Kantene undf zwischenU undV −U.
• w(f)≥w(e)
• Austauschsatz:(V,F0∪ {e} − {f})ist Baum
• Ergo:w(f) =w(e)und(V,F0∪ {e} − {f})ist MST
• Ergo:F∪ {e} ist tschechisch
Das Hauptwerkzeug
Definition
Eine KantenmengeF⊆E in GraphenG = (V,E,w)heissttschechisch, falls es einen MST gibt, der alle Kanten inF enthält.
Satz
Es seiF ⊆E eine tschechische Kantenmenge vonG= (V,E,w).
Es seiU ⊆V eine Zusammenhangskomponente von(V,F).
Es seie eine Kante mit kleinstem Gewicht zwischenU undV −U.
Dann gilt:F∪ {e}ist ebenfalls tschechisch Beweisskizze: Betrachte MST(V,F0)mitF⊆F0.
• (V,F0∪ {e})enthält KreisC. KreisC verwendet mindestens zwei Kantene undf zwischenU undV −U.
• w(f)≥w(e)
• Ergo:F∪ {e} ist tschechisch
Das Hauptwerkzeug
Definition
Eine KantenmengeF⊆E in GraphenG = (V,E,w)heissttschechisch, falls es einen MST gibt, der alle Kanten inF enthält.
Satz
Es seiF ⊆E eine tschechische Kantenmenge vonG= (V,E,w).
Es seiU ⊆V eine Zusammenhangskomponente von(V,F).
Es seie eine Kante mit kleinstem Gewicht zwischenU undV −U.
Dann gilt:F∪ {e}ist ebenfalls tschechisch Beweisskizze: Betrachte MST(V,F0)mitF⊆F0.
• (V,F0∪ {e})enthält KreisC. KreisC verwendet mindestens zwei Kantene undf zwischenU undV −U.
• w(f)≥w(e)
• Austauschsatz:(V,F0∪ {e} − {f})ist Baum
• Ergo:w(f) =w(e)und(V,F0∪ {e} − {f})ist MST
• Ergo:F∪ {e} ist tschechisch
Korrektheit des Algorithmus von Kruskal
Satz
Der Algorithmus von Kruskal bestimmt einen minimalen Spannbaum.
Beweis: Wir zeigen mit vollständiger Induktion überk≥0, dass die erstenk von Kruskal ausgewählten Kanten jeweils eine tschechische Kantenmenge bilden.
• k =0: Die leere Kantenmenge ist tschechisch.
• Induktionsschritt: Die bisher ausgewählten Kanten bilden tschechische KantenmengeF. Kruskal gibt die billigste Kantee zuF dazu, die mitF keinen Kreis schliesst.
Hauptwerkzeug impliziert dassF∪ {e}ebenfalls tschechisch ist
Korrektheit des Algorithmus von Kruskal
Satz
Der Algorithmus von Kruskal bestimmt einen minimalen Spannbaum.
Beweis: Wir zeigen mit vollständiger Induktion überk ≥0, dass die erstenk von Kruskal ausgewählten Kanten jeweils eine tschechische Kantenmenge bilden.
• k =0: Die leere Kantenmenge ist tschechisch.
• Induktionsschritt: Die bisher ausgewählten Kanten bilden tschechische KantenmengeF. Kruskal gibt die billigste Kantee zuF dazu, die mitF keinen Kreis schliesst.
Hauptwerkzeug impliziert dassF∪ {e}ebenfalls tschechisch ist
Korrektheit des Algorithmus von Kruskal
Satz
Der Algorithmus von Kruskal bestimmt einen minimalen Spannbaum.
Beweis: Wir zeigen mit vollständiger Induktion überk ≥0, dass die erstenk von Kruskal ausgewählten Kanten jeweils eine tschechische Kantenmenge bilden.
• k =0: Die leere Kantenmenge ist tschechisch.
• Induktionsschritt: Die bisher ausgewählten Kanten bilden tschechische KantenmengeF. Kruskal gibt die billigste Kantee zuF dazu, die mitF keinen Kreis schliesst.
Hauptwerkzeug impliziert dassF∪ {e}ebenfalls tschechisch ist
Korrektheit des Algorithmus von Kruskal
Satz
Der Algorithmus von Kruskal bestimmt einen minimalen Spannbaum.
Beweis: Wir zeigen mit vollständiger Induktion überk ≥0, dass die erstenk von Kruskal ausgewählten Kanten jeweils eine tschechische Kantenmenge bilden.
• k =0: Die leere Kantenmenge ist tschechisch.
• Induktionsschritt: Die bisher ausgewählten Kanten bilden tschechische KantenmengeF. Kruskal gibt die billigste Kanteezu F dazu, die mitF keinen Kreis schliesst.
Hauptwerkzeug impliziert dassF∪ {e}ebenfalls tschechisch ist
Korrektheit des Algorithmus von Kruskal
Satz
Der Algorithmus von Kruskal bestimmt einen minimalen Spannbaum.
Beweis: Wir zeigen mit vollständiger Induktion überk ≥0, dass die erstenk von Kruskal ausgewählten Kanten jeweils eine tschechische Kantenmenge bilden.
• k =0: Die leere Kantenmenge ist tschechisch.
• Induktionsschritt: Die bisher ausgewählten Kanten bilden tschechische KantenmengeF. Kruskal gibt die billigste Kanteezu F dazu, die mitF keinen Kreis schliesst.
∪ {e}
Korrektheit des Algorithmus von Prim
Satz
Der Algorithmus von Prim bestimmt einen minimalen Spannbaum.
Beweis: Wir zeigen mit vollständiger Induktion überk≥0, dass die erstenk von Prim ausgewählten Kanten jeweils eine tschechische Kantenmenge bilden.
• k =0: Die leere Kantenmenge ist tschechisch.
• Induktionsschritt: Die bisher ausgewählten Kanten bilden tschechische KantenmengeF. Es seiU die Zusammenhangskomponente in(V,F), die den Startknoten enthält. Prim gibt die billigste Kantee zuF dazu, dieU mitV −U verbindet.
Hauptwerkzeug impliziert dassF∪ {e}ebenfalls tschechisch ist
Korrektheit des Algorithmus von Prim
Satz
Der Algorithmus von Prim bestimmt einen minimalen Spannbaum.
Beweis: Wir zeigen mit vollständiger Induktion überk ≥0, dass die erstenk von Prim ausgewählten Kanten jeweils eine tschechische Kantenmenge bilden.
• k =0: Die leere Kantenmenge ist tschechisch.
• Induktionsschritt: Die bisher ausgewählten Kanten bilden tschechische KantenmengeF. Es seiU die Zusammenhangskomponente in(V,F), die den Startknoten enthält. Prim gibt die billigste Kantee zuF dazu, dieU mitV −U verbindet.
Hauptwerkzeug impliziert dassF∪ {e}ebenfalls tschechisch ist
Korrektheit des Algorithmus von Prim
Satz
Der Algorithmus von Prim bestimmt einen minimalen Spannbaum.
Beweis: Wir zeigen mit vollständiger Induktion überk ≥0, dass die erstenk von Prim ausgewählten Kanten jeweils eine tschechische Kantenmenge bilden.
• k =0: Die leere Kantenmenge ist tschechisch.
• Induktionsschritt: Die bisher ausgewählten Kanten bilden tschechische KantenmengeF. Es seiU die Zusammenhangskomponente in(V,F), die den Startknoten enthält. Prim gibt die billigste Kantee zuF dazu, dieU mitV −U verbindet.
Hauptwerkzeug impliziert dassF∪ {e}ebenfalls tschechisch ist
Korrektheit des Algorithmus von Prim
Satz
Der Algorithmus von Prim bestimmt einen minimalen Spannbaum.
Beweis: Wir zeigen mit vollständiger Induktion überk ≥0, dass die erstenk von Prim ausgewählten Kanten jeweils eine tschechische Kantenmenge bilden.
• k =0: Die leere Kantenmenge ist tschechisch.
• Induktionsschritt: Die bisher ausgewählten Kanten bilden tschechische KantenmengeF. Es seiU die Zusammenhangskomponente in(V,F), die den Startknoten enthält.
Prim gibt die billigste Kantee zuF dazu, dieU mitV −U verbindet.
Hauptwerkzeug impliziert dassF∪ {e}ebenfalls tschechisch ist
Korrektheit des Algorithmus von Prim
Satz
Der Algorithmus von Prim bestimmt einen minimalen Spannbaum.
Beweis: Wir zeigen mit vollständiger Induktion überk ≥0, dass die erstenk von Prim ausgewählten Kanten jeweils eine tschechische Kantenmenge bilden.
• k =0: Die leere Kantenmenge ist tschechisch.
• Induktionsschritt: Die bisher ausgewählten Kanten bilden tschechische KantenmengeF. Es seiU die Zusammenhangskomponente in(V,F), die den Startknoten enthält. Prim gibt die billigste Kanteezu F dazu, dieU mitV −U verbindet.
Hauptwerkzeug impliziert dassF∪ {e}ebenfalls tschechisch ist
Korrektheit des Algorithmus von Prim
Satz
Der Algorithmus von Prim bestimmt einen minimalen Spannbaum.
Beweis: Wir zeigen mit vollständiger Induktion überk ≥0, dass die erstenk von Prim ausgewählten Kanten jeweils eine tschechische Kantenmenge bilden.
• k =0: Die leere Kantenmenge ist tschechisch.
• Induktionsschritt: Die bisher ausgewählten Kanten bilden tschechische KantenmengeF. Es seiU die Zusammenhangskomponente in(V,F), die den Startknoten enthält. Prim gibt die billigste Kanteezu F dazu, dieU mitV −U verbindet.
Implementierung & Komplexität
Der Algorithmus von Prim: Übersicht
Wir klassifizieren Knoten in drei Kategorien (BLACK,GRAY, WHITE):
Baumknoten: Knoten, im bis jetzt konstruierten Baum (BLACK) Randknoten: Nicht im Baum; adjazent zu Knoten im Baum (GRAY)
Ungesehen: Alle anderen Knoten (WHITE)
Grundkonzept von Prim:
Fange mit einem Baum an, der nur aus Startknoten besteht Finde billigste Kante, die den bisherigen Baum verlässt.
Füge den über diese Kante erreichten Randknoten dem Baum hinzu, zusammen mit der Kante.
Fahre fort, bis keine weiteren Randknoten mehr vorhanden sind.
Der Algorithmus von Prim: Übersicht
Wir klassifizieren Knoten in drei Kategorien (BLACK,GRAY, WHITE):
Baumknoten: Knoten, im bis jetzt konstruierten Baum (BLACK) Randknoten: Nicht im Baum; adjazent zu Knoten im Baum (GRAY)
Ungesehen: Alle anderen Knoten (WHITE) Grundkonzept von Prim:
Fange mit einem Baum an, der nur aus Startknoten besteht Finde billigste Kante, die den bisherigen Baum verlässt.
Füge den über diese Kante erreichten Randknoten dem Baum hinzu, zusammen mit der Kante.
Fahre fort, bis keine weiteren Randknoten mehr vorhanden sind.
Prim’s Algorithmus: Grundgerüst
1 // u n g e r i c h t e t e r G r a p h G mit n K n o t e n 2 v o i d p r i m M S T (G r a p h G , int n ) {
3 i n i t i a l i s i e r e a l l e K n o t e n als ungesehen/ W H I T E ; 4 w a e h l e S t a r t k n o t e n s und m a r k i e r e s als Baum/ B L A C K ; 5 r e k l a s s i f i z i e r e a l l e N a c h b a r n von s als Rand/ G R A Y ; 6
7 w h i l e ( es g i b t R a n d k n o t e n ) {
8 w a e h l e u n t e r a l l e n K a n t e n z w i s c h e n B a u m k n o t e n t 9 und R a n d k n o t e n v die b i l l i g s t e ;
10 r e k l a s s i f i z i e r e v als Baum/ B L A C K ; 11 f u e g e K a n t e (t,v) zum B a u m h i n z u ;
12 r e k l a s s i f i z i e r e a l l e zu v a d j a z e n t e n u n g e s e h e n e n 13 K n o t e n als Rand/ G R A Y ;
14 }
15 }
Prim’s Algorithmus: Beispiel
0
∞
∞
∞
∞
∞ ∞
∞
14 6
10 5 5
3 3
4 4
8 8
2
15
15
9
9
Prim’s Algorithmus: Beispiel
14
6
10
∞
5 ∞
∞
14 6
10 5 5
3 3
4 4
8 8
2
15
15
9
9
Prim’s Algorithmus: Beispiel
14
4
10
2
9
∞
14 6
10 5 5
3 3
4 4
8 8
2
15
15
9
9
Prim’s Algorithmus: Beispiel
14
4
8
9
15
14 6
10 5 5
3 3
4 4
8 8
2
15
15
9
9
Prim’s Algorithmus: Beispiel
14
8
9
15
14 6
10 5 5
3 3
4 4
8 8
2
15
15
9
9
Prim’s Algorithmus: Beispiel
3
9
15
14 6
10 5 5
3 3
4 4
8 8
2
15
15
9
9
Prim’s Algorithmus: Beispiel
9
15
14 6
10 5 5
3 3
4 4
8 8
2
15
15
9
9
Prim’s Algorithmus: Beispiel
15
14 6
10 5 5
3 3
4 4
8 8
2
15
15
9
9
Prim’s Algorithmus: Beispiel
14 6
10 5 5
3 3
4 4
8 8
2
15
15
9
9
ADT zum Verhalten der Randknoten
Die benötigten Operationen für den Algorithmus von Prim lauten:
Finde billigste Kante zu einem Randknoten (Kantenkandidat).
Reklassifiziere Randknoten als Baumknoten (füge Kantenkandidaten zum Baum hinzu).
Ändere Kosten (Randgewicht) eines Randknotens, wenn günstigerer Kantenkandidat gefunden wird.
Idee: Ordne Randknoten immer nach ihrem Randgewicht (= Priorität). Wir entscheiden uns für Prioritätswarteschlange als Datenstruktur Prioritätswarteschlange (priority queue)
PriorityQueue pq;
pq.insert(int e, int k), int pq.getMin(), pq.delMin() void pq.decrKey(int e, int k) setzt Schlüssel von Elementeaufk; dabei muss kkleiner als der bisherige Schlüssel vone sein.
ADT zum Verhalten der Randknoten
Die benötigten Operationen für den Algorithmus von Prim lauten:
Finde billigste Kante zu einem Randknoten (Kantenkandidat).
Reklassifiziere Randknoten als Baumknoten (füge Kantenkandidaten zum Baum hinzu).
Ändere Kosten (Randgewicht) eines Randknotens, wenn günstigerer Kantenkandidat gefunden wird.
Idee: Ordne Randknoten immer nach ihrem Randgewicht (= Priorität).
Wir entscheiden uns für Prioritätswarteschlange als Datenstruktur Prioritätswarteschlange (priority queue)
PriorityQueue pq;
pq.insert(int e, int k), int pq.getMin(), pq.delMin() void pq.decrKey(int e, int k) setzt Schlüssel von Elementeaufk; dabei muss kkleiner als der bisherige Schlüssel vone sein.
ADT zum Verhalten der Randknoten
Die benötigten Operationen für den Algorithmus von Prim lauten:
Finde billigste Kante zu einem Randknoten (Kantenkandidat).
Reklassifiziere Randknoten als Baumknoten (füge Kantenkandidaten zum Baum hinzu).
Ändere Kosten (Randgewicht) eines Randknotens, wenn günstigerer Kantenkandidat gefunden wird.
Idee: Ordne Randknoten immer nach ihrem Randgewicht (= Priorität).
Wir entscheiden uns für Prioritätswarteschlange als Datenstruktur Prioritätswarteschlange (priority queue)
PriorityQueue pq;
Komplexitätsanalyse (1)
Im Worst-Case passiert folgendes:
Jeder Knoten muss zur Prioritätswarteschlange hinzugefügt werden.
Aufjeden Knotenmuss wieder zugegriffen werden und er muss wieder gelöscht werden.
Die Priorität eines Randknotens muss nachjedergefundenenKante angepasst werden.
Für einen Graphen mitnKnoten undmKanten ergibt sich dann für die ZeitkomplexitätT(n,m)von Prim’s Algoritmus:
T(n,m)∈O(n·T(insert)+n·T(getMin)+n·T(delMin)+m·T(decrKey))
Komplexitätsanalyse (1)
Im Worst-Case passiert folgendes:
Jeder Knoten muss zur Prioritätswarteschlange hinzugefügt werden.
Aufjeden Knotenmuss wieder zugegriffen werden und er muss wieder gelöscht werden.
Die Priorität eines Randknotens muss nachjedergefundenenKante angepasst werden.
Für einen Graphen mitnKnoten undmKanten ergibt sich dann für die ZeitkomplexitätT(n,m)von Prim’s Algoritmus:
T(n,m)∈O(n·T(insert)+n·T(getMin)+n·T(delMin)+m·T(decrKey))
Komplexitätsanalyse (1)
Im Worst-Case passiert folgendes:
Jeder Knoten muss zur Prioritätswarteschlange hinzugefügt werden.
Aufjeden Knotenmuss wieder zugegriffen werden und er muss wieder gelöscht werden.
Die Priorität eines Randknotens muss nachjedergefundenenKante angepasst werden.
Für einen Graphen mitnKnoten undmKanten ergibt sich dann für die ZeitkomplexitätT(n,m)von Prim’s Algoritmus:
T(n,m)∈O(n·T(insert)+n·T(getMin)+n·T(delMin)+m·T(decrKey))
Komplexitätsanalyse (1)
Im Worst-Case passiert folgendes:
Jeder Knoten muss zur Prioritätswarteschlange hinzugefügt werden.
Aufjeden Knotenmuss wieder zugegriffen werden und er muss wieder gelöscht werden.
Die Priorität eines Randknotens muss nachjedergefundenenKante angepasst werden.
Für einen Graphen mitnKnoten undmKanten ergibt sich dann für die ZeitkomplexitätT(n,m)von Prim’s Algoritmus:
T(n,m)∈O(n·T(insert)+n·T(getMin)+n·T(delMin)+m·T(decrKey))
Komplexitätsanalyse (2)
n·T(insert)+n·T(getMin)+n·T(delMin)+m·T(decrKey)
Die Prioritätswarteschlange kann so organisiert werden (VL-09), dass die Operation insert,getMin,delMin, decrKey
jeweils nur O(logn)Zeit benötigen.
Satz
Der Algorithmus von Prim findet für einen Graphen mitnKnoten und m Kanten den MST inO(mlogn)Zeit.
Komplexitätsanalyse (2)
n·T(insert)+n·T(getMin)+n·T(delMin)+m·T(decrKey)
Die Prioritätswarteschlange kann so organisiert werden (VL-09), dass die Operation insert,getMin,delMin, decrKey
jeweils nur O(logn)Zeit benötigen.
Satz
Der Algorithmus von Prim findet für einen Graphen mitnKnoten und m Kanten den MST inO(mlogn)Zeit.
Algorithmus von Prim: Implementierung
1 Prim - MST ( G , w , s t a r t ) { 2 for e a c h u in V ( G ) do { 3 key [ u ] = i n f t y ; 4 p a r e n t [ u ] = nil
5 }
6
7 key [ s t a r t ] = 0;
8 i n s e r t all v e r t i c e s u in V ( G ) i n t o pq 9
10 w h i l e (! pq . i s E m p t y () ) { 11 u = pq . g e t M i n () ; 12 pq . d e l M i n () ;
13 for e a c h n e i g h b o r v of u do { 14 if ( w ( u , v ) < key [ v ]) { 15 pq . d e c r K e y ( v , w ( u , v ) ) ;
16 p a r e n t [ v ] = u ;
17 }
18 }
19 }
20 }
Der Algorithmus von Kruskal: Übersicht
Wir sortieren die Kanten zuerst ansteigend nach ihrem Gewicht.
Das kostetO(mlogm)Zeit.
Dann beginnen wir mit dennKnoten (ohne Kanten)
und versuchen der Reihe nach die Kanten in den Baum einzufügen Falls Kante zwei Knoten in zweiverschiedenen
Zusammenhangskomponenten verbindet: Kante einfügen
Falls Kante zwei Knoten inderselbenZusammenhangskomponente verbindet: Kante überspringen
Wichtiges Unterproblem:
Wir müssen schnell testen können, ob (im bisher konstruierten Wald) zwei Knoten zur selben Zusammenhangskomponente gehören oder nicht
Der Algorithmus von Kruskal: Übersicht
Wir sortieren die Kanten zuerst ansteigend nach ihrem Gewicht.
Das kostetO(mlogm)Zeit.
Dann beginnen wir mit dennKnoten (ohne Kanten)
und versuchen der Reihe nach die Kanten in den Baum einzufügen
Falls Kante zwei Knoten in zweiverschiedenen
Zusammenhangskomponenten verbindet: Kante einfügen
Falls Kante zwei Knoten inderselbenZusammenhangskomponente verbindet: Kante überspringen
Wichtiges Unterproblem:
Wir müssen schnell testen können, ob (im bisher konstruierten Wald) zwei Knoten zur selben Zusammenhangskomponente gehören oder nicht
Der Algorithmus von Kruskal: Übersicht
Wir sortieren die Kanten zuerst ansteigend nach ihrem Gewicht.
Das kostetO(mlogm)Zeit.
Dann beginnen wir mit dennKnoten (ohne Kanten)
und versuchen der Reihe nach die Kanten in den Baum einzufügen Falls Kante zwei Knoten in zweiverschiedenen
Zusammenhangskomponenten verbindet: Kante einfügen
Falls Kante zwei Knoten inderselbenZusammenhangskomponente verbindet: Kante überspringen
Wichtiges Unterproblem:
Wir müssen schnell testen können, ob (im bisher konstruierten Wald) zwei Knoten zur selben Zusammenhangskomponente gehören oder nicht
Der Algorithmus von Kruskal: Übersicht
Wir sortieren die Kanten zuerst ansteigend nach ihrem Gewicht.
Das kostetO(mlogm)Zeit.
Dann beginnen wir mit dennKnoten (ohne Kanten)
und versuchen der Reihe nach die Kanten in den Baum einzufügen Falls Kante zwei Knoten in zweiverschiedenen
Zusammenhangskomponenten verbindet: Kante einfügen
Falls Kante zwei Knoten inderselbenZusammenhangskomponente verbindet: Kante überspringen
Wichtiges Unterproblem:
Wir müssen schnell testen können, ob (im bisher konstruierten Wald) zwei Knoten zur selben Zusammenhangskomponente gehören oder nicht
Der Algorithmus von Kruskal: Übersicht
Wir sortieren die Kanten zuerst ansteigend nach ihrem Gewicht.
Das kostetO(mlogm)Zeit.
Dann beginnen wir mit dennKnoten (ohne Kanten)
und versuchen der Reihe nach die Kanten in den Baum einzufügen Falls Kante zwei Knoten in zweiverschiedenen
Zusammenhangskomponenten verbindet: Kante einfügen
Falls Kante zwei Knoten inderselbenZusammenhangskomponente verbindet: Kante überspringen
Wichtiges Unterproblem:
Wir müssen schnell testen können, ob (im bisher konstruierten Wald)
Union-Find Datenstruktur
Zur Verwaltung der Zusammenhangskomponenten brauchen wir eine Datenstruktur, die die folgenden Operationen unterstützt:
Operationen:
Find: Bestimme Zusammenhangskomponente für Knotenv. Union: Vereinige die beiden Zusammenhangskomponenten für
Knotenv und für Knotenv in eine einzige Zusammenhangskomponente
Union-Find Datenstruktur
Zur Verwaltung der Zusammenhangskomponenten brauchen wir eine Datenstruktur, die die folgenden Operationen unterstützt:
Operationen:
Find: Bestimme Zusammenhangskomponente für Knotenv. Union: Vereinige die beiden Zusammenhangskomponenten für
Knotenv und für Knotenv in eine einzige Zusammenhangskomponente
Union-Find Datenstruktur: Implementierung (1)
Implementierung der Union-Find Datenstruktur
Für jede Zusammenhangskomponente werden die Knoten in einem Baum gespeichert.
Dieser Baum ist (im allgemeinen)keinBinärbaum; jeder Knoten kann beliebig viele Kinder haben.
Jeder Knoten (innerer Knoten oder Blatt) hat Zeiger zu Vater.
Wir brauchen keine Zeiger zu den Kindern.
Name der Zusammenhangskomponente ist Knoten in Wurzel
Union-Find Datenstruktur: Implementierung (2)
Implementierung vonFind(u)
Starte in Knotenu, und laufe bis zur Wurzel.
Implementierung vonUnion(u,v)
1. Starte in Knotenu, und laufe bis zur Wurzelwu. 2. Starte in Knotenv, und laufe bis zur Wurzelwv. 3. Machewuzum Kind vonwv.
Laufzeit:
• Hängt stark von der Höhe der Bäume ab.
• Falls Baum aus einem einzigen Ast besteht: Laufzeit =Θ(n)
• Lineare Laufzeit ist zu langsam
Union-Find Datenstruktur: Implementierung (2)
Implementierung vonFind(u)
Starte in Knotenu, und laufe bis zur Wurzel.
Implementierung vonUnion(u,v)
1. Starte in Knotenu, und laufe bis zur Wurzelwu. 2. Starte in Knotenv, und laufe bis zur Wurzelwv. 3. Machewuzum Kind vonwv.
Laufzeit:
• Hängt stark von der Höhe der Bäume ab.
• Falls Baum aus einem einzigen Ast besteht: Laufzeit =Θ(n)
• Lineare Laufzeit ist zu langsam
Union-Find Datenstruktur: Implementierung (2)
Implementierung vonFind(u)
Starte in Knotenu, und laufe bis zur Wurzel.
Implementierung vonUnion(u,v)
1. Starte in Knotenu, und laufe bis zur Wurzelwu. 2. Starte in Knotenv, und laufe bis zur Wurzelwv. 3. Machewuzum Kind vonwv.
Laufzeit:
• Hängt stark von der Höhe der Bäume ab.
• Falls Baum aus einem einzigen Ast besteht: Laufzeit =Θ(n)
• Lineare Laufzeit ist zu langsam
Union-Find Datenstruktur: Implementierung (2)
Implementierung vonFind(u)
Starte in Knotenu, und laufe bis zur Wurzel.
Implementierung vonUnion(u,v)
1. Starte in Knotenu, und laufe bis zur Wurzelwu. 2. Starte in Knotenv, und laufe bis zur Wurzelwv. 3. Machewuzum Kind vonwv.
Laufzeit:
• Hängt stark von der Höhe der Bäume ab.
• Falls Baum aus einem einzigen Ast besteht: Laufzeit =Θ(n)
• Lineare Laufzeit ist zu langsam
Union-Find Datenstruktur: Implementierung (2)
Implementierung vonFind(u)
Starte in Knotenu, und laufe bis zur Wurzel.
Implementierung vonUnion(u,v)
1. Starte in Knotenu, und laufe bis zur Wurzelwu. 2. Starte in Knotenv, und laufe bis zur Wurzelwv. 3. Machewuzum Kind vonwv.
Laufzeit:
• Hängt stark von der Höhe der Bäume ab.
• Falls Baum aus einem einzigen Ast besteht: Laufzeit =Θ(n)
Union-Find Datenstruktur: Implementierung (3)
Bessere Implementierung:
• Speichere für jeden Baum Anzahl der Knoten in Wurzel
• Hänge immer kleinen Baum unter grossen Baum Bessere Implementierung vonUnion(u,v)
1. Starte in Knotenu, und laufe bis zur Wurzelwu mit Knotenzahlnu. 2. Starte in Knotenv, und laufe bis zur Wurzelwv mit Knotenzahl nv. 3. Fallsnu≤nv: Mache wu zum Kind vonwv.
Falls nu>nv: Machewv zum Kind vonwu. 4. Knotenzahl des neuen Baumes =nu+nv
Es seienHu undHv die Höhen der beiden Bäume. Beobachtung
FallsHu6=Hv: Höhe des neuen Baumes = max{Hu,Hv} FallsHu=Hv: Höhe des neuen Baumes =Hu+1
Union-Find Datenstruktur: Implementierung (3)
Bessere Implementierung:
• Speichere für jeden Baum Anzahl der Knoten in Wurzel
• Hänge immer kleinen Baum unter grossen Baum Bessere Implementierung vonUnion(u,v)
1. Starte in Knotenu, und laufe bis zur Wurzelwu mit Knotenzahlnu. 2. Starte in Knotenv, und laufe bis zur Wurzelwv mit Knotenzahl nv. 3. Fallsnu≤nv: Mache wu zum Kind vonwv.
Falls nu>nv: Machewv zum Kind vonwu. 4. Knotenzahl des neuen Baumes =nu+nv
Es seienHu undHv die Höhen der beiden Bäume.
Beobachtung
Union-Find Datenstruktur: Implementierung (4)
Satz
Baum mit HöheH enthält mindestens 2H Knoten.
Beweis: Induktion überH plus Beobachtung
Folgerung
In der besseren Implementierung braucht jede Find Operation und jede Union Operation nurO(logn)Zeit.
Satz
Der Algorithmus von Kruskal findet für einen Graphen mitnKnoten und mKanten den MST inO(mlogn)Zeit.
Union-Find Datenstruktur: Implementierung (4)
Satz
Baum mit HöheH enthält mindestens 2H Knoten.
Beweis: Induktion überH plus Beobachtung
Folgerung
In der besseren Implementierung braucht jede Find Operation und jede Union Operation nurO(logn)Zeit.
Satz
Der Algorithmus von Kruskal findet für einen Graphen mitnKnoten und mKanten den MST inO(mlogn)Zeit.
Union-Find Datenstruktur: Implementierung (4)
Satz
Baum mit HöheH enthält mindestens 2H Knoten.
Beweis: Induktion überH plus Beobachtung
Folgerung
In der besseren Implementierung braucht jede Find Operation und jede Union Operation nurO(logn)Zeit.
Satz
Der Algorithmus von Kruskal findet für einen Graphen mitnKnoten und mKanten den MST inO(mlogn)Zeit.
Organisatorisches
• Nächste Vorlesung:
Donnerstag, Jun 29, 10:15–11:45 Uhr, Aula 1
• Webseite:http://algo.rwth-aachen.de/Lehre/SS17/DSA.php