Algorithmen und Datenstrukturen (für ET/IT

Werbung
Programm heute
Algorithmen und Datenstrukturen (für ET/IT)
Wintersemester 2012/13
Dr. Tobias Lasser
7 Fortgeschrittene Datenstrukturen
Graphen
Bäume
Computer Aided Medical Procedures
Technische Universität München
3
Übersicht: Graphen
Definition: Ungerichteter Graph
Klassen von Graphen:
Definition: Ungerichteter Graph
• ungerichteter Graph
Ein ungerichteter Graph ist ein Paar G = (V , E ) mit
• gerichteter Graph
• V endliche Menge der Knoten
• E ⊆ {u, v } : u, v ∈ V
Zusätzliche Eigenschaften:
Menge der Kanten
• gewichteter Graph
6
K2
• auf Englisch:
• Knoten = vertices
• Kanten = edges
K4
7
9
10
4
5
K1
1
2
• es ist {u, v } = {v , u}, d.h. Richtung der
K5
Kante spielt keine Rolle
8
Beispiel:
4
2
3
1
5
3
K3
4
5
Ungerichteter Graph: Beispiel
Definition: Gerichteter Graph
Definition: Gerichteter Graph
4
Ein gerichteter Graph ist ein Paar G = (V , E ) mit
2
• V endliche Menge der Knoten
3
• E ⊆ V × V Menge der Kanten
1
5
• E ⊆ (u, v ) : u, v ∈ V
=V ×V
Beispiel:
• es ist (u, v ) 6= (v , u), d.h. Richtung der
• Graph Gu = (Vu , Eu )
4
Kante spielt eine Rolle
• Knoten Vu = {1, 2, 3, 4, 5}
• hier sind Schleifen möglich, d.h. Kanten der
• Kanten
2
3
1
5
Form (u, u) für u ∈ V
Eu = {1, 2}, {1, 5}, {2, 3}, {2, 4}, {2, 5}, {3, 4}, {3, 5}
7
6
Gerichteter Graph: Beispiel
Definition: Gewichteter Graph
Definition: Gewichteter Graph
4
2
3
1
5
Ein gewichteter Graph ist ein Graph G = (V , E ) mit einer
Gewichtsfunktion w : E → R.
• der Graph G kann gerichtet oder ungerichtet
Beispiel:
sein
4
• je nach Anwendung kann ein verschiedener
• Graph Gg = (Vg , Eg )
1
Wertebereich für die Funktion w gewählt
werden
• Knoten Vg = {1, 2, 3, 4, 5}
• z.B. R oder N0
• Kanten
Eg = (1, 2), (2, 3), (2, 5), (3, 4), (3, 5), (4, 2), (5, 1), (5, 3)
2
3
3
8
9
1
8
7
2
5
5
9
Eigenschaften von Graphen I
Eigenschaften von Graphen: Beispiel
Sei G = (V , E ) ein Graph (gerichtet oder ungerichtet).
Beispiel gerichteter Graph:
• Ist (u, v ) ∈ E bzw. {u, v } ∈ E für u, v ∈ V , so heißt v
4
• Knoten 2 ist adjazent zu Knoten 1
adjazent zu u.
• Knoten 1 ist adjazent zu Knoten 5
• Sei G gerichteter Graph, sei v ∈ V ein Knoten.
• die Anzahl der eintretenden Kanten in v heißt Eingangsgrad
(englisch: indegree) von v ,
indeg (v ) = v 0 : (v 0 , v ) ∈ E 2
3
1
5
• outdeg (2) = 2, indeg (2) = 2
• indeg (1) = 1, outdeg (1) = 1
• die Anzahl der austretetenden Kanten von v heißt
Beispiel ungerichteter Graph:
Ausgangsgrad (englisch: outdegree) von v ,
outdeg (v ) = v 0 : (v , v 0 ) ∈ E 4
• Knoten 4 ist adjazent zu Knoten 2
• Knoten 2 ist adjazent zu Knoten 4
2
3
1
5
• deg (2) = 4
• Sei G ungerichteter Graph, sei v ∈ V ein Knoten.
• die Anzahl der eintretenden bzw. austretenden Kanten von v
heißt Grad (englisch: degree) von v oder kurz deg (v ).
• deg (1) = 2
11
10
Eigenschaften von Graphen II
Eigenschaften von Graphen II: Beispiel
Beispiel gerichteter Graph:
4
• (1, 2, 5) ist ein einfacher Pfad der Länge 2
Sei G = (V , E ) ein Graph (gerichtet oder ungerichtet).
• Seien v , v 0 ∈ V . Ein Pfad von v nach v 0 ist eine Folge von
Knoten (v0 , v1 , . . . , vk ) ⊂ V mit
• (2, 3, 4, 2) ist ein Pfad der Länge 3, aber
2
3
1
5
nicht einfach
• v0 = v , vk = v 0
• (vi , vi+1 ) ∈ E bzw. {vi , vi+1 } ∈ E für i = 0, . . . , k − 1
• 5 ist erreichbar von 1
k heißt Länge des Pfades.
• Ein Pfad heißt einfach, falls alle Knoten des Pfades paarweise
Beispiel ungerichteter Graph:
verschieden sind.
4
• (5, 2, 4, 3, 2) ist ein Pfad der Länge 4, aber
nicht einfach
Gibt es einen Pfad von u nach v , so heißt v erreichbar von u.
2
3
1
5
• (1, 2, 3, 4) ist ein einfacher Pfad der Länge 3
• 3 ist erreichbar von 1
12
13
Eigenschaften von Graphen III
Eigenschaften von Graphen III: Beispiel
Sei G = (V , E ) gerichteter Graph.
• Ein Pfad (v0 , . . . , vk ) heißt Zyklus, falls
Beispiel gerichteter Graph:
4
• (1, 2, 5, 3, 5, 1) ist ein Zyklus, aber nicht
• v0 = vk und
• der Pfad mindestens eine Kante enthält
einfach
2
3
1
5
• (1, 2, 5, 1) ist ein einfacher Zyklus
• Ein Zyklus (v0 , . . . , vk ) heißt einfach, falls v1 , . . . , vk paarweise
verschieden sind.
Sei G = (V , E ) ungerichteter Graph.
• Ein Pfad (v0 , . . . , vk ) heißt Zyklus, falls
Beispiel ungerichteter Graph:
4
• (1, 2, 5, 1) ist ein Zyklus
• v0 = vk
• k ≥3
• v1 , . . . , vk paarweise verschieden
• (2, 3, 4, 2) ist ein Zyklus
Ein Graph ohne Zyklen heißt azyklisch.
2
3
1
5
15
14
Eigenschaften von Graphen IV
Eigenschaften von Graphen IV: Beispiel
Sei G = (V , E ) gerichteter Graph.
Beispiel gerichteter Graph:
• G heißt stark zusammenhängend, falls jeder Knoten von
4
• Graph ist nicht stark zusammenhängend
jedem anderen Knoten aus erreichbar ist.
• Eine starke Zusammenhangskomponente von G ist ein
maximaler zusammenhängender Untergraph von G .
(z.B. 3 nicht erreichbar von 4)
2
3
1
5
• starke Zusammenhangskomponenten:
{1, 2, 3, 5} und {4}
• alternativ: Äquivalenzklassen der Knoten bezüglich Relation
“gegenseitig erreichbar”
Sei G = (V , E ) ungerichteter Graph.
Beispiel ungerichteter Graph:
• G heißt zusammenhängend, falls jeder Knoten von jedem
4
• Graph ist zusammenhängend
anderen Knoten aus erreichbar ist.
• Eine Zusammenhangskomponente von G ist ein maximaler
zusammenhängender Untergraph von G .
• nur eine Zusammenhangskomponente:
2
3
1
5
{1, 2, 3, 4, 5}
• alternativ: Äquivalenzklassen der Knoten bezüglich Relation
“erreichbar von”
16
17
Darstellung von Graphen: Adjazenzmatrizen
Adjazenzmatrizen: Beispiele
Beispiel gerichteter Graph:

0 1 0
0 0 1

A=
0 0 0
0 1 0
1 0 1
Adjazenzmatrix
Sei G = (V , E ) mit V = {v1 , . . . , vn }. Die Adjazenzmatrix von G
speichert die vorhandenen Kanten in einer n × n Matrix A ∈ Rn×n
mit
4
0
0
1
0
0

0
1

1

0
0
2
3
1
5
• A(i, j) = 1 falls Kante von Knoten vi zu vj existiert
• A(i, j) = 0 falls keine Kante von Knoten vi zu vj existiert
für i, j ∈ {1, . . . , n}.
Beispiel ungerichteter

0
1

A=
0
0
1
Graph:
1
0
1
1
1
0
1
0
1
1
4
0
1
1
0
0

1
1

1

0
0
2
3
1
5
18
Adjazenzmatrizen: Eigenschaften
19
Darstellung von Graphen: Adjazenzlisten
Adjazenzliste
Eigenschaften von Adjazenzmatrizen zu Graph G = (V , E )
Sei G = (V , E ) gerichteter Graph. Eine Adjazenzliste von G sind
|V | + 1 verkettete Listen, so daß
• sinnvoll wenn der Graph nahezu vollständig ist (d.h. fast alle
möglichen Kanten tatsächlich in E liegen)
• die erste Liste alle Knoten enthält
• Speicherkomplexität: O(|V |2 )
• für jeden Knoten v eine Liste angelegt wird mit allen Knoten,
die durch eine von v austretende Kante zu erreichen sind
• bei ungerichteten Graphen ist die Adjazenzmatrix symmetrisch
• bei gewichteten Graphen kann man statt der 1 in der Matrix
das Gewicht der Kante eintragen
20
21
Adjazenzliste: Beispiel
Adjazenzliste: Eigenschaften
Eigenschaften von Adjazenzlisten zu Graph G = (V , E )
Graph:
Adjazenzliste:
1
2
• sinnvoll bei dünn besetzten Graphen mit wenigen Kanten
4
2
1
3
5
2
3
5
• Speicherkomplexität: O(|V | + |E |)
3
4
5
• bei ungerichteten Graphen gleiches Verfahren
• allerdings muß jede Kante zweimal gespeichert werden
4
2
5
1
• bei gewichteten Graphen kann man die Gewichte mit in den
verketteten Listen der jeweiligen Knoten speichern
3
23
22
Komplexität der Darstellungen
Algorithmen auf Graphen
Sei G = (V , E ) Graph.
Operation
Adjazenzmatrix
Adjazenzliste
Kante einfügen
O(1)
O(|V |)
Kante löschen
O(1)
O(|V |)
Knoten einfügen
O(|V |2 )
O(1)
Knoten löschen
O(|V |2 )
O(|V | + |E |)
Ausblick auf Algorithmen auf Graphen:
• Traversierung (Durchlaufen) von allen Knoten
• Depth-First Search (DFS)
• Breadth-First Search (BFS)
• kürzester Pfad zwischen Knoten in Graphen
• minimaler Spannbaum (minimum spanning tree, MST)
• falls Größe im Vorhinein bekannt, kann Knoten
→ siehe Kapitel 9!
löschen/einfügen bei Adjanzenzmatrix effizienter
implementiert werden
• auch die Adjanzenzlisten lassen sich effizienter
implementieren, z.B. auf Kosten von Speicher (sequentielle
Liste statt verkettete Liste)
• Löschen von Knoten ist immer aufwendig, da auch alle
Kanten von/zu diesem Knoten gelöscht werden müssen
24
25
Programm heute
Bäume
Bäume sind alltägliches Mittel zur Strukturierung:
• Stammbaum
• Hierarchie in Unternehmen
• Systematik in der Biologie
7 Fortgeschrittene Datenstrukturen
• etc.
Graphen
Bäume
In Informatik:
• Bäume sind spezielle Graphen
• Wurzel oben!
27
26
Definition Wald/Baum
Eigenschaften von Bäumen
Definition: Wald und Baum
Sei G = (V , E ) ein Baum.
• jedes Paar von Knoten u, v ∈ V ist durch einen einzigen Pfad
• Ein azyklischer ungerichteter Graph heißt auch Wald.
verbunden
• Ein zusammenhängender, azyklischer ungerichteter Graph
• G ist zusammenhängend, aber wenn eine Kante aus E
heißt auch Baum.
entfernt wird, ist G nicht mehr zusammenhängend
• G ist azyklisch, aber wenn eine Kante zu E hinzugefügt wird,
ist G nicht mehr azyklisch
(1,1)
(1,2)
(2,2)
(2,1)
(1,3)
(3,2)
(3,1)
(2,2)
(2,3)
(2,1)
(3,2)
(3,1)
(1,3)
(3,3)
(2,3)
• es ist |E | = |V | − 1
(2,2)
(1,2)
(2,1)
(3,2)
(3,1)
(3,3)
(3,3)
Baum
Wald
kein Baum!
28
29
Wurzel von Bäumen
Weitere Begriffe bei Bäumen I
Sei G = (V , E ) ein Baum mit Wurzel w ∈ V .
• jeder Knoten v ∈ V mit v 6= w ist mit genau einer Kante mit
Sei G = (V , E ) ein Baum.
• genau ein Knoten w ∈ V wird als Wurzel ausgezeichnet
seinem Vaterknoten x ∈ V (oder: Vorgänger) verbunden
• entfernt man w erhält man einen Wald von Teilbäumen
• v wird dann als Kind (oder: Sohn, Nachfolger) von x ∈ V
bezeichnet
Wurzel
• ein Knoten ohne Kinder heißt Blatt, alle anderen Knoten
heißen innere Knoten
w
Teilbaum
Wurzel
w
innerer Knoten
Vater
x
Kind
Hinweis: manchmal wird zwischen “freiem” und “gewurzeltem”
Baum unterschieden!
v
Blätter
30
Weitere Begriffe bei Bäumen II
31
Bäume: Beispiele
• arithmetischer Ausdruck
Sei G = (V , E ) ein Baum mit Wurzel w ∈ V .
• Länge des Pfades von Wurzel w zu Knoten x ∈ V heißt Tiefe
(3 + 4) ∗ 5 + 2 ∗ 3
von x
repräsentiert als Baum:
• alle Knoten gleicher Tiefe bilden eine Ebene des Baumes G
+
• die Höhe des Baumes G ist die maximale Tiefe der Knoten
von G
*
• Achtung: manchmal ist Höhe auch als Anzahl der Ebenen
definiert
+
w
Ebene 0
3
*
5
2
3
4
Ebene 1
Höhe = 3
• hierarchisches Dateisystem
• Windows z.B. “C:\”
• Unix “/”
Ebene 2
Ebene 3
• Suchbaum → Kapitel 8
32
33
Besondere Bäume
Beispiel: Binärbaum
Sei G = (V , E ) ein Baum mit Wurzel w ∈ V .
• sind die Kinder jedes Knotens in bestimmter Reihenfolge
Ebene 0
angeordnet, heißt G geordneter Baum
Ebene 1
• ist die Anzahl n der Kinder jedes Knotens vorgegeben, heißt G
Höhe = 3
n-ärer Baum
Ebene 2
Ebene 3
Wichtiger Spezialfall:
• ist G geordnet und hat jeder Knoten maximal zwei Kinder,
Binärbaum mit Höhe 3, 8 Blättern und 7 inneren Knoten.
heißt G Binärbaum
• Binärbaum heißt vollständig, wenn jede Ebene die maximal
Anzahl an Knoten enthält
• ein vollständiger Binärbaum der Höhe k hat 2k+1 − 1 Knoten,
davon 2k Blätter
35
34
Darstellung von Bäumen: als Graph
Darstellung von Bäumen: verkettete Liste
Darstellung mit angepassten verketteten Listen:
Bäume sind Graphen → Darstellung als
Wurzel
• Adjazenzmatrix
• Adjazenzliste
Kind
Wert
Bruder
→ leider meist nicht effizient (sowohl Laufzeit als auch Speicher)
Kind
Wert
Bruder
Kind
Wert
Bruder
Kind
Kind
Wert
Wert
Bruder
Bruder
Kind
Wert
Bruder
Nachteil: nur Navigation “nach unten” möglich
36
37
Darstellung von Bäumen: doppelt verkettete Liste
Darstellung von Binärbäumen
Darstellung mit angepassten doppelt verketteten Listen:
Darstellung direkt mit linkem/rechtem Kind (doppelt verkettet):
Wurzel
Wurzel
Vater
Vater
Kind
Wert
links
Bruder
Vater
Kind
Wert
Kind
Wert
links
Wert
Vater
rechts
links
Kind
Wert
Vater
Bruder
Kind
Wert
Vater
Bruder
Wert
rechts
Bruder
Vater
Vater
Vater
rechts
Vater
Vater
Bruder
Wert
Kind
Wert
links
Wert
rechts
links
Wert
Vater
rechts
links
Wert
rechts
Bruder
38
Zusammenfassung
7 Fortgeschrittene Datenstrukturen
Graphen
Bäume
40
39
Herunterladen