7 Graphen

Werbung
7 Graphen
7.1 Graphen
7
7.2 Arten von Graphen
7.3 Graph als Datenstruktur
97
7 Graphen
Teil VII
Graphen
Überblick
Graphen
Arten von Graphen
Graph als Datenstruktur
Saake/Schallehn
Algorithmen & Datenstrukturen II
7–1
Graphen
◮
Netzwerke aus Knoten und Kanten
◮
vielfältiger Einsatz
◮
◮
◮
◮
◮
Verbindungsnetzwerke: Bahnnetz, Flugverbindungen,
Strassenkarten, ...
Verweise: WWW, Literaturverweise, Wikipedia,
symbolische Links, ...
technische Modelle: Platinen-Layout, finite Elemente,
Computergraphik, ...
Software-Dokumentation
Bäume und Listen sind spezielle Graphen !
Saake/Schallehn
98
Algorithmen & Datenstrukturen II
7–2
Uni Magdeburg, WS 2005/06
7 Graphen
Arten von Graphen
◮
Ungerichtete Graphen
◮
Gerichtete Graphen
◮
◮
◮
◮
Förderanlagen, Kontrollfluss in Programmen, ...
Gewichtete Graphen
7
◮
Strassenverbindungen, Telefonnetz, Nachbarschaft, ..
Bahnnetz mit Kosten, Strassennetz mit Kilometern, ...
Multi-Graphen, Hyper-Graphen, ...
Saake/Schallehn
Algorithmen & Datenstrukturen II
7–3
Ungerichteter Graph Gu
1
2
Saake/Schallehn
3
4
5
6
Algorithmen & Datenstrukturen II
7–4
Ungerichtete Graphen formal
◮
Graph als Zweitupel G = (V , E)
◮
◮
endliche Menge V von Knoten (V für englisch vertices)
Menge E von Kanten (E für englisch edges)
◮
◮
◮
◮
e ∈ E ist zweielementige Teilmenge der Knotenmenge V .
keine Schleifen, d.h. Kanten von einem Knoten zu sich
selbst
keine mehrfachen Kanten zwischen zwei Knoten
(Parallelkanten)
oft: alternative Definition mit e ∈ E als ein- oder
zweielementige Teilmenge
Saake/Schallehn
Algorithmen & Datenstrukturen II
Uni Magdeburg, WS 2005/06
7–5
99
7 Graphen
Beispiel für ungerichteten Graph Gu
◮
Gu = (Vu , Eu )
◮
Vu = {1, 2, 3, 4, 5, 6}
◮
Eu =
{{1, 2}, {1, 3}, {1, 4}, {2, 6}, {4, 6}, {3, 6}, {5, 6}, {3, 4}, {3, 5}}
1
2
Saake/Schallehn
3
4
5
6
Algorithmen & Datenstrukturen II
7–6
Gerichteter Graph Gg
1
2
Saake/Schallehn
3
4
5
6
Algorithmen & Datenstrukturen II
7–7
Gerichtete Graphen formal
◮
Zweitupel G = (V , E) mit
◮
◮
V , einer endlichen Menge von Knoten, und
E, einer Menge von Kanten.
◮
jedes e ∈ E ist nun ein Tupel (a, b) mit a, b ∈ V
◮
Schleifen (a, a) sind erlaubt
Saake/Schallehn
100
Algorithmen & Datenstrukturen II
7–8
Uni Magdeburg, WS 2005/06
7 Graphen
Gerichtete Graphen am Beispiel Gg
◮
Gg = (Vg , Eg )
◮
Vg = {1, 2, 3, 4, 5, 6}
Eg = {(1, 2), (1, 3), (3, 1), (4, 1), (3, 4), (3, 6), (5, 3), (5, 5),
(6, 5), (6, 2), (6, 4)}
7
◮
1
2
3
4
5
6
Saake/Schallehn
Algorithmen & Datenstrukturen II
7–9
Gewichtete Graphen
◮
Graph +
◮
Kantengewichte γ, etwa natürliche Zahlen
◮
G = (V , E, γ) mit
◮
gerichtet oder ungerichtet möglich
γ: E → N
Saake/Schallehn
Algorithmen & Datenstrukturen II
7–10
Gewichteter Graph
1
7
3
3
5
2
2
2
0
1
4
6
2
3
5
6
1
Saake/Schallehn
Algorithmen & Datenstrukturen II
Uni Magdeburg, WS 2005/06
7–11
101
7 Graphen
Realisierung von Graphen
◮
dynamische Datenstruktur
◮
Kanten- und Knotenlisten
◮
Matrixdarstellung
Saake/Schallehn
Algorithmen & Datenstrukturen II
7–12
Direkte Realisierung
◮
analog zu Bäumen
◮
Knoten mit Zeiger-Liste
◮
unüblich da komplexe Strukturen mit vielen
Fehlermöglichkeiten
Saake/Schallehn
Algorithmen & Datenstrukturen II
7–13
Kanten- und Knotenlisten
◮
einfache Realisierung bei durchnummerierten Knoten
◮
historisch erste verwendete Datenstruktur
◮
als Austauschfomat geeignet
◮
Auflistung nach Knoten oder nach Kanten sortiert
Saake/Schallehn
102
Algorithmen & Datenstrukturen II
7–14
Uni Magdeburg, WS 2005/06
7 Graphen
Kantenlisten
◮
Kantenliste für Gg :
6, 11, 1, 2, 1, 3, 3, 1, 4, 1, 3, 4, 3, 6, 5, 3, 5, 5, 6, 5, 6, 2, 6, 4
1
4
5
6
Saake/Schallehn
7
2
3
Algorithmen & Datenstrukturen II
7–15
Knotenlisten
◮
Gg als Knotenliste:
6, 11, 2, 2, 3, 0, 3, 1, 4, 6, 1, 1, 2, 3, 5, 3, 2, 4, 5
◮
Teilfolge 2, 2, 3 bedeutet
◮
„Knoten 1 hat Ausgangsgrad 2 und herausgehende Kanten
zu den Knoten 2 und 3“
1
2
Saake/Schallehn
3
4
5
6
Algorithmen & Datenstrukturen II
7–16
Kanten- versus Knotenlisten
◮
Knotenlisten benötigen weniger Speicherbedarf als
Kantenlisten
◮
Kantenlisten:
◮
Knotenlisten:
2 + 2 · |E|
2 + |V | + |E|
Saake/Schallehn
Algorithmen & Datenstrukturen II
Uni Magdeburg, WS 2005/06
7–17
103
7 Graphen
Adjazenzmatrix
◮
◮
◮
Adjazenzmatrix: Adjazenz bedeutet Berühren,
Aneinandergrenzen
Darstellung des Graphen als Boole´sche Matrix
Einträge für Nachbarschaft / direkte Erreichbarkeit durch
Kanten
◮
ungerichtete Graphen: Halb-Matrix (Dreieck) reicht aus
gewichtete Graphen:
◮
einige Graphoperationen als Matrixoperationen möglich
◮
◮
◮
Gewichte statt Boole´sche Werte
Ereichbarkeit durch iterierte Matrix-Multiplikation
Saake/Schallehn
Algorithmen & Datenstrukturen II
7–18
Adjazenzmatrix: gerichtet




