© 17.01.19 Jens M. Schmidt
Planaritätstest von Boyer und Myrvold
Jens M. Schmidt
G
H C
A
D
F E
x
K
H I
J y v
u v
© 17.01.19 Jens M. Schmidt
●
Planare Graphen, Zeichnungen und Rotationssysteme
●
Algorithmus von Boyer-Myrvold, Walkup, Walkdown
●
Korrektheit
●
Laufzeit O(n)
●
Folgerungen
Überblick
© 17.01.19 Jens M. Schmidt
Kuratowski [1930]: Ein Graph ist genau dann planar, falls er weder eine K
3,3- Unterteilung noch eine K
5-Unterteilung enthält.
Wagner [1937]: Ein Graph ist genau dann planar, falls er weder K
3,3noch K
5als Minor enthält.
Wir zeigen beide Theoreme (algorithmisch)!
Planare Graphen vs. Zeichnungen
1 2
4 3 1
2
4
3
planarer Graph planarer Graph nicht-planarer Graph nicht-planare Zeichnung planare Zeichnung nicht-planare Zeichnung
äquivalent → Übung
© 17.01.19 Jens M. Schmidt
N
Stereographische Projektion projiziert die 2-Sphäre S 0 (bis auf deren „Nordpol“
(0,0,1)) auf die euklidische Ebene und zurück.
Korollar: Ein Graph ist genau dann planar, wenn er in S 0 gezeichnet werden kann.
Für jede Zeichnung eines Graphen in S 0 kann S 0 so „gerollt“ werden, dass der Nordpol in einer beliebigen Fläche ist.
Korollar: Jeder planare Graph hat eine planare Zeichnung mit einer beliebigen Fläche als Außenfläche.
Stereographische Projektion
S 0
© 17.01.19 Jens M. Schmidt
●
Rotationssystem / kombinatorische Einbettung := Funktion, die jedem Knoten eine zyklische Ordnung seiner inzidenten Kantenmenge zuweist.
●
Sphärische Einbettung := Rotationssystem einer planaren Zeichnung im Uhrzeigersinn → sphär. Einb. sind Äquivalenzklassen planarer Zeichnungen
●
Planare Einbettung := sphärische Einbettung + Angabe der äußeren Fläche
Theorem: Für ein gegebenes Rotationssystem kann (leicht) in Zeit O(m) getestet werden, ob es eine sphärische Einbettung ist.
Kombinatorische Einbettungen
gleiche sphärische Einbettung
c dh a
i e f
g b
c d
h a
i e f
g
b
ungleiche planare Einbettung
© 17.01.19 Jens M. Schmidt
Jahr Algorithmus Idee Laufzeit
1961 Auslander, Parter (Goldstein '63: Korrektur) cycle-based O(n
3) 1964 Demoucron, Malgrange, Pertuiset cycle-based O(n
2) 1967 Lempel, Even, Cederbaum vertex-addition O(n
2)
1974 Hopcroft, Tarjan cycle-based O(n)
1976 Booth, Lueker (LEC mit st-numbering+PQ-Bäume) vertex-addition O(n) 1985/2003 de Fraysseix, Ossona de Mendez, Rosenstiehl edge-addition O(n)
1993/2003 Shih, Hsu vertex-addition O(n)
1999/2004 Boyer, Myrvold vertex-addition O(n)
2012/2017 S. constr. sequence O(n)
State-of-the-Art:
●
In Praxis am schnellsten (100.000 Kanten in ca. 0.1 Sekunden); 2007 in OGDF
●
Zertifizierend: Geben planare Einbettung oder Kuratowski-Teilgraph aus.
Historie Planaritätstests
hier
© 17.01.19 Jens M. Schmidt
OGDF-Implementierung
© 17.01.19 Jens M. Schmidt
●
T := DFS-Baum, identifiziere Knoten mit deren DFIs
●
Für Knoten v sei lowpoint(v) kleinster DFI, der über 0 oder mehr Baumkanten und anschließend genau einer Nichtbaumkante (gerichtet) erreichbar ist.
●
Berechenbar in Zeit O(n+m) während DFS (bottom-up). wie genau?
Lowpoints
lowpoints
10 4
1
6
5
9 3
2
7 8
1 1 1
4 2
5
5 6
6
6
© 17.01.19 Jens M. Schmidt
●
Planare Graphen, Zeichnungen und Rotationssysteme
●
Algorithmus von Boyer-Myrvold, Walkup, Walkdown
●
Korrektheit
●
Laufzeit O(n)
●
Folgerungen
Überblick
© 17.01.19 Jens M. Schmidt
G := schlichter zshgnd. Graph mit 3n-5 Kanten (ignoriere weitere)
→ verändert Planarität nicht und bewirkt, dass wir O(n) Kanten haben Block := inkl.max. zshngd. Teilgraph ohne cut-vertex (Kante / 2-zshngd.) Algorithmus [Boyer-Myrvold 2004]:
●
Berechne DFS-Baum T und dessen lowpoints
Algorithmus
© 17.01.19 Jens M. Schmidt
G := schlichter zshgnd. Graph mit 3n-5 Kanten (ignoriere weitere)
→ verändert Planarität nicht und bewirkt, dass wir O(n) Kanten haben Block := inkl.max. zshngd. Teilgraph ohne cut-vertex (Kante / 2-zshngd.) Algorithmus [Boyer-Myrvold 2004]:
●
Berechne DFS-Baum T und dessen lowpoints
●
Zerlege E(T) in Blöcke entlang cut-vertices
Algorithmus
2
4 5
6 1
3
7
© 17.01.19 Jens M. Schmidt
G := schlichter zshgnd. Graph mit 3n-5 Kanten (ignoriere weitere)
→ verändert Planarität nicht und bewirkt, dass wir O(n) Kanten haben Block := inkl.max. zshngd. Teilgraph ohne cut-vertex (Kante / 2-zshngd.) Algorithmus [Boyer-Myrvold 2004]:
●
Berechne DFS-Baum T und dessen lowpoints
●
Zerlege E(T) in Blöcke entlang cut-vertices
Virtuelle Wurzel eines Blocks hat genau 1 Kind in T:
●
Wenn Block=Kante: ok
●
Andernfalls wäre Block nicht 2-zusammenhängend.
Algorithmus
virtuelle Wurzel virtu elle Wur zel
1
2
3
5 3
2
4 5
6 6 1
3
7
© 17.01.19 Jens M. Schmidt
G := schlichter zshgnd. Graph mit 3n-5 Kanten (ignoriere weitere)
→ verändert Planarität nicht und bewirkt, dass wir O(n) Kanten haben Block := inkl.max. zshngd. Teilgraph ohne cut-vertex (Kante / 2-zshngd.) Algorithmus [Boyer-Myrvold 2004]:
●
Berechne DFS-Baum T und dessen lowpoints
●
Zerlege E(T) in Blöcke entlang cut-vertices
●
Für Knoten v := n,...,1 (umgekehrte DFI-Reihenfolge)
●
Für jede Rückwärtskante vw
Walkup(vw) finde einzubettenden Teilgraph
Algorithmus
1
2
3
5 3
2
4 5
6 6 1
3
7
© 17.01.19 Jens M. Schmidt
G := schlichter zshgnd. Graph mit 3n-5 Kanten (ignoriere weitere)
→ verändert Planarität nicht und bewirkt, dass wir O(n) Kanten haben Block := inkl.max. zshngd. Teilgraph ohne cut-vertex (Kante / 2-zshngd.) Algorithmus [Boyer-Myrvold 2004]:
●
Berechne DFS-Baum T und dessen lowpoints
●
Zerlege E(T) in Blöcke entlang cut-vertices
●
Für Knoten v := n,...,1 (umgekehrte DFI-Reihenfolge)
●
Für jede Rückwärtskante vw
Walkup(vw) finde einzubettenden Teilgraph
Algorithmus
1
2
3
5 3
2
4 5
6 6 1
3
7
© 17.01.19 Jens M. Schmidt
G := schlichter zshgnd. Graph mit 3n-5 Kanten (ignoriere weitere)
→ verändert Planarität nicht und bewirkt, dass wir O(n) Kanten haben Block := inkl.max. zshngd. Teilgraph ohne cut-vertex (Kante / 2-zshngd.) Algorithmus [Boyer-Myrvold 2004]:
●
Berechne DFS-Baum T und dessen lowpoints
●
Zerlege E(T) in Blöcke entlang cut-vertices
●
Für Knoten v := n,...,1 (umgekehrte DFI-Reihenfolge)
●
Für jede Rückwärtskante vw
Walkup(vw) finde einzubettenden Teilgraph
Algorithmus
1
2
3
5 3
2
4 5
6 6 1
3
7
© 17.01.19 Jens M. Schmidt
G := schlichter zshgnd. Graph mit 3n-5 Kanten (ignoriere weitere)
→ verändert Planarität nicht und bewirkt, dass wir O(n) Kanten haben Block := inkl.max. zshngd. Teilgraph ohne cut-vertex (Kante / 2-zshngd.) Algorithmus [Boyer-Myrvold 2004]:
●
Berechne DFS-Baum T und dessen lowpoints
●
Zerlege E(T) in Blöcke entlang cut-vertices
●
Für Knoten v := n,...,1 (umgekehrte DFI-Reihenfolge)
●
Für jede Rückwärtskante vw
Walkup(vw) finde einzubettenden Teilgraph
Algorithmus
1
2
3
5 3
2
4 5
6 6 1
3
7
© 17.01.19 Jens M. Schmidt
G := schlichter zshgnd. Graph mit 3n-5 Kanten (ignoriere weitere)
→ verändert Planarität nicht und bewirkt, dass wir O(n) Kanten haben Block := inkl.max. zshngd. Teilgraph ohne cut-vertex (Kante / 2-zshngd.) Algorithmus [Boyer-Myrvold 2004]:
●
Berechne DFS-Baum T und dessen lowpoints
●
Zerlege E(T) in Blöcke entlang cut-vertices
●
Für Knoten v := n,...,1 (umgekehrte DFI-Reihenfolge)
●
Für jede Rückwärtskante vw
Walkup(vw) finde einzubettenden Teilgraph
Algorithmus
1
2
3
5 3
2
4 5
6 6 1
3
7
© 17.01.19 Jens M. Schmidt
G := schlichter zshgnd. Graph mit 3n-5 Kanten (ignoriere weitere)
→ verändert Planarität nicht und bewirkt, dass wir O(n) Kanten haben Block := inkl.max. zshngd. Teilgraph ohne cut-vertex (Kante / 2-zshngd.) Algorithmus [Boyer-Myrvold 2004]:
●
Berechne DFS-Baum T und dessen lowpoints
●
Zerlege E(T) in Blöcke entlang cut-vertices
●
Für Knoten v := n,...,1 (umgekehrte DFI-Reihenfolge)
●
Für jede Rückwärtskante vw
Walkup(vw) finde einzubettenden Teilgraph
Ein nicht-virtueller Knoten x heißt (rekursiv definiert)
●
pertinent, falls vx Rückwärtskante ist oder
Algorithmus
stellt als dynamische Information bereit:
1
2
3
5 3
2
4 5
6 6 1
3
7
© 17.01.19 Jens M. Schmidt
G := schlichter zshgnd. Graph mit 3n-5 Kanten (ignoriere weitere)
→ verändert Planarität nicht und bewirkt, dass wir O(n) Kanten haben Block := inkl.max. zshngd. Teilgraph ohne cut-vertex (Kante / 2-zshngd.) Algorithmus [Boyer-Myrvold 2004]:
●
Berechne DFS-Baum T und dessen lowpoints
●
Zerlege E(T) in Blöcke entlang cut-vertices
●
Für Knoten v := n,...,1 (umgekehrte DFI-Reihenfolge)
●
Für jede Rückwärtskante vw
Walkup(vw) finde einzubettenden Teilgraph
Ein nicht-virtueller Knoten x heißt (rekursiv definiert)
●
pertinent, falls vx Rückwärtskante ist oder
ein Kinderblock von x einen pertinenten Knoten enthält;
Algorithmus
stellt als dynamische Information bereit:
1
2
3 2
4
1
3 3
5 5
6 6
7
© 17.01.19 Jens M. Schmidt
G := schlichter zshgnd. Graph mit 3n-5 Kanten (ignoriere weitere)
→ verändert Planarität nicht und bewirkt, dass wir O(n) Kanten haben Block := inkl.max. zshngd. Teilgraph ohne cut-vertex (Kante / 2-zshngd.) Algorithmus [Boyer-Myrvold 2004]:
●
Berechne DFS-Baum T und dessen lowpoints
●
Zerlege E(T) in Blöcke entlang cut-vertices
●
Für Knoten v := n,...,1 (umgekehrte DFI-Reihenfolge)
●
Für jede Rückwärtskante vw
Walkup(vw) finde einzubettenden Teilgraph
Ein nicht-virtueller Knoten x heißt (rekursiv definiert)
●
pertinent, falls vx Rückwärtskante ist oder
ein Kinderblock von x einen pertinenten Knoten enthält;
Algorithmus
stellt als dynamische Information bereit:
1
2
3 3
2
4 5
1
3
5 6
6
7
© 17.01.19 Jens M. Schmidt
G := schlichter zshgnd. Graph mit 3n-5 Kanten (ignoriere weitere)
→ verändert Planarität nicht und bewirkt, dass wir O(n) Kanten haben Block := inkl.max. zshngd. Teilgraph ohne cut-vertex (Kante / 2-zshngd.) Algorithmus [Boyer-Myrvold 2004]:
●
Berechne DFS-Baum T und dessen lowpoints
●
Zerlege E(T) in Blöcke entlang cut-vertices
●
Für Knoten v := n,...,1 (umgekehrte DFI-Reihenfolge)
●
Für jede Rückwärtskante vw
Walkup(vw) finde einzubettenden Teilgraph
Ein nicht-virtueller Knoten x heißt (rekursiv definiert)
●
pertinent, falls vx Rückwärtskante ist oder
ein Kinderblock von x einen pertinenten Knoten enthält;
●
extern, falls eine Rückwärtskante yx mit y< DFI v existiert oder
Algorithmus
stellt als dynamische Information bereit:
1
2
3 2
4
1
3 3
5 5
6 6
7
© 17.01.19 Jens M. Schmidt
G := schlichter zshgnd. Graph mit 3n-5 Kanten (ignoriere weitere)
→ verändert Planarität nicht und bewirkt, dass wir O(n) Kanten haben Block := inkl.max. zshngd. Teilgraph ohne cut-vertex (Kante / 2-zshngd.) Algorithmus [Boyer-Myrvold 2004]:
●
Berechne DFS-Baum T und dessen lowpoints
●
Zerlege E(T) in Blöcke entlang cut-vertices
●
Für Knoten v := n,...,1 (umgekehrte DFI-Reihenfolge)
●
Für jede Rückwärtskante vw
Walkup(vw) finde einzubettenden Teilgraph
Ein nicht-virtueller Knoten x heißt (rekursiv definiert)
●
pertinent, falls vx Rückwärtskante ist oder
ein Kinderblock von x einen pertinenten Knoten enthält;
●
extern, falls eine Rückwärtskante yx mit y< DFI v existiert oder ein Kinderblock von x einen externen Knoten enthält.
Ein Block heißt pertinent / extern, wenn er einen solchen Knoten enthält.
Algorithmus
stellt als dynamische Information bereit:
1
2
3 2
4
1
3 3
5
6 6 5
7
© 17.01.19 Jens M. Schmidt
G := schlichter zshgnd. Graph mit 3n-5 Kanten (ignoriere weitere)
→ verändert Planarität nicht und bewirkt, dass wir O(n) Kanten haben Block := inkl.max. zshngd. Teilgraph ohne cut-vertex (Kante / 2-zshngd.) Algorithmus [Boyer-Myrvold 2004]:
●
Berechne DFS-Baum T und dessen lowpoints
●
Zerlege E(T) in Blöcke entlang cut-vertices
●
Für Knoten v := n,...,1 (umgekehrte DFI-Reihenfolge)
●
Für jede Rückwärtskante vw
Walkup(vw) finde einzubettenden Teilgraph
●
Für jedes Kind u von v in T:
Walkdown(u) bette Rückwärtskanten ein
Algorithmus
1
2
3 2
4
1
3 3
5
6 6 5
7
© 17.01.19 Jens M. Schmidt
Walkdown(u=5):
●
B := Block, der v und u enthält.
●
2 Iterationen: Eine gegen, eine im Uhrzeigersinn (CCW und CW).
●
Traversiere an B gewurzelte pertinente Blöcke top-down.
●
Jeden Block an äußerer Fläche in gewählter Richtung.
●
Regel für jeden erreichten Knoten w, solange w v:
●
Falls vorhanden, bette Rückwärtskante vw zur v-Wurzel in gewählter Richtung ein. → verschmilzt Pfad von Blöcken
●
Falls w pertinenten Kinderblock hat,
●
steige zu diesem ab
(falls mehrere, zuerst zu nicht-externen),
Algorithmus
1
2
3 2
4
1
3 3
5
6 6 5
7
B
© 17.01.19 Jens M. Schmidt
Walkdown(u=5):
●
B := Block, der v und u enthält.
●
2 Iterationen: Eine gegen, eine im Uhrzeigersinn (CCW und CW).
●
Traversiere an B gewurzelte pertinente Blöcke top-down.
●
Jeden Block an äußerer Fläche in gewählter Richtung.
●
Regel für jeden erreichten Knoten w, solange w v:
●
Falls vorhanden, bette Rückwärtskante vw zur v-Wurzel in gewählter Richtung ein. → verschmilzt Pfad von Blöcken
●
Falls w pertinenten Kinderblock hat,
●
steige zu diesem ab
(falls mehrere, zuerst zu nicht-externen),
Algorithmus
1
2
3 2
4
1
3 3
6 5
7
© 17.01.19 Jens M. Schmidt
Walkdown(u=3):
●
B := Block, der v und u enthält.
●
2 Iterationen: Eine gegen, eine im Uhrzeigersinn (CCW und CW).
●
Traversiere an B gewurzelte pertinente Blöcke top-down.
●
Jeden Block an äußerer Fläche in gewählter Richtung.
●
Regel für jeden erreichten Knoten w, solange w v:
●
Falls vorhanden, bette Rückwärtskante vw zur v-Wurzel in gewählter Richtung ein. → verschmilzt Pfad von Blöcken
●
Falls w pertinenten Kinderblock hat,
●
steige zu diesem ab
(falls mehrere, zuerst zu nicht-externen),
Algorithmus
1
2
3 2
4
1
3 3
6 5
7
jetzt v=2
nach Walkup(v=2):
© 17.01.19 Jens M. Schmidt
Walkdown(u=3):
●
B := Block, der v und u enthält.
●
2 Iterationen: Eine gegen, eine im Uhrzeigersinn (CCW und CW).
●
Traversiere an B gewurzelte pertinente Blöcke top-down.
●
Jeden Block an äußerer Fläche in gewählter Richtung.
●
Regel für jeden erreichten Knoten w, solange w v:
●
Falls vorhanden, bette Rückwärtskante vw zur v-Wurzel in gewählter Richtung ein. → verschmilzt Pfad von Blöcken
●
Falls w pertinenten Kinderblock hat,
●
steige zu diesem ab
(falls mehrere, zuerst zu nicht-externen),
Algorithmus
1
2 2
4
1
3 3
6 5
7
© 17.01.19 Jens M. Schmidt
Walkdown(u=3):
●
B := Block, der v und u enthält.
●
2 Iterationen: Eine gegen, eine im Uhrzeigersinn (CCW und CW).
●
Traversiere an B gewurzelte pertinente Blöcke top-down.
●
Jeden Block an äußerer Fläche in gewählter Richtung.
●
Regel für jeden erreichten Knoten w, solange w v:
●
Falls vorhanden, bette Rückwärtskante vw zur v-Wurzel in gewählter Richtung ein. → verschmilzt Pfad von Blöcken
●
Falls w pertinenten Kinderblock hat,
●
steige zu diesem ab
(falls mehrere, zuerst zu nicht-externen),
●
und traversiere in die Richtung weiter, in der zuerst ein pertinenter Knoten erreichbar ist.
→ kann implizit Block spiegeln
Algorithmus
1
2 2
4
1
3 3
6 5
7
© 17.01.19 Jens M. Schmidt
Walkdown(u=3):
●
B := Block, der v und u enthält.
●
2 Iterationen: Eine gegen, eine im Uhrzeigersinn (CCW und CW).
●
Traversiere an B gewurzelte pertinente Blöcke top-down.
●
Jeden Block an äußerer Fläche in gewählter Richtung.
●
Regel für jeden erreichten Knoten w, solange w v:
●
Falls vorhanden, bette Rückwärtskante vw zur v-Wurzel in gewählter Richtung ein. → verschmilzt Pfad von Blöcken
●
Falls w pertinenten Kinderblock hat,
●
steige zu diesem ab
(falls mehrere, zuerst zu nicht-externen),
●
und traversiere in die Richtung weiter, in der zuerst ein pertinenter Knoten erreichbar ist.
→ kann implizit Block spiegeln
Algorithmus
1
2 2
4
1
3
6
7 3
5
© 17.01.19 Jens M. Schmidt
Walkdown(u=3):
●
B := Block, der v und u enthält.
●
2 Iterationen: Eine gegen, eine im Uhrzeigersinn (CCW und CW).
●
Traversiere an B gewurzelte pertinente Blöcke top-down.
●
Jeden Block an äußerer Fläche in gewählter Richtung.
●
Regel für jeden erreichten Knoten w, solange w v:
●
Falls vorhanden, bette Rückwärtskante vw zur v-Wurzel in gewählter Richtung ein. → verschmilzt Pfad von Blöcken
●
Falls w pertinenten Kinderblock hat,
●
steige zu diesem ab
(falls mehrere, zuerst zu nicht-externen),
●
und traversiere in die Richtung weiter, in der zuerst ein pertinenter Knoten erreichbar ist.
→ kann implizit Block spiegeln
Algorithmus
1
2 2
4
1
3
6
7 3
5
© 17.01.19 Jens M. Schmidt
1
2 2
4
1
3
6 5
7
Walkdown(u=3):
●
B := Block, der v und u enthält.
●
2 Iterationen: Eine gegen, eine im Uhrzeigersinn (CCW und CW).
●
Traversiere an B gewurzelte pertinente Blöcke top-down.
●
Jeden Block an äußerer Fläche in gewählter Richtung.
●
Regel für jeden erreichten Knoten w, solange w v:
●
Falls vorhanden, bette Rückwärtskante vw zur v-Wurzel in gewählter Richtung ein. → verschmilzt Pfad von Blöcken
●
Falls w pertinenten Kinderblock hat,
●
steige zu diesem ab
(falls mehrere, zuerst zu nicht-externen),
●
und traversiere in die Richtung weiter, in der zuerst ein pertinenter Knoten erreichbar ist.
→ kann implizit Block spiegeln
Algorithmus
© 17.01.19 Jens M. Schmidt
Walkdown(u=3):
●
B := Block, der v und u enthält.
●
2 Iterationen: Eine gegen, eine im Uhrzeigersinn (CCW und CW).
●
Traversiere an B gewurzelte pertinente Blöcke top-down.
●
Jeden Block an äußerer Fläche in gewählter Richtung.
●
Regel für jeden erreichten Knoten w, solange w v:
●
Falls vorhanden, bette Rückwärtskante vw zur v-Wurzel in gewählter Richtung ein. → verschmilzt Pfad von Blöcken
●
Falls w pertinenten Kinderblock hat,
●
steige zu diesem ab
(falls mehrere, zuerst zu nicht-externen),
●
und traversiere in die Richtung weiter, in der zuerst ein pertinenter Knoten erreichbar ist.
→ kann implizit Block spiegeln
●
Falls in beiden Richtungen zuerst ein externer nicht
pertinenter Knoten liegt, stoppe CCW und CW-Walkdown mit diesen beiden Stoppknoten.
●
Stoppe, falls w extern und nicht pertinent
(dann ist w der Stoppknoten des aktuellen Walkdowns, hier Knoten 6)
Algorithmus
1
2 2
4
1
3
6 5
7
© 17.01.19 Jens M. Schmidt
Algorithmus [Boyer-Myrvold 2004]:
●
Berechne DFS-Baum T und dessen lowpoints
●
Zerlege E(T) in Blöcke entlang cut-vertices
●
Für Knoten v := n,...,1 (umgekehrte DFI-Reihenfolge)
●
Für jede Rückwärtskante vw
Walkup(vw) finde einzubettenden Teilgraph
●
Für jedes Kind u von v in T:
Walkdown(u) bette Rückwärtskanten ein
●
Falls eine Rückwärtskante nicht eingebettet:
Extrahiere Kuratowski-Teilgraph; STOPP
Algorithmus
1
2 2
4
1
3
6 5
7
© 17.01.19 Jens M. Schmidt
Algorithmus [Boyer-Myrvold 2004]:
●
Berechne DFS-Baum T und dessen lowpoints
●
Zerlege E(T) in Blöcke entlang cut-vertices
●
Für Knoten v := n,...,1 (umgekehrte DFI-Reihenfolge)
●
Für jede Rückwärtskante vw
Walkup(vw) finde einzubettenden Teilgraph
●
Für jedes Kind u von v in T:
Walkdown(u) bette Rückwärtskanten ein
●
Falls eine Rückwärtskante nicht eingebettet:
Extrahiere Kuratowski-Teilgraph; STOPP
Algorithmus
1
2 2
4
1
3
6 5
7
© 17.01.19 Jens M. Schmidt
Algorithmus [Boyer-Myrvold 2004]:
●
Berechne DFS-Baum T und dessen lowpoints
●
Zerlege E(T) in Blöcke entlang cut-vertices
●
Für Knoten v := n,...,1 (umgekehrte DFI-Reihenfolge)
●
Für jede Rückwärtskante vw
Walkup(vw) finde einzubettenden Teilgraph
●
Für jedes Kind u von v in T:
Walkdown(u) bette Rückwärtskanten ein
●
Falls eine Rückwärtskante nicht eingebettet:
Extrahiere Kuratowski-Teilgraph; STOPP
Algorithmus
1
6 5
7 2
4
3
1
© 17.01.19 Jens M. Schmidt
Algorithmus [Boyer-Myrvold 2004]:
●
Berechne DFS-Baum T und dessen lowpoints
●
Zerlege E(T) in Blöcke entlang cut-vertices
●
Für Knoten v := n,...,1 (umgekehrte DFI-Reihenfolge)
●
Für jede Rückwärtskante vw
Walkup(vw) finde einzubettenden Teilgraph
●
Für jedes Kind u von v in T:
Walkdown(u) bette Rückwärtskanten ein
●
Falls eine Rückwärtskante nicht eingebettet:
Extrahiere Kuratowski-Teilgraph; STOPP
Algorithmus
1
6 5
7 2
4
3
1
© 17.01.19 Jens M. Schmidt
1
6 5
7 2
4
3
1
Algorithmus [Boyer-Myrvold 2004]:
●
Berechne DFS-Baum T und dessen lowpoints
●
Zerlege E(T) in Blöcke entlang cut-vertices
●
Für Knoten v := n,...,1 (umgekehrte DFI-Reihenfolge)
●
Für jede Rückwärtskante vw
Walkup(vw) finde einzubettenden Teilgraph
●
Für jedes Kind u von v in T:
Walkdown(u) bette Rückwärtskanten ein
●
Falls eine Rückwärtskante nicht eingebettet:
Extrahiere Kuratowski-Teilgraph; STOPP
●
Identifiziere virtuelle Knoten mit realen
Algorithmus
© 17.01.19 Jens M. Schmidt
1
6 5
7 2
4
3
Algorithmus [Boyer-Myrvold 2004]:
●
Berechne DFS-Baum T und dessen lowpoints
●
Zerlege E(T) in Blöcke entlang cut-vertices
●
Für Knoten v := n,...,1 (umgekehrte DFI-Reihenfolge)
●
Für jede Rückwärtskante vw
Walkup(vw) finde einzubettenden Teilgraph
●
Für jedes Kind u von v in T:
Walkdown(u) bette Rückwärtskanten ein
●
Falls eine Rückwärtskante nicht eingebettet:
Extrahiere Kuratowski-Teilgraph; STOPP
●
Identifiziere virtuelle Knoten mit realen
●
Gebe komb. Einbettung aus (planar)
Algorithmus
© 17.01.19 Jens M. Schmidt
Algorithmus [Boyer-Myrvold 2004]:
●
Berechne DFS-Baum T und dessen lowpoints
●
Zerlege E(T) in Blöcke entlang cut-vertices
●
Für Knoten v := n,...,1 (umgekehrte DFI-Reihenfolge)
●
Für jede Rückwärtskante vw
Walkup(vw) finde einzubettenden Teilgraph
●
Für jedes Kind u von v in T:
Walkdown(u) bette Rückwärtskanten ein
●
Falls eine Rückwärtskante nicht eingebettet:
Extrahiere Kuratowski-Teilgraph; STOPP
●
Identifiziere virtuelle Knoten mit realen
●
Gebe komb. Einbettung aus (planar)
Algorithmus
© 17.01.19 Jens M. Schmidt
Walkdown spiegelt implizit Blöcke durch Richtungsänderung bei Abstieg, falls notwendig.
→ hier: C und G
Komplizierteres Walkdown-Beispiel
G
H C
A
D
F E
x
K
H I
J y v
u v
G H
C
A
D E F
x
K
H
I J
y u
v
© 17.01.19 Jens M. Schmidt
●
Planare Graphen, Zeichnungen und Rotationssysteme
●
Algorithmus von Boyer-Myrvold, Walkup, Walkdown
●
Korrektheit
●
Laufzeit O(n)
●
Folgerungen
Überblick
© 17.01.19 Jens M. Schmidt G
H C
A
D
F E
x
K
H I
J
y vu
Jede Einbettung einer Rückwärtskante erhält planare Einbettung:
●
Falls alle eingebettet wurden, ist G planar (und wir erhalten Zeugen dafür).
Was, wenn eine Rückwärtskante von v nicht eingebettet wird?
Korrektheit
Mergeknoten := cut-vertices von B-v Block B
ehemalige Blöcke vor Einbettung von v
(da Schritt v nur inzidente Kanten von v einbettet)
CCW-Stoppknoten x CW-Stoppknoten y
© 17.01.19 Jens M. Schmidt
Lemma: Falls eine Kante nicht eingebettet wird, enthält G einen Kuratowski-Minor.
Beweis:
●
Sei w ein pertinenter Knoten, der wegen x und y nicht erreicht wird.
●
x, y sind zum Stoppzeitpunkt in gemeinsamen Block B; sei r dessen virt. Wurzel Falls STOPP bei Richtungsfindung nach Abstieg: klar. Sonst wurde in den x und y enthaltenen Blöcken jeweils mindestens einmal eingebettet → gleicher Block
●
B ist 2-zusammenhängend da 3 Knoten x,y,w enthalten
●
Fall A: r v.
→ K
3,3-Minor.
●
Fall B: w hat pertinenten externen Kinderblock.
Korrektheit
x y
u v
w r
Fall B:
K
3,3-Minor Fall A:
K
3,3-Minor
x y
u v
w z
B
→ K
3,3-Minor.
© 17.01.19 Jens M. Schmidt
●
p
x-p
y-Pfad := Pfad in B, dessen Endknoten p
xund p
yjeweils innere Knoten des v- x-w- und v-y-w-Pfades sind, und diese als einzige Bs Außenfläche schneiden.
●
Falls B keinen p
x-p
y-Pfad enthält: <=> {v,w} ist Separationspaar von B
●
Nach Def. von Walkdown(u) enthält B-v nur Knoten des Teilbaums T(u) von T
→ Jeder x-y-Pfad in G[V(T(u))] enthält w (denn kein solcher verlässt B)
→ Eindeutiger x-y-Pfad in T(u) enthält w
→ w ist DFS-Vorfahre von x oder y und Mergeknoten da cut-vertex von B-v
→ Walkdown(u) besucht w früher als x oder y
→ Falls vw-Kante vorhanden, wurde diese bereits eingebettet
→ w pertinent wegen pertinentem externen Kinderblock → Fall B
Korrektheit
x y
u v
w r
Fall B:
K
3,3-Minor Fall A:
K
3,3-Minor
v
G H
C
A
D E F
x
K
H
I J
y u
v
x y
u v
w z
© 17.01.19 Jens M. Schmidt
●
Sonst enthält B p
x-p
y-Pfade:
Sei P der höchste solche, d.h. der, dessen Kanten in der Fläche enthalten sind, die entsteht, wenn aus B die inneren zu v inzidenten Kanten gelöscht werden.
●
P schneidet B-Außenfläche genau in Endknoten p
xund p
y→ Vor Einbettung von v bilden P und untere B-Außenfläche einen Block D
→ p
xund p
ysind Mergeknoten bis auf DFI-größeren, wenn beide in Blattblock
→ Der DFI-kleinere (hier p
y) ist Wurzel von D da Blöcke nur an Wurzeln verschmolzen werden
Korrektheit
x y
u v
w r
Fall B:
K
3,3-Minor Fall A:
K
3,3-Minor
F
G
H
I J
E D
v
C
u
y
x w
px
py
P
B
x y
u v
w z
© 17.01.19 Jens M. Schmidt
●
Fall C: p
xist innerer Knoten des v-x-Außenpfades ohne y (oder analog für p
y).
●
Sonst ist p
x=x oder DFS-Vorgänger von x
Korrektheit
x y
u v
w r
Fall B:
K
3,3-Minor Fall A:
K
3,3-Minor Fall C:
K
3,3-Minor
x y
u v
w z
x y
w u
px
v
F
G
H
I J
E D
v
C
u
y x
px w
py
P
B
© 17.01.19 Jens M. Schmidt
●
Fall C: p
xist innerer Knoten des v-x-Außenpfades ohne y (oder analog für p
y).
●
Sonst ist p
x=x oder DFS-Vorgänger von x
●
Fall D: P enthält inneren Knoten z, von dem ein B-interner Pfad nach v existiert.
●
Sonst
Korrektheit
x y
u v
w r
Fall B:
K
3,3-Minor Fall A:
K
3,3-Minor Fall C:
K
3,3-Minor Fall D:
K
3,3-Minor
x y
u v
w z
x y
w u
px
v
x y
w u
z
v
F
G
H
I J
E D
v
C
u
y x
px w
py
P
B
© 17.01.19 Jens M. Schmidt
●
Fall C: p
xist innerer Knoten des v-x-Außenpfades ohne y (oder analog für p
y).
●
Sonst ist p
x=x oder DFS-Vorgänger von x
●
Fall D: P enthält inneren Knoten z, von dem ein B-interner Pfad nach v existiert.
●
Sonst
Korrektheit
x y
u v
w r
Fall B:
K
3,3-Minor Fall A:
K
3,3-Minor Fall C:
K
3,3-Minor Fall D:
K
3,3-Minor
x y
w u
z
v
x y
w u
px
x y v
u v
w z
F
G
H
I J
E D
v
C
u
y x
px w
py
P
B
© 17.01.19 Jens M. Schmidt
●
Fall C: p
xist innerer Knoten des v-x-Außenpfades ohne y (oder analog für p
y).
●
Sonst ist p
x=x oder DFS-Vorgänger von x
●
Fall D: P enthält inneren Knoten z, von dem ein B-interner Pfad nach v existiert.
●
Sonst war p
xbei Erreichen von p
yim Walkdown(u)
●
pertinent und extern da in Block C, der x enthält, abgestiegen wurde (existiert, da nicht in Fall C)
●
1. behandelter Knoten auf Pfad P (sonst Fall D)
→ D-Außenpfad enthält inneren externen Knoten sonst wäre Walkdown zuerst zu w traversiert
Korrektheit
x y
u v
w r
Fall B:
K
3,3-Minor Fall A:
K
3,3-Minor Fall C:
K
3,3-Minor Fall D:
K
3,3-Minor
F
G
H
I J
E D
v
C
u
y x
px w
py
P
B
x y
u v
w z
x y
w u
px
v
x y
w u
z
v
© 17.01.19 Jens M. Schmidt
●
Fall C: p
xist innerer Knoten des v-x-Außenpfades ohne y (oder analog für p
y).
●
Sonst ist p
x=x oder DFS-Vorgänger von x
●
Fall D: P enthält inneren Knoten z, von dem ein B-interner Pfad nach v existiert.
●
Sonst war p
xbei Erreichen von p
yim Walkdown(u)
●
pertinent und extern da in Block C, der x enthält, abgestiegen wurde (existiert, da nicht in Fall C)
●
1. behandelter Knoten auf Pfad P (sonst Fall D)
→ D-Außenpfad enthält inneren externen Knoten sonst wäre Walkdown zuerst zu w traversiert
→ Fall E
Korrektheit
x y
u v
w r
Fall B:
K
3,3-Minor Fall A:
K
3,3-Minor Fall C:
K
3,3-Minor Fall D:
K
3,3-Minor Fall E:
K
5-Minor
x y
u v
w z
x y
w u
px
v
x y
w u
z
v
x y
u
v
w F
G
H
I J
E D
v
C
u
y x
px w
py
P
B
© 17.01.19 Jens M. Schmidt
●
Planare Graphen, Zeichnungen und Rotationssysteme
●
Algorithmus von Boyer-Myrvold, Walkup, Walkdown
●
Korrektheit
●
Laufzeit O(n)
●
Folgerungen
Überblick
© 17.01.19 Jens M. Schmidt
Theorem: Der Boyer-Myrvold Algorithmus hat Laufzeit O(n).
Beweis:
●
Sei v einzubettender Knoten.
●
Wie findet Walkup(vw) pertinente Knoten+Blöcke effizient?
●
Starte bei w und traversiere Blockaußenflächen parallel
●
Bei Erreichen der virtuellen Wurzel iteriere mit Vaterblock
→ Laufzeit = O(Summe der kürzeren Außenpfade)
●
Flächen-Konto:
●
Verrechne entstehende Laufzeitkosten mit den inneren Kanten der später von vw eingeschlossenen Fläche
●
Diese werden nie mehr besucht.
→ Walkup(vw) hat amortisiert Laufzeit O(1)
(unabhängig von potentiellen Spiegelungen der Blöcke)
●
Problem: Walkup(vw') kann gleiche Blöcke wieder traversieren
Laufzeit O(n)
v
w
v u
w‘
© 17.01.19 Jens M. Schmidt
Theorem: Der Boyer-Myrvold Algorithmus hat Laufzeit O(n).
Beweis:
●
Sei v einzubettender Knoten.
●
Wie findet Walkup(vw) pertinente Knoten+Blöcke effizient?
●
Starte bei w und traversiere Blockaußenflächen parallel
●
Bei Erreichen der virtuellen Wurzel iteriere mit Vaterblock
→ Laufzeit = O(Summe der kürzeren Außenpfade)
●
Flächen-Konto:
●
Verrechne entstehende Laufzeitkosten mit den inneren Kanten der später von vw eingeschlossenen Fläche
●
Diese werden nie mehr besucht.
→ Walkup(vw) hat amortisiert Laufzeit O(1)
(unabhängig von potentiellen Spiegelungen der Blöcke)
●
Problem: Walkup(vw') kann gleiche Blöcke wieder traversieren
●
Lösung: Markiere jeden besuchten Knoten mit v + stoppe Traversierung an mit v markierten Knoten
●
Externe Knoten: durch lowpoints in Zeit O(1) testbar
Laufzeit O(n)
v
w
v u
w‘
© 17.01.19 Jens M. Schmidt
●
Wie spiegelt Walkdown(u) Blöcke effizient?
●
Speichere in virtueller Wurzel, ob Block gespiegelt zu interpretieren ist.
→ künftige Traversierungen werden dadurch in Zeit O(1) invertiert
●
Kosten für Walkdown-Traversierung und Einbetten von Rückwärtskanten vw
●
Jeder Schritt amortisiert in Zeit O(1) durch Face-konto, bis auf:
●
Kosten für Pfade P vom letzten eingebetteten Knoten bis Stoppknoten x
●
P kann in Folgeschritten immer wieder traversiert werden → ineffizient
Lösung: Füge jeweils Abkürzungskante vx ein ( 2 pro Block, erhält Planarität)
→ Damit ist Walkdownrichtung nach Abstieg in Block in Zeit O(1) entscheidbar.
Laufzeit O(n)
F
G
H
I J
E D
v
C
u
x
y
© 17.01.19 Jens M. Schmidt
●
Planare Graphen, Zeichnungen und Rotationssysteme
●
Algorithmus von Boyer-Myrvold, Walkup, Walkdown
●
Korrektheit
●
Laufzeit O(n)
●
Folgerungen
Überblick
© 17.01.19 Jens M. Schmidt
Korrektheitsbeweis ergibt entweder planare Einbettung oder K
3,3- oder K
5-Minor.
Nach Eulerformel ist im letzteren Fall der Graph nicht planar.
→ Korollar [Wagner 1937]: Ein Graph ist genau dann planar, falls er weder K
3,3noch K
5als Minor enthält.
Nach Übung äquivalent zu:
→ Korollar [Kuratowski 1930]: Ein Graph ist genau dann planar, falls er weder eine K
3,3-Unterteilung noch eine K
5-Unterteilung enthält.
Folgerungen
© 17.01.19 Jens M. Schmidt
Berechne (kanten-)maximalen planaren Teilgraph: NP-schwer
Berechne inklusions-maximalen planaren Teilgraph: O(m) [Djidjev 2006]
Verallgemeinerungen?
F
G
H
I J
E D
v
C
u
x
y