1 Zerlegung eines Graphen in 3-Zusammenhangs

Werbung
Motivation
Zerlegung eines Graphen
in 3-Zusammenhangskomponenten
Graph-Dekomposition ist ein klassisches Problem der
Graphentheorie.
Aber warum Algorithm Engineering ?
Carsten Gutwenger
• „Implementierbarkeit“ von Algorithmen
• zahlreiche Anwendungen, insbesondere im Graph Drawing
Planarität, c-Planarität, Aufwärtsplanarität
Vorlesung Algorithm Engineering WS 05/06
vom 2. und 3. Januar 2006
praxisrelevant!
• Preprocessing
Universität Dortmund, FB Informatik, LS11
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
2
k-Zusammenhang
Literatur
Definition. Sei k ∈ N.
G=(V,E) ist k-zusammenhängend genau dann wenn
• |V| > k und
• G-X ist zusammenhängend für jedes X⊆V mit |X| < k.
W. T. Tutte, Connectivity in graphs, Vol. 15 of
Mathematical Expositions, University of Toronto Press,
1966.
J. E. Hopcroft, R. E. Tarjan, Dividing a graph into
triconnected components, SIAM Journal on Computing 2,
1973, pp. 135-158.
C. Gutwenger, P. Mutzel, A linear time implementation of
SPQR-trees, in: J. Marks (ed.), Graph Drawing (GD 2000),
0-zshgd. ⇔ G ist nicht leer.
1-zshgd. ⇔ G ist zusammenhängend.
LNCS 1984, pp. 77-90, Springer-Verlag, 2001.
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
3
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
k-Zusammenhang (2)
4
2-Zusammenhang
Satz (Menger‘s Theorem).
Bekannt:
Ein Graph ist genau dann k-zusammenhängend, wenn es
zwischen jedem Paar von Knoten k unabhängige Pfade
gibt.
a ist Schnittknoten (cutvertex) gdw. ex. Knoten v und w,
so dass jeder Pfad von v nach w über a führt.
Block: maximaler zusammenhängender Teilgraph, der
keinen Schnittknoten enthält.
unabhängige Pfade: keine internen
Knoten gemeinsam
v
…
a
w
≥k
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
5
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
6
1
Block-Graph
Block-Graph (2)
Definition. Seien G=(V,E) und
B
• C ⊆ V Menge der Schnittknoten von G,
C
• B ⊆ G Menge der Blöcke von G.
Dann ist der (bipartite) Graph
B
B
(C ∪ B, {(c, b) | c ∈ b})
B
C
der Block-Graph von G.
B
Graph
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
7
Block-Graph
B
BC-Baum
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
Separationspaar
8
Splitklassen
Sei G=(V,E) 2-zusammenhängend.
Sei {u,v} Splitpaar.
{u,v} ∈ V heisst Separationspaar, falls G - {u,v} nicht
zusammenhängend ist.
Splitklassen von {u,v}:
Partition E1 , . . . , Ek der Kantenmenge, so dass
{u,v} heisst Splitpaar, falls
e, f ∈ Ei ⇐⇒ e und f liegen auf einem Pfad, der u und
• {u,v} Separationspaar ist, oder
v höchstens als einen Endpunkt enthält.
• u und v sind adjazente Knoten.
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
9
Splitklassen (2)
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
10
Split-Operation
Seien E1, . . . , Ek die Splitklassen eines Splitpaares {u,v}.
Für ein j mit 1 j< k seien
C = E1 ∪ . . . ∪ E j und C̄ = Ej+1 ∪ . . . ∪ Ek , so dass
|C| ≥ 2 und |C̄| ≥ 2.
Eine Split-Operation ersetzt G durch die Split-Graphen
G1 = (V (C), C ∪ e) und
G2 = (V (C̄), C̄ ∪ e),
wobei e=(u,v) eine neue virtuelle Kante ist.
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
11
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
12
2
Split-Operation (2)
C = E1
Tutte-Split
C̄ = E2 ∪ E3
Eine Split-Operation heißt Tutte-Split, falls
• C = Eα und
• G(C ) oder G(C̄ ) enthält keinen Schnittknoten.
⇒
G1
G
G2
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
13
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
Tutte-Split (2)
14
Split-Graphen
Beobachtung. Jeder Split-Graph enthält keinen Schnittknoten und mindestens 3 Kanten.
Tutte-Split ja oder nein?
Führe solange Split-Operationen durch wie möglich.
Lemma. Die Gesamtzahl aller Kanten in Splitgraphen ist
beschränkt durch 3|E| − 6.
Nein!
Nein!
Ja!
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
Beweis. → Tafel
15
3-Zusammenhangskomponenten
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
16
3-Zusammenhangskomponenten (2)
b
Beispiel:
Definition. Wir erhalten die 3-Zusammenhangskomponenten eines Graphen, indem wir solange TutteSplits durchführen wie möglich.
a
c
e
g
d
f
k
n
i
h
o
l
j
p
m
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
17
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
18
3
3-Zusammenhangskomponenten (3)
a
3-Zusammenhangskomponenten (4)
b
c
d
Theorem. Jede 3-Zusammenhangskomponente ist
e
A
d
e
d
f
e
C
h
h
L
k
h
L
l
m
m
h
K
j
I
j
K
h
c) ein Bündel von mind. 3 parallelen Kanten.
seriell
parallel
n
h
h
n
3-zshgd.
n
e E
D
b) ein Kreis (Polygon) mit mind. 3 Kanten, oder
F
e
e
a) ein einfacher, 3-zshgd. Graph,
g
e
B
I j
G
n
j
H
j
J
Theorem. Die 3-Zusammenhangskomponenten eines
Graphen sind eindeutig.
n
o
p
j
i
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
19
SPQR-Baum
P 2
Was passiert, wenn wir immer beliebige Split-Operationen
durchführen?
S 3
→ Split-Komponenten
P 4
Theorem. Jede Split-Komponente ist
S 5
a) ein einfacher, 3-zshgd. Graph,
A
2
B
3
20
3-Zusammenhangskomponenten (4)
R 1
1
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
C
4
13
L
12
K
10
D
I
5
G
J
11
E
8
H
9
6
F
7
P 10
P 8
b) ein Kreis mit genau 3 Kanten, oder
P 6
c) ein Bündel von genau 3 parallelen Kanten.
S 12
S 11
R 9
S 7
Theorem. Die Split-Komponenten eines Graphen sind
nicht eindeutig.
R 13
Baum T(G)
SPQR-Baum
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
21
3-Zusammenhangskomponenten (4)
1. Ersetze Multi-Kanten durch virtuelle Kanten.
• Dreiecke zu maximalen Polygonen, und
2. Bestimme Split-Komponenten.
→ Cp+1, . . . , Ck
• 3-er Bündel zu maximalen Bündeln verschmelzt.
3. Verschmelze in C1 , . . . , Ck (solange wie möglich) je zwei
Polygone bzw. Bündel, die die gleiche virtuelle Kante
enthalten.
→
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
22
Der Algorithmus
Theorem. Man erhält die 3-Zusammenhangskomponenten
aus den Split-Komponenten, indem man
→
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
23
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
24
4
Segmente
Segmente (2)
b
Betrachte einen Kreis c im Graphen G.
a
c
Ein Segment relativ zu c ist ein Untergraph S von G, der
entweder
e
g
d
a) aus einer einzelnen Kante e=(u,v) mit u,v∈c und e∉c, oder
f
b) aus einer ZK K von G\c plus allen Kanten, die K mit c
verbinden,
n
i
h
o
besteht.
k
l
j
p
m
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
25
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
Separationspaare
26
Typ-1
b
Ein Segment mit mind. 2
Kanten hat nur a und b mit c
gemeinsam, und ein weiterer
Knoten liegt nicht darin.
Lemma. Seien S1, . . . , Sn die Segmente relativ zu c. Ist
{a,b} ein Separationspaar von G, dann gilt:
1. Die Knoten a und b liegen beide auf c, oder beide im
gleichen Segment.
a
c
e
d
f
2. Falls a und b auf c liegen, dann trifft (mind.) einer der
folgenden Fälle zu:
g
b
a
k
n
i
h
o
l
j
p
m
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
27
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
Typ-2
DFS-Baum
b
Seien p und q die beiden
Pfade, in die c durch a und b
geteilt wird.
Betrachte DFS Baum von G:
a
c
num(v) DFS-Nummer von v
v → w Baumkante
v ֒→ w Rückwärtskante
e
d
• Kein Segment enthält ein
v≠a,b in p und ein w≠a,b in q;
• p und q enthalten beide
einen Knoten ≠a,b.
28
g
b
q
p
f
k
n
i
h
∗
D(v) = {w | v → w} Menge der Nachfolger von v
o
a
l
j
p
m
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
29
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
30
5
Lowpt-Werte
Nummerierung
∗
lowpt1(v) = min {num(v)} ∪ {num(w) | v →֒→ w}
Aber: Wir benötigen eine spezielle Nummerierung num(v):
lowpt2(v) = min ({num(v)} ∪
∗
({num(w) | v →֒→ w} \ {lowpt1(v)})
lowpt1(v)
lowpt2(v)
Sei Adj(v) die Adjazenzliste von v.
(P1)
Die Wurzel hat Nummer 1.
(P2)
Seien w1, . . . , wn die Kinder von v gemäß Adj(v).
Dann ist
num(wi ) = num(v)+|D(wi+1)∪. . . ∪D(wn)|+1
v
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
31
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
Nummerierung (2)
32
Nummerierung (3)
u
(P3)
Die Kanten e in Adj(v) sind aufsteigend sortiert
nach
lowpt1(w) falls e = v → w
num(w)
falls e = v ֒→ w
⋮
lowpt2(wi)
⋮
Und: Knoten wi , . . . , wj mit gleichem lowpt1-Wert u
sind wie folgt gemäß lowpt2-Wert sortiert:
v
…
…
wi
…
lowpt2(·) < num(v)
D(wi)
lowpt2(·) ≥ num(v)
lowpt2(wj )
…
wi′
wi′ +1
wj
D(wi′) D(wi′+1) D(wj )
v ֒→ u
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
33
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
Nummerierung (4)
h1
Beispiel:
l2
3
m
j
k 4
n 6
16
9
g
i5
p7
e 10
o8
c 11
12
d 14
f 15
a
b 13
34
Nummerierung (5)
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
2
3
16, 1, 4
6, 5
1
9, 7
8, 4
4, 6
10
1, 11
12
14, 13
10, 11
15
1
1, 2
Wie kann man diese Nummerierung effizient bestimmen?
1. Sortiere Adjazenzlisten aufsteigend gemäß
Φ(e) =




3lowpt1(w)
if e = v → w and lowpt2(w) < v
3w + 1
if e = v ֒→ w



3lowpt1(w) + 2 if e = v → w and lowpt2(w) ≥ v
→ Bucket-Sort
2. Bestimme damit Nummerierung gemäß (P1) und (P2).
3. lowpt1 und lowpt2 müssen neu berechnet werden!
35
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
36
6
Pfade
Pfade (2)
1
Betrachte DFS-Traversierung gemäß Adj(v).
B
∗
→ Menge von Pfaden der Form v → w ֒→ u
C
3
4
16
6
Jeder Pfad
D
∗
5
9
• endet am Knoten mit der kleinsten möglichen Nummer;
• hat nur Anfangs- und Endknoten mit vorangehenden
Pfaden gemeinsam.
A:
B:
C:
D:
E:
F:
G:
H:
I:
J:
K:
L:
M:
N:
2
A
7
10
E
8
11
12
∗
→ erhalten Kreise u → v → w ֒→ u
14
13
1 → 2 → 3 → 16 ֒→ 1
16 ֒→ 2
3 ֒→ 1
3 → 4 → 6 → 9 → 10 ֒→ 1
10 → 11 → 12 → 14 → 15 ֒→ 1
14 ֒→ 10
14 ֒→ 11
12 → 13 ֒→ 10
13 ֒→ 11
10 ֒→ 6
6 → 7 → 8 ֒→ 4
8 ֒→ 6
7 ֒→ 4
4 → 5 ֒→ 1
15
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
37
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
Separationspaare: Typ-1
38
Separationspaare: Typ-1 (2)
1
a = 1
2
{a,b} mit num(a)<num(b) ist Separationspaar, falls
b = 10
3
Typ-1:
4
16
Ex. r = a, b und s = a, b mit
r = 11
s = 2
6
5
• b→r
9
• lowpt1(r) = num(a)
10
• lowpt2(r) ≥ num(b)
11
lowpt1(r) = 1
7
8
lowpt2(r) = 10 ≥ num(b)
12
• s∈
/ D(r)
14
13
15
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
39
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
Separationspaare: Typ-2
40
Separationspaare: Typ-2
Intuitiv:
{a,b} mit a≠1 und num(a)<num(b) ist Separationspaar, falls
• Löschen von a und b trennt die Knoten parent(a) und r voneinander.
• Die Bedingungen für Rückwärtskanten bedeuten:
Typ-2:
Es darf keine Rückwärtskante geben, die aus dem Bereich
zwischen r und x über a hinausläuft, denn diese würde
parent(a) mit r verbinden.
Ex. r = b mit
∗
•a→r→b
Gibt es ein Kind w von b, aus dessen Teilbaum eine
Rückwärtskante in den Bereich zwischen r und x läuft, dann ist
der Teilbaum an w auch nach dem Löschen von a und b mit r
verbunden. Daher muss ausgeschlossen werden, dass eine
Rückwärtskante aus diesem Teilbaum in den Bereich über a
führt, also wird lowpt1(w) ≥ a gefordert.
• b ist ein „erster“ Nachfahre von r
• Für alle x ֒→ y mit
gilt: y ≥ a
• Für alle x ֒→ y mit num(a) < num(y) < num(b)
∗
und b → w →
x gilt: lowpt1(w) ≥ num(a)
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
41
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
42
7
Separationspaare: Typ-2 (2)
Separationspaare
1
1
2
a = 4
3
4
16
6
8
11
3
4
16
9
8 ֒→ 6
8 ֒→ 4
7 ֒→ 4
Typ-2:
7
10
8
11
{6,10}, {4,10}, {10,15}
{10,14}
12
12
14
{1,4}, {1,6}, {4,6}
{1,10}, {1,3}
5
relevante Rückwärtskanten:
7
10
b = 10
r = 6
6
5
9
Typ-1:
2
13
14
13
15
15
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
43
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
Test auf Separationspaar
Test auf Separationspaar (2)
Typ-1:
TSTACK
→ Test einer einfachen Bedingung für jede Baumkante.
• Enthält Tripel (h,a,b)
Typ-2:
h ist höchste Nummer eines Knotens in zugehöriger
Split-Komponente
→ Einfach, falls a→ v→ b und deg(v)=2.
Sonst: Benutze TSTACK
{a,b} ist potentielles Typ-2 Separationspaar
•
• Alle
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
44
45
Test auf Separationspaar (3)
sind auf aktuellem Kreis
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
46
Test auf Separationspaar (4)
Nach Bearbeitung von v i → vi+1
Multi-Kanten:
• Sei (h,a,b) oberstes Element auf TSTACK.
Dann ist {a,b} Typ-2 Separationspaar, falls
• Können beim Berechnen der Split-Komponenten auftreten.
• Werden beim Erzeugen einer virtuellen Kante erkannt.
a = vi
• Wichtig: Ordnung der Adjazenzlisten!
num(vi ) = 1
a = parent(b)
Eigenschaften bzgl. Rückwärtskanten werden durch
Update von TSTACK sichergestellt!
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
47
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
48
8
Split-Komponenten
Split-Komponenten (2)
Berechnung der Split-Komponenten:
Verwaltung von ESTACK:
• Verwalte aktuellen Graphen und DFS-Baum.
→ Update beim Abspalten von Split-Komponenten.
• Bearbeitung von v→w:
→ Push auf ESTACK nach rekursivem Aufruf für w.
• Abspalten = Löschen einiger Kanten und ersetzen durch
neue virtuelle Kante.
→ ESTACK
• Bearbeitung von
:
→ Push auf ESTACK falls keine Multi-Kante.
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
49
Korrekturen
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
50
Laufzeit Aufbau SPQR-Baum
Testgraphen:
• zufällig generiert
• planar, 2-zusammenhängend, simple
• n = 1000,…,10000
• Dichte: m = 1.5n, m = 2n
• Funktion Φ zum Sortieren der Adjazenzlisten
→ Erkennen von Multi-Kanten
• Erzeugen der letzten Split-Komponente
• Update von TSTACK
• je 25 Graphen pro Datenpunkt
• Test auf Typ-2 Separationspaare
• Verschiedene Updates: A1(v), DEGREE(v), HIGHPT(v)
System & Implementierung:
• Pentium 4, 3.4 GHz, 1 GB
• Windows XP, MinGW g++ 3.4.4
• OGDF (Open Graph Drawing Framework)
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
51
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
52
Laufzeit Aufbau SPQR-Baum
350
planar 2-zshgd., m = 1.5n
planar 2-zshgd., m = 2n
300
Laufzeit [ms]
250
200
150
100
50
0
1000
2000
3000
4000
5000
6000
7000
8000
9000
10000
Anzahl Knoten
02./03.01.2006 — Algorithm Engineering: 3-Zusammenhangskomponenten
53
9
Herunterladen