• Keine Ergebnisse gefunden

VL-16: Minimale Spannbäume (Datenstrukturen und Algorithmen, SS 2017) Walter Unger

N/A
N/A
Protected

Academic year: 2022

Aktie "VL-16: Minimale Spannbäume (Datenstrukturen und Algorithmen, SS 2017) Walter Unger"

Copied!
103
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

VL-16: Minimale Spannbäume

(Datenstrukturen und Algorithmen, SS 2017)

Walter Unger

(2)

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

(3)

Minimale Spannbäume

• Bäume & Spannbäume

• Algorithmus von Kruskal

• Algorithmus von Prim

• Implementierung & Komplexität

(4)

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 . . . .

(5)

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

(6)

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

(7)

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

(8)

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

(9)

Beispiel: Telefonleitungsnetz

(10)

Beispiel: Zwei Abdeckungen

Alle Kunden sind angeschlossen

. . .und sind miteinander verbunden

(11)

Beispiel: Zwei Abdeckungen

Alle Kunden sind angeschlossen . . .und sind miteinander verbunden

(12)

Ein wenig Mathematik

(13)

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

(14)

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

(15)

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

(16)

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.

(17)

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 seieEE0.

Der Graph (V,E0∪ {e})enthält einen einzigen KreisC. Für jede Kante fC gilt:(V,E0∪ {e} − {f})ist ein Baum.

(18)

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 seieEE0.

Der Graph (V,E0∪ {e})enthält einen einzigen KreisC.

Für jede Kante fC gilt:(V,E0∪ {e} − {f})ist ein Baum.

(19)

Anzahl der Spannbäume (1)

Drei Spannbäume fürn=3 Knoten

Die Cayley Formel

Der vollständige Graph mitnKnoten hatnn−2Spannbäume.

(20)

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

(21)

Anzahl der Spannbäume (3)

2 7 1 4 3

6 8 5

Prüfer-Code: 7, 4, 4, 1, 7, 1

(22)

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 ) }

(23)

Minimale Spannbäume

(24)

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!

(25)

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!

(26)

Beispiel: Leitungskosten

Verschiedene Umgebungen verursachen verschiedene Kosten für die Verlegung von Kabeln.

(27)

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

(28)

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.

(29)

Geschichtlicher Rückblick (3)

(30)

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.

(31)

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.

(32)

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.

(33)

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

(34)

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.

(35)

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,

(36)

Prim und Kruskal

(37)

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.

(38)

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.

(39)

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

(40)

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.

(41)

Beispiel: Das Inselreich der Algolaner

(42)

Korrektheit von Prim und Kruskal

(43)

Das Hauptwerkzeug

Definition

Eine KantenmengeFE in GraphenG = (V,E,w)heissttschechisch, falls es einen MST gibt, der alle Kanten inF enthält.

Satz

Es seiFE eine tschechische Kantenmenge vonG= (V,E,w). Es seiUV eine Zusammenhangskomponente von(V,F). Es seie eine Kante mit kleinstem Gewicht zwischenU undVU.

Dann gilt:F∪ {e}ist ebenfalls tschechisch Beweisskizze: Betrachte MST(V,F0)mitFF0.

• (V,F0∪ {e})enthält KreisC. KreisC verwendet mindestens zwei Kantene undf zwischenU undVU.

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

(44)

Das Hauptwerkzeug

Definition

Eine KantenmengeFE in GraphenG = (V,E,w)heissttschechisch, falls es einen MST gibt, der alle Kanten inF enthält.

Satz

Es seiFE eine tschechische Kantenmenge vonG= (V,E,w).

Es seiUV eine Zusammenhangskomponente von(V,F).

Es seie eine Kante mit kleinstem Gewicht zwischenU undVU.

Dann gilt:F∪ {e}ist ebenfalls tschechisch

Beweisskizze: Betrachte MST(V,F0)mitFF0.

• (V,F0∪ {e})enthält KreisC. KreisC verwendet mindestens zwei Kantene undf zwischenU undVU.

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

(45)

Das Hauptwerkzeug

Definition

Eine KantenmengeFE in GraphenG = (V,E,w)heissttschechisch, falls es einen MST gibt, der alle Kanten inF enthält.

