Vorlesung 9 - Universität Düsseldorf: Informatik - Heinrich

Werbung
Algorithmen und Datenstrukturen
Prof. Martin Lercher
Institut für Informatik
Heinrich-Heine-Universität Düsseldorf
Teil 9
Graphen
Version vom 13. Dezember 2016
1/1
Vorlesung
Fortsetzung 13. Dezember 2016
2/1
Grundlagen: Graph
Definition (Graph)
Ein Graph G = (V , E ) besteht aus einer endlichen Menge von
Knoten V = {u1 , . . . , un } und einer endlichen Menge E von
Kanten.
1
In einem gerichteten Graphen ist jede Kante e ein Paar (u, v )
von zwei Knoten u, v ∈ V , u ist der Startknoten und v der
Zielknoten der Kante (u, v ).
E ⊆V ×V
2
In einem ungerichteten Graphen ist jede Kante e ein Menge
{u, v } von zwei verschiedenen Knoten u, v ∈ V , u und v sind
die Endknoten der Kante {u, v }.
E ⊆ {{u, v } | u, v ∈ V , u 6= v }
2 / 13
Grundlagen: Darstellung
Wir zeichnen die Knoten als Kreise oder Punkte. Eine gerichtete
Kante (u, v ) zeichnen wir als Pfeil von u nach v . Eine ungerichtete
Kante zeichnen wir als verbindende Linie zwischen u und v .
Beispiel (Gerichteter Graph)
G = (V , E ), V = {u1 , u2 , u3 , u4 , u5 , u6 , u7 }, E = {(u1 , u2 ),
(u1 , u4 ), (u2 , u3 ), (u3 , u4 ), (u3 , u5 ), (u4 , u6 ), (u4 , u7 ), (u5 , u6 ), (u7 , u1 )}
2
1
3
5
7
4
6
3 / 13
Grundlagen: Adjazenzmatrix
Sei e = (u, v ) bzw. e = {u, v } eine Kante. Die Knoten u und v
sind zueinander adjazent und mit Kante e inzident.
Definition (Adjazenzmatrix)
Sei n die Anzahl der Knoten in einem gerichteten Graphen
G = (V , E ) mit V = {u1 , . . . , un }. Die Adjazenzmatrix für G ist
eine n × n-Matrix AG = (ai,j ) mit
1 falls (ui , uj ) ∈ E
ai,j =
0 falls (ui , uj ) 6∈ E
Für die Repräsentation von ungerichteten Graphen mit
Adjazenzmatrizen wird jede ungerichtete Kante e = {u, v } als zwei
gerichtete Kanten (u, v ), (v , u) gespeichert.
4 / 13
Grundlagen: Adjazenzmatrix
Beispiel (Adjazenzmatrix)
Sei V = {u1 , u2 , u3 , u4 , u5 , u6 , u7 } und E = {(u1 , u2 ), (u1 , u4 ),
(u2 , u3 ), (u3 , u4 ), (u3 , u5 ), (u4 , u6 ), (u4 , u7 ), (u5 , u6 ), (u7 , u1 )},
dann ist die Adjazenzmatrix AG für G :





u1




u2



u3
AG =
u4





u5




u

 6
u7
u1
0
0
0
0
0
0
1
u2
1
0
0
0
0
0
0
u3
0
1
0
0
0
0
0
u4
1
0
1
0
0
0
0
u5
0
0
1
0
0
0
0
u6
0
0
0
1
1
0
0
u7
0
0
0
1
0
0
0