Gg = 



0
0
1
1
0
0
1
0
0
0
0
1
1
0
0
0
1
0
0
0
1
0
0
1
0
0
0
0
1
1
0
0
1
0
0
0








1
2
3
4
5
6
Saake/Schallehn
Algorithmen & Datenstrukturen II
7–19
Adjazenzmatrix: ungerichtet




Gu = 



0
1
1
1
0
0
1
0
0
0
0
1
1
0
0
1
1
1
1
0
1
0
0
1
0
0
1
0
0
1
0
1
1
1
1
0








1
2
Saake/Schallehn
104
3
4
5
6
Algorithmen & Datenstrukturen II
7–20
Uni Magdeburg, WS 2005/06
7 Graphen
Adjazenzmatrix: ungerichtet als Dreiecksmatrix



Gu = 



◮
0
1
1
1
0
0

0
0
0
0
1
0
1 0
1 0 0
1 1 1 0







7

Diagonale kann ebenfalls weggelassen werden wenn
Schleifen verboten sind
Saake/Schallehn
Algorithmen & Datenstrukturen II
7–21
Dynamisch mit Adjazenzlisten
◮
Liste der Knoten (alternativ: Array)
◮
pro Knoten die von ihm ausgehenden Kanten
◮
◮
◮
als Liste oder Array von Zeigern
als Adjazenzliste
Graph durch |V | + 1 verkettete Listen realisiert
Saake/Schallehn
Algorithmen & Datenstrukturen II
7–22
Graph mit Adjazenzlisten
1
2
3
3
1
4
4
1
5
3
5
6
2
4
2
Saake/Schallehn
6
5
Algorithmen & Datenstrukturen II
Uni Magdeburg, WS 2005/06
7–23
105
7 Graphen
Speicherbedarf bei Adjazenzlisten
◮
seien n = |V | und m = |E|
◮
benötigt werden insgesamt
n+
n
X
ag(i) = n + m
i=1
Listenelemente
Saake/Schallehn
Algorithmen & Datenstrukturen II
7–24
Transformation zwischen den Darstellungen
◮
die vorgestellten Realisierungsvarianten sind äquivalent
◮
◮
◮
◮
jede Darstellung kann also in jede andere ohne
Informationsverlust transformiert werden
Auslesen der einen Darstellung und anschließend das
Erzeugen der jeweils anderen Darstellung
Aufwand dieser Transformationen variiert von O(n + m) bis
O(n2 ), wobei im schlechtesten Fall m = n2 gilt
n2 tritt immer auf, wenn eine Matrixdarstellung beteiligt ist
Saake/Schallehn
Algorithmen & Datenstrukturen II
7–25
Komplexitätsbetrachtungen
Operation
Einfügen Kante
Löschen Kante
Einfügen Knoten
Löschen Knoten
◮
Knotenliste
O(n + m)
O(n + m)
O(1)
O(n + m)
Adjazenzmatrix
O(1)
O(1)
O(n2 )
O(n2 )
Adjazenzliste
O(1) / O(n)
O(n)
O(1)
O(n + m)
Löschen eines Knotens erfordert Löschen der zugehörigen
Kanten!
Saake/Schallehn
106
Kantenliste
O(1)
O(m)
O(1)
O(m)
Algorithmen & Datenstrukturen II
7–26
Uni Magdeburg, WS 2005/06
7 Graphen
Komplexitätsbetrachtungen II
Kantenlisten
◮
◮
◮
◮
Knotenlisten
◮
◮
Einfügen von Kanten (Anhängen zweier Zahlen) und von
Knoten (Erhöhung der ersten Zahl um 1) besonders günstig
Löschen von Kanten: Zusammenschieben in einer Liste
Löschen von Knoten: Durchnummerierung der Knoten
Einfügen von Knoten (Erhöhung der ersten Zahl und
Anhängen einer 0) günstig
Matrixdarstellung
◮
◮
Manipulieren von Kanten sehr effizient ausführbar
Aufwand bei Knoteneinfügung hängt von Realisierung ab
◮
◮
7
◮
eventuell Kopieren der Matrix in eine größere Matrix
Adjazenzliste
◮
unterschiedlicher Aufwand, je nachdem ob die Knotenliste
als Feld (mit Direktzugriff) oder als verkettete Liste (mit
sequenziellem Durchlauf) realisiert
Saake/Schallehn
Algorithmen & Datenstrukturen II
Uni Magdeburg, WS 2005/06
7–27
107
Herunterladen