Satz

Es seiFE eine tschechische Kantenmenge vonG= (V,E,w).

Es seiUV eine Zusammenhangskomponente von(V,F).

Es seie eine Kante mit kleinstem Gewicht zwischenU undVU.

Dann gilt:F∪ {e}ist ebenfalls tschechisch Beweisskizze: Betrachte MST(V,F0)mitFF0.

• (V,F0∪ {e})enthält KreisC. KreisC verwendet mindestens zwei Kantene undf zwischenU undVU.

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

(46)

Das Hauptwerkzeug

Definition

Eine KantenmengeFE in GraphenG = (V,E,w)heissttschechisch, falls es einen MST gibt, der alle Kanten inF enthält.

Satz

Es seiFE eine tschechische Kantenmenge vonG= (V,E,w).

Es seiUV eine Zusammenhangskomponente von(V,F).

Es seie eine Kante mit kleinstem Gewicht zwischenU undVU.

Dann gilt:F∪ {e}ist ebenfalls tschechisch Beweisskizze: Betrachte MST(V,F0)mitFF0.

• (V,F0∪ {e})enthält KreisC. KreisC verwendet mindestens zwei Kantene undf zwischenU undVU.

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

(47)

Das Hauptwerkzeug

Definition

Eine KantenmengeFE in GraphenG = (V,E,w)heissttschechisch, falls es einen MST gibt, der alle Kanten inF enthält.

Satz

Es seiFE eine tschechische Kantenmenge vonG= (V,E,w).

Es seiUV eine Zusammenhangskomponente von(V,F).

Es seie eine Kante mit kleinstem Gewicht zwischenU undVU.

Dann gilt:F∪ {e}ist ebenfalls tschechisch Beweisskizze: Betrachte MST(V,F0)mitFF0.

• (V,F0∪ {e})enthält KreisC. KreisC verwendet mindestens zwei Kantene undf zwischenU undVU.

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

(48)

Das Hauptwerkzeug

Definition

Eine KantenmengeFE in GraphenG = (V,E,w)heissttschechisch, falls es einen MST gibt, der alle Kanten inF enthält.

Satz

Es seiFE eine tschechische Kantenmenge vonG= (V,E,w).

Es seiUV eine Zusammenhangskomponente von(V,F).

Es seie eine Kante mit kleinstem Gewicht zwischenU undVU.

Dann gilt:F∪ {e}ist ebenfalls tschechisch Beweisskizze: Betrachte MST(V,F0)mitFF0.

• (V,F0∪ {e})enthält KreisC. KreisC verwendet mindestens zwei Kantene undf zwischenU undVU.

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

(49)

Das Hauptwerkzeug

Definition

Eine KantenmengeFE in GraphenG = (V,E,w)heissttschechisch, falls es einen MST gibt, der alle Kanten inF enthält.

Satz

Es seiFE eine tschechische Kantenmenge vonG= (V,E,w).

Es seiUV eine Zusammenhangskomponente von(V,F).

Es seie eine Kante mit kleinstem Gewicht zwischenU undVU.

Dann gilt:F∪ {e}ist ebenfalls tschechisch Beweisskizze: Betrachte MST(V,F0)mitFF0.

• (V,F0∪ {e})enthält KreisC. KreisC verwendet mindestens zwei Kantene undf zwischenU undVU.

w(f)≥w(e)

• Ergo:F∪ {e} ist tschechisch

(50)

Das Hauptwerkzeug

Definition

Eine KantenmengeFE in GraphenG = (V,E,w)heissttschechisch, falls es einen MST gibt, der alle Kanten inF enthält.

Satz

Es seiFE eine tschechische Kantenmenge vonG= (V,E,w).

Es seiUV eine Zusammenhangskomponente von(V,F).

Es seie eine Kante mit kleinstem Gewicht zwischenU undVU.

Dann gilt:F∪ {e}ist ebenfalls tschechisch Beweisskizze: Betrachte MST(V,F0)mitFF0.

• (V,F0∪ {e})enthält KreisC. KreisC verwendet mindestens zwei Kantene undf zwischenU undVU.

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