5 / 13
Grundlagen: Adjazenzliste
Definition (Adjazenzliste)
In der Adjazenzlistendarstellung werden für jeden Knoten u alle
von u ausgehenden und einlaufenden Kanten bzw. alle mit u
inzidenten Kanten in einer doppelt verkettete Liste gespeichert.
Anmerkungen:
1
Die Repräsentation eines Graphen G = (V , E ) mit n Knoten
und m Kanten als Adjazenzmatrix benötigt Θ(n2 ) Platz.
2
Typische Operationen wie etwa das Inspizieren aller mit einem
Knoten inzidenten Kanten sind auf Adjazensmatrizen
ineffizient.
3
Die Darstellung eines Graphen G mit n Knoten und m Kanten
als Adjazenzliste benötigt Θ(n + m) Platz.
4
Adajzenzlisten unterstützen sehr gut das Verfolgen von
Kanten (die Wegesuche).
6 / 13
Grundlagen: Adjazenzliste
Beispiel (Adjazenzliste)
(1,2)
(1,4)
auslaufende Kanten
1
(7,1)
einlaufende Kanten
(2,3)
2
(1,2)
(3,4)
(3,5)
3
(2,3)
(4,6)
(4,7)
(1,4)
(3,4)
4
(5,6)
5
(3,5)
6
(4,6)
(5,6)
(7,1)
7
(4,7)
7 / 13
Grundlagen: Notationen
Definition (Notationen)
Sei G = (V , E ) ein Graph.
• Der Eingangsgrad bzw. Ausgangsgrad eines Knotens u, bezeichnet
mit indeg(u) bzw. outdeg(u), ist die Anzahl der in u einlaufenden
bzw. aus u laufenden Kanten.
• Der Knotengrad eines Knotens u, bezeichnet mit deg(u), ist die
Anzahl der mit u inzidenten Kanten.
• Ein Graph G 0 = (V 0 , E 0 ) ist ein Teilgraph von G , bezeichnet mit
G 0 ⊆ G , falls V 0 ⊆ V und E 0 ⊆ E .
• G 0 = (V 0 , E 0 ) ⊆ G ist ein induzierter Teilgraph von G , falls
E 0 = E ∩ {{u, v } | u, v ∈ V 0 } bzw. E 0 = E ∩ (V 0 × V 0 ).
• Für eine Knotenmenge V 0 ⊆ V ist
G |V 0 = (V 0 , E ∩ {{u, v } | u, v ∈ V 0 }
bzw. G |V 0 = (V 0 , E ∩ (V 0 × V 0 ) der durch V 0 induzierte Teilgraph
von G .
8 / 13
Grundlagen: Notationen
Definition (Notationen)
• Eine Folge p = (v1 , . . . , vk ) von k ≥ 1 Knoten mit (vi , vi+1 ) ∈ E
bzw. {vi , vi+1 } ∈ E für 1 ≤ i ≤ k − 1 ist ein Weg von Knoten v1
nach Knoten vk .
• Weg p ist ein Kreis, wenn zusätzlich (vk , v1 ) ∈ E bzw. k > 2 uns
{vk , v1 } ∈ E .
• Weg bzw. Kreis p ist einfach, wenn alle Knoten in p paarweise
verschieden sind.
• Ein Graph ist kreisfrei, wenn er keinen einfachen Kreis enthält.
• Ein ungerichteter Wald ist ein ungerichteter, kreisfreier Graph.
• Ein ungerichteter Baum ist ein ungerichteter Wald in dem es
zwischen jedem Knotenpaar einen Weg gibt.
9 / 13
Grundlagen: Notationen
Anmerkung: In einem ungerichteten Baum gibt es zwischen jedem
Knotenpaar genau einen einfachen Weg.
Definition (Notationen)
• Ein (von den Wurzeln zu den Blättern) gerichteter Wald ist ein
gerichteter, kreisfreier Graph mit indeg(u) ≤ 1 für alle Knoten
u ∈ V.
• Die Knoten mit Eingangsgrad 0 heißen Wurzeln.
• Ein gerichteter Wald mit genau einer Wurzel ist ein
gerichteter Baum.
Anmerkungen:
• In einem gerichteten Baum gibt es von der Wurzel zu jedem
Knoten genau einen Weg.
• Gelegentlich werden die Kanten in gerichteten
Bäumen/Wäldern auch anders herum orientiert.
10 / 13
Grundlagen: Graphisomorphie
Definition (Graphisomorphie)
Zwei Graphen G = (V , E ) und J = (V 0 , E 0 ) sind isomorph, falls es
eine Bijektion
b : V −→ V 0
gibt mit
(u, v ) ∈ E ⇐⇒ (b(u), b(v )) ∈ E 0 , falls G und J gerichtet sind,
bzw.
{u, v } ∈ E ⇐⇒ {b(u), b(v )} ∈ E 0 , falls G und J ungerichtet sind.
Anmerkung: Graphisomorphie nachzuweisen ist im allgemeinen
schwer (in NP aber vermutlich jedoch nicht NP-vollständig).
Die
√
log(n)
O(
n
besten Algorithmen haben eine Laufzeit von 2
) (Eugene
Luks, 1983).
11 / 13
Grundlagen: Adjazenzmatrix/Adjazenzlisten
Anmerkung: Die Speicherung eines Graphen mit n Knoten als
Adjazenzmatrix benötigt Θ(n2 ) Platz, unabhängig davon, ob der
Graph sehr viele oder nur sehr wenige Kanten hat. Algorithmen,
die als interne Datenstruktur eine Adjazenzmatrix verwenden,
benötigen wegen der Initialisierung der Adjazenzmatrix immer
mindestens Ω(n2 ) Rechenschritte. Die Verwendung einer
Adjazenzmatrix ist somit nur dann sinnvoll, wenn die Laufzeit der
besten Algorithmen im besten Fall (also bezüglich der
Best-case-Zeitkomplexität) Ω(n2 ) nicht unterschreitet.
Selbst wenn der Graph bereits in Form einer Adjazenzmatrix als
Eingabe gegeben ist und die Adjazenzmatrix nicht erst aufgebaut
werden muss, kann die Laufzeit der Algorithmen für viele
Graphenprobleme Ω(n2 ) nicht unterschreiten. Dies zeigt der
folgende Satz von Rivest und Vuillemin in [RV76], den wir hier
jedoch nicht beweisen möchten.
12 / 13
Grundlagen: Satz von Rivest und Vuillemin
Satz (Rivest und Vuillemin [aus RV76])
Sei E eine Grapheigenschaft, für die gilt:
1
E ist nicht trivial, d. h., es gibt mindestens einen Graphen, der die
Eigenschaft E hat, und es gibt mindestens einen Graphen, der die
Eigenschaft E nicht hat.
2
E ist monoton, d. h., wenn ein Graph G die Eigenschaft E hat, dann
haben auch alle Teilgraphen von G die Eigenschaft E.
3
E ist unabhängig von der Anordnung der Knoten der Graphen mit
Eigenschaft E, d. h., für alle Graphen G und alle zu G isomorphen
Graphen G 0 gilt E(G ) = E(G 0 ).
Dann benötigt jeder Algorithmus, der die Eigenschaft E auf der Basis
einer Adjazenzmatrix entscheidet, mindestens Ω(n2 ) Rechenschritte.
Beispiele: Planarität, Kreisfreiheit, . . .
13 / 13
Herunterladen