C - Universität Bern

Werbung
Datenstrukturen & Algorithmen
Matthias Zwicker
Universität Bern
Frühling 2010
Übersicht
Graphenalgorithmen
• Begriffe & Darstellung von Graphen
• Breitensuche & Tiefensuche
• Topologisches Sortieren
• Starke Zusammenhangskomponenten
2
Darstellung von Graphen
• Graph G=(V,E)
– Menge von Knoten V
g von Kanten E
– Menge
• Anzahl Knoten |V|
• Anzahl Kanten |E|
• Laufzeit
La f eit ausgedrückt
a sgedrückt in |V| und
nd |E|
– Vereinfachte Notation, Beispiel O(V
O(V+E)
E)
3
Darstellung von Graphen
Begriffe
• Ungerichtete Graphen: Kanten haben keine
Orientierung
• Gerichtete Graphen: Kanten haben je eine
von zwei möglichen Orientierungen
• Gewichtete Graphen: Jede Kante hat reelle
Zahl als Gewicht
• Grad eines Knoten
– Anzahl Kanten, die diesen Knoten enthalten
– Gerichtete Graphen:
p
Unterscheiden Eingangsgrad
g g g
und Ausgangsgrad
4
Darstellung von Graphen
• Knoten V={a,b,c,d}
• Kanten
– Ungerichtet: beide Richtungen der Kante implizit
mitgemeint E
E={(a
{(a,b),
b) (a
(a,c),(b,c),(c,d)}
c) (b c) (c d)}
– Gerichtet E={(a,b), (b,a),(a,c),(b,c),(c,d)}
5
Darstellung von Graphen
• Knoten V={a,b,c,d}
• Kanten
– Ungerichtet: beide Richtungen der Kante implizit
mitgemeint E
E={(a
{(a,b),
b) (a
(a,c),(b,c),(c,d)}
c) (b c) (c d)}
– Gerichtet E={(a,b), (b,a),(a,c),(b,c),(c,d)}
b
a
b
a
d
c
ungerichtet
d
c
gerichtet
6
Darstellung von Graphen
Begriffe
• Pfad: Sequenz
q
von Knoten die über Kanten
entsprechender Richtung verbunden sind
• Erreichbar: Knoten ist von einem anderen erreichbar,
wenn es einen
i
Pf
Pfad
d gibt,
ibt der
d b
beide
id K
Knoten
t verbindet
bi d t
• Zyklus: Pfad, der als ersten und letzten Knoten
denselben Knoten enthält
• Zusammenhangskomponenten: Äquivalenzklassen der
Knoten bezüglich der Relation „erreichbar von“
von
• Starke Zusammenhangskomponenten:
Äquivalenzklassen
q
der Knoten in g
gerichteten Graphen
p
bezüglich der Relation „gegenseitig erreichbar von“
7
Darstellung von Graphen
Adjazenzlisten
• Feld
F ld Adj der
d G
Grösse
ö
|V| von Listen
Li t
– Eine Liste p
pro Knoten
• Liste von Knoten u enthält alle Knoten v so
dass (u,
(u v) ∈ E
• Funktioniert für gerichtete und
ungerichtete Graphen
• Speicher: O(V+E)
• Zeit um zu bestimmen ob ((u,, v)) ∈ E :
O(Grad(u))
8
Darstellung von Graphen
Adjazenzmatrix
• Matrix A der Grösse |V| x |V|
• Elemente
• Speicher: O(V 2)
• Zeit um zu bestimmen ob (u, v) ∈ E :
k t t
konstant
• Gewichtete Graphen: Gewichte direkt in
Matrix speichern
9
Darstellung von Graphen
10
Darstellung von Graphen
• Adjazenzlisten vorteilhaft für dünn
besetzte Graphen
– |E| viel kleiner als |V 2|
• Adjazenzmatrix vorteilhaft für dichte
Graphen
– Jeder Knoten mit fast jedem verbunden
– |E| nahe an |V 2|
• Adjazenzmatrix symmetrisch für
ungerichtete Graphen
– aij=aji, müssen nur obere oder untere Hälfte
der Matrix speichern
11
Übersicht
Graphenalgorithmen
• Begriffe & Darstellung von Graphen
• Breitensuche & Tiefensuche
• Topologisches Sortieren
• Starke Zusammenhangskomponenten
12
Breitensuche
• Findet alle Knoten, die von einem
Startknoten aus erreichbar (durch eine
Serie von Kanten verbunden) sind
• Berechnet zusätzlich Abstand (kleinste
Anzahl Kanten),
Kanten) um jeden Knoten zu
erreichen
– Knoten werden in ansteigendem Abstand
g
gefunden
• (Einige Details aus Buch weggelassen hier)
13
Breitensuche
• Eingabe: Graph G=(V,E), gerichtet oder
ungerichtet, Startknoten s
• Ausgabe: d[v] = Distanz von s nach v, für alle v
• Idee: Sende Welle ausgehen von s
– Trifft zuerst alle Knoten erreichbar über eine
Kante von s
– Von da aus alle Knoten erreichbar über zwei
Kanten von s
– Etc.
• Wellenfront in FIFO
O Warteschlange
g Q
verwaltet
– Knoten v in Q falls Welle v erreicht hat, aber noch
nicht von v weitergeleitet wurde
14
Breitensuche
15
Breitensuche
16
Breitensuche
FIFO Warteschlange: s,a,c,e,g,b,h,f,i
17
Breitensuche
• Zeitkomplexität O(V+E)
– O(V) weil
il jeder
j d Knoten
K t höchstens
hö h t
einmal
i
l iin FIFO
eingetragen wird
– O(E) weil
il jeder
j d Knoten
K
höchstens
hö h
einmal
i
l aus FIFO
genommen wird, und Kanten nur untersucht
werden wenn Knoten aus Queue genommen wird
=> jede Kante wird einmal (gerichtet) oder
zweimal (ungerichtet) untersucht
• Anmerkung: weitere Konzepte zur
B it
Breitensuche
h (V
(Vorgängerteilgraph,
ä
t il
h
Breitensuchbaum) aus Buch gehören auch zum
Prüfungsstoff
18
Tiefensuche
• Suche geht „tiefer“ in Graphen wenn
immer möglich
– Untersuche die Kanten als nächstes, die vom
zuletzt entdeckten Knoten ausgehen, der noch
ungeprüfte Kanten hat
• Gefundene Knoten werden mit Zeitstempel
versehen
– Zeit, wann zuerst gefunden
– Zeit, wann letzte Kante geprüft
19
Tiefensuche
• Eingabe: Graph G=(V, E), gerichtet oder
ungerichtet, kein Startknoten
• Ausgabe: Zeitstempel für jeden Knoten v
– Entdeckunszeit d[v]
– Prüfung aller Kanten beendet f[v]
• Suchstrategie: sobald Knoten entdeckt,
entdeckt folge
seinen Kanten
• Farben zeigen Zustand des Knotens
– white = noch nicht entdeckt
– gray = entdeckt, aber noch nicht fertig (hat
Kanten, die noch nicht verfolgt wurden)
– black = fertig (alle Kanten verfolgt)
20
Tiefensuche
21
Tiefensuche
22
Tiefensuche
23
Tiefensuche
• Zeitkomplexität
– Analyse ähnlich wie Breitensuche
– Θ(V
( + E)) , weil jjeder Knoten
( + E)) statt O(V
und jede Kante besucht werden
• Tiefensuche führt zu Tiefensuchwald
– Besteht aus mehreren Tiefensuchbäumen
– Bäume besten aus Kanten (u,v), wo gilt u=gray
und v=white,, als ((u,v)) g
gefunden wurde
– Details im Buch
24
Eigenschaften der Tiefensuche
• Klammerungstheorem
– Intervalle [d[u],f[u]] und [d[v],f[v]] sind
paarweise disjunkt
– Intervall [d[u],f[u]] ist vollständig in [d[v],f[v]]
enthalten
– Intervall [d[v],f[v]] ist vollständig in [d[u],f[u]]
enthalten
• Wie Klammern
– Ok: ()[] oder ([]) oder [()]
– Kommt nicht vor: ([)] oder [(])
25
Eigenschaften der Tiefensuche
• Intervalle der Nachfahren: Knoten v ist
Nachfahre von u im Tiefensuchwald,
Tiefensuchwald wenn
d[u] < d[v] < f[v] < f[u]
• Theorem der weissen Pfade: Knoten v ist
Nachfahre von u im Tiefensuchwald,
Tiefensuchwald wenn
Knoten v zur Zeit d[u] von u aus entlang
Pfad erreichbar ist
ist, der n
nurr weisse
eisse Knoten
enthält
26
Eigenschaften der Tiefensuche
• Klassifikation der Kanten
– Baumkanten: Kante, die im Tiefensuchwald
vorkommt
– Rückwärtskante: (u,v), wobei u ein Nachfolger
von v im Tiefensuchbaum ist
– Vorwärtskante: (u,v), wobei u ein Vorgänger
von v im Tiefensuchbaum ist
– Querkante: alle anderen
• Th
Theorem: Bei
B i Tiefensuche
Ti f
h in
i
ungerichtetem Graphen ist jede Kante
entweder Baumkante oder Rückwärtskante
27
Übersicht
Graphenalgorithmen
• Begriffe & Darstellung von Graphen
• Breitensuche & Tiefensuche
• Topologisches Sortieren
• Starke Zusammenhangskomponenten
28
Topologisches Sortieren
• Für gerichtete azyklische Graphen
(directed acyclic graph
graph, DAG)
• Nützlich zur Darstellung
g von Abläufen mit
partieller Ordnung
– a>b und
d b>c => a>c
– Aber möglich dass a und b so dass weder a>b
noch b>c
• Topologisches Sortieren: finde totale
Ordnung gegeben partielle Ordnung
29
Topologisches Sortieren
30
Topologisches Sortieren
31
Topologisches Sortieren
• Lemma: Gerichteter Graph is azyklisch
genau dann wenn DFS keine Rückwärtskanten enthält
• Beweis: zeige „Rückwärtskante => Zyklus“
und „Zyklus
Zyklus => Rückwärtskante
Rückwärtskante„
32
Topologisches Sortieren
• Topologische Sortierung eines DAG: lineare
Sequenz von Knoten so dass u vor v
erscheint, wenn (u, v) ∈ E
• Algorithmus
– R
Rufe
f DFS(G) auff
– Füge jeden abgearbeiteten Knoten am Kopf
einer verketteten Liste ein
– Return die verkettete Liste
33
Übersicht
Graphenalgorithmen
• Begriffe & Darstellung von Graphen
• Breitensuche & Tiefensuche
• Topologisches Sortieren
• Starke Zusammenhangskomponenten
34
Starke Zusammenhangskomponenten
• Sei G=(V, E) gerichteter Graph
• Starke Zusammenhangskomponente
((strongly
g y connected component,
p
, SCC)) von
G ist maximale Menge von Knoten C ⊆ V
so dass für alle u,
u v ∈ C sowohl u → v als
auch v → u
• Algorithmus braucht transponierten
Graphen GT = (V,
(V E T ),
) E T = {(u,
{(u v)|(v,
v)|(v u) ∈ E}
• Beobachtung: G und GT haben dieselben
SCC
35
Starke Zusammenhangskomponenten
Starke
Zusammenhangs
Zusammenhangskomponenten
Starke Zusammenhangskomponenten
Starke
Zusammenhangs
Zusammenhangskomponenten
Komponentengraph
SCC Algorithmus
37
Komponentengraphen
• Komponentengraph GSCC = (V SCC , E SCC )
– V SCC hat
h t einen
i
Knoten
K t fü
für jjede
d SCC iin G
– E SCC hat eine Kante wenn es eine Kante
zwischen
i h entsprechenden
h d SCC
SCCs iin G
• Lemma: GSCC ist ein DAG
– D.h. seien C und C´ verschiedene SCCs in G, sei
u v in C,
u,v
C u
u´, vv´ in C
C´, und sei Pfad u ->
> uu´ in G
– Dann kann Pfad v´ -> v nicht in G sein
•B
Beweis:
i Widerspruch,
Wid
h ffalls
ll v´´ ->
> v existieren
i ti
würde, wären C und C´ dieselbe Zusammenhangskomponente
h
k
38
Starke Zusammenhangskomponenten
Algorithmus
1. Berechne DFS(G) und Endzeiten f[u]
2 Berechne transponierten Graphen GT
2.
3. Berechne DFS(GT), wobei in der DFS
Hauptschleife Knoten in der Reihenfolge
fallender f[u] (wie in Zeile 1 berechnet)
betrachtet werden
4. Gib Knoten jedes Tiefensuchbaumes aus
Schritt 3 als eine separate SCC aus
39
Starke Zusammenhangskomponenten
• Idee: Knoten in zweiter DFS auf
transponiertem Graphen in fallender
Reihenfolge nach Endzeiten von ersten DFS
=> Knoten
K t d
des Komponentengraphen
K
t
h
werden topologisch sortiert besucht
• Notation
– d[u] und f[u] beziehen sich auf Resultat der
ersten DFS
– d(U) früheste Startzeit aller Knoten in U
– f(U) späteste Endzeit aller Knoten in U
40
Starke Zusammenhangskomponenten
• Lemma: Seien C und C´ verschiedene SCCs
in G
G=(V,
(V, E). Sei Kante (u, v) in E so dass u
in C und v in C´. Dann f(C) > f(C´)
• Korollar: Seien C und C´ verschiedene
SCCs. Sei Kante (u, v) in ET so dass u in C
und v in C´. Dann f(C) < f(C´)
• Korollar: Seien C und C´ verschiedene
SCCs f(C) > f(C
SCCs,
f(C´)). Dann kann es in ET
keine Kante von C nach C´ geben.
41
Starke Zusammenhangskomponenten
Beweis Lemma
• Falls d(C)
( ) < d(C´)
( )
– Sei x erste Knoten entdeckt in C. Zur Zeit d(x) sind alle
Knoten in C und C´ weiss
– Theorem der weissen Pfade: alle Knoten in C und C
C´ sind
Nachkommen von x in DFS Baum
– Klammerungstheorem: f[x] = f(C) > f(C´)
• Falls d(C) > d(C´)
–
–
–
–
–
Sei y erste Knoten entdeckt in C´
Z Z
Zur
Zeit
it d[y]
d[ ] sind
i d alle
ll K
Knoten
t iin C´ weiss
i
Alle Knoten in C´ sind Nachkommen von y
Zur Zeit d[y]
[y] sind alle Knoten in C weiss
Wegen Kante (u, v) gibt es keinen Pfad von C nach C´. Kein
Knoten in C erreichbar von y
– Zur Zeit f[y] sin alle Knoten in C weiss
– Für alle w in C gilt f[w] > f[y], und f(C) > f(C´)
42
Starke Zusammenhangskomponenten
Intuition für Algorithmus
• Bei zweiter DFS auf GT, starte mit SCC C so dass f(C) Maximum
• Korollar: Weil f(C) > f(C´) für alle anderen Komponenten C´,
gibt es in ET keine Kanten von C nach C´
• DFS besucht nur Kanten in C
• Nächste Wurzel in zweiter DFS ist in SCC C´, so dass f(C´)
Maximum über alle SCCs auser C. DFS besucht alle Knoten in
C´, und alle Kanten aus C´ gehen nach C, welche schon
besucht wurden.
• Deshalb nur Knoten in C
C´ besucht
– Etc. mit nächster Wurzel
• Von jeder neuen Wurzel der zweiten DFS, erreichen nur
– Knoten in seiner SCC
– Knoten, die bereits besucht wurden in zweiter DFS
• Besuchen Knoten von (GT)SCC in umgekehrter topologisch
sortierte Reihenfolge
43
Nächstes Mal
• Mehr Graphenalgorithmen
44
Herunterladen