(51)

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

(52)

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

(53)

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

(54)

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

(55)

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}

(56)

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 mitVU verbindet.

Hauptwerkzeug impliziert dassF∪ {e}ebenfalls tschechisch ist

(57)

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 mitVU verbindet.

Hauptwerkzeug impliziert dassF∪ {e}ebenfalls tschechisch ist

(58)

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 mitVU verbindet.

Hauptwerkzeug impliziert dassF∪ {e}ebenfalls tschechisch ist

(59)

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 mitVU verbindet.

Hauptwerkzeug impliziert dassF∪ {e}ebenfalls tschechisch ist

(60)

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 mitVU verbindet.

Hauptwerkzeug impliziert dassF∪ {e}ebenfalls tschechisch ist

(61)

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 mitVU verbindet.

(62)

Implementierung & Komplexität

(63)

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.

(64)

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.

(65)

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 }

(66)

Prim’s Algorithmus: Beispiel

0

∞ ∞

14 6

10 5 5

3 3

4 4

8 8

2

15

15

9

9

(67)

Prim’s Algorithmus: Beispiel

14

6

10

5 ∞

14 6

10 5 5

3 3

4 4

8 8

2

15

15

9

9

(68)

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

(69)

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

(70)

Prim’s Algorithmus: Beispiel

14

8

9

15

14 6

10 5 5

3 3

4 4

8 8

2

15

15

9

9

(71)

Prim’s Algorithmus: Beispiel

3

9

15

14 6

10 5 5

3 3

4 4

8 8

2

15

15

9

9

(72)

Prim’s Algorithmus: Beispiel

9

15

14 6

10 5 5

3 3

4 4

8 8

2

15

15

9

9

(73)

Prim’s Algorithmus: Beispiel

15

14 6

10 5 5

3 3

4 4

8 8

2

15

15

9

9

(74)

Prim’s Algorithmus: Beispiel

14 6

10 5 5

3 3

4 4

8 8

2

15

15

9

9

(75)

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.

(76)

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.

(77)

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;

(78)

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))

(79)

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))

(80)

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))

(81)

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))

(82)

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.

(83)

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.

(84)

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 }

(85)

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

(86)

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

(87)

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

(88)

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

(89)

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)

(90)

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

(91)

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

(92)

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

(93)

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

(94)

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

(95)

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

(96)

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

(97)

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)

(98)

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. Fallsnunv: 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

(99)

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. Fallsnunv: 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

(100)

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.

(101)

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.

(102)

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.

(103)

Organisatorisches

• Nächste Vorlesung:

Donnerstag, Jun 29, 10:15–11:45 Uhr, Aula 1

• Webseite:http://algo.rwth-aachen.de/Lehre/SS17/DSA.php

Referenzen

ÄHNLICHE DOKUMENTE

Die Average-Case Laufzeit von A ist die durchschnittlich benötigte Anzahl elementarer Operationen auf einer beliebigen Eingabe der Länge n. DSAL/SS 2017 VL-03:

Wir stellen das (wiederholte) Ineinander-Einsetzen als Baum dar, indem wir Buch führen über das aktuelle Rekursionsargument und über die nicht-rekursiven

• Dies gilt für die gesamte Vorlesung (+ Übungen + Klausur).. Fibonacci-Zahlen:

Element getMin(PriorityQueue pq) gibt das Element mit dem kleinsten Schlüssel zurück; benötigt nicht-leere pq. void delMin(PriorityQueue pq) entfernt das Element mit dem

Daher: Falls Schlüssel auch gelöscht werden sollen, so wird häufiger Verkettung zur Kollisionsauflösung verwendet.... Löschen bei offener

Lambert Kurt John Ivo Harry Greg Frank Edward Dirk Cor Bernhard Adrian. DSAL/SS 2017 VL-18:

Die Ford-Fulkerson Methode erweitert den Fluss in G sukzessive um augmentierende Pfade im Residualen Netzwerk G f bis es keine solche Pfade mehr gibt. Wir werden

Wenn eine Wahl getroffen wurde, kann sie nicht mehr rückgängig gemacht werden.. Greedy Algorithmen finden nicht immer die