117
1 Julian Arz, Timo Bingmann, Sebastian Schlag 10. Übung – Algorithmen I Fakultät für Informatik Institut für Theoretische Informatik I NSTITUT FÜR THEORETISCHE I NFORMATIK,PROF .SANDERS 10. Übung – Algorithmen I Julian Arz, Timo Bingmann, Sebastian Schlag KIT – Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu

10. Übung – Algorithmen I - KIT – ITI Algorithmik IIalgo2.iti.kit.edu/documents/algo1-2014/uebung_10.pdf · 8 Graphrepräsentation 1736 fragt L. Euler die folgende touristische

Embed Size (px)

Citation preview

1 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS

10. Übung – Algorithmen IJulian Arz, Timo Bingmann, Sebastian Schlag

KIT – Universität des Landes Baden-Württemberg undnationales Forschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu

Übersicht

2 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Wiederholung Vorlesung

Vorlesung: Beschleunigungstechniken für Routenplanung

Graphentheorie

Eulersche und Hamiltonsche Kreise

Bäume

Graphpartitionierung

3 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Wiederholung der Vorlesung

Sanders: Algorithmen IJuly 8, 2013 295

8 Graphrepräsentation

� 1736 fragt L. Euler die folgende

“touristische” Frage:

� Straßen- oder Computernetzwerke

� Zugverbindungen (Raum und Zeit)

� Soziale Netzwerke (Freundschafts-, Zitier-, Empfehlungs-,. . . )

� Aufgabenabhängigkeiten scheduling Probleme

� Werte und arithmetische Operationen Compilerbau

� . . .

Sanders: Algorithmen IJuly 8, 2013 316

9 Graphtraversierung

Ausgangspunkt oder Baustein fast jedes nichtrivialen Graphenalgorithmus

Sanders: Algorithmen IJuly 8, 2013 339

BFS←→ DFS

pro BFS:

� nichtrekursiv

� keine Vorwärtskanten

� kürzeste Wege, „Umgebung“ forward

backward

cross

stree

pro DFS

� keine explizite TODO-Datenstruktur (Rekursionsstapel)

� Grundlage vieler Algorithmen

Sanders: Algorithmen IJuly 8, 2013 340

10 Kürzeste Wege

Eingabe:Graph G= (V,E)

Kostenfunktion/Kantengewicht c : E→ RAnfangsknoten s.

Ausgabe:für alle v∈V

Länge µ(v) des kürzesten Pfades von snach v,

µ(v) := min{c(p) : p ist Pfad von snach v}mit c(〈e1, . . . ,ek〉) := ∑k

i=1c(ei).

Oft wollen wir auch „geeignete“ Repräsentation der kürzesten Pfade.

3.0 km

Sanders: Algorithmen IJuly 8, 2013 347

Edsger Wybe Dijkstra 1930–2002

1972 ACM Turingpreis

THE: das erste Mulitasking-OS

Semaphor

Selbst-stabilisierende Systeme

GOTO Statement Considered Harmful

Sanders: Algorithmen IJuly 8, 2013 348

Allgemeine Definitionen

Wie bei BFS benutzen wir zwei Knotenarrays:

� d[v] = aktuelle (vorläufige) Distanz von snach v

Invariante: d[v]≥ µ(v)

� parent[v] = Vorgänger von v

auf dem (vorläufigen) kürzesten Pfad von snach v

Invariante: dieser Pfad bezeugt d[v]

Initialisierung:d[s] = 0, parent[s] = s

d[v] = ∞, parent[v] =⊥

Kante

Kante

Kante

v

s

d[v]pare

ntpa

rent

pare

nt

Sanders: Algorithmen IJuly 8, 2013 349

Kante (u,v) relaxieren

falls d[u]+c(u,v)< d[v]

vielleicht d[v] = ∞setze d[v] := d[u]+c(u,v) und parent[v] := u

Invarianten bleiben erhalten!

Beobachtung:d[v] Kann sich mehrmals ändern!

u

u′

v

s

d[u′]d[u]

d[u]+c(u,v)

d[u′]+c(u′,v)

parent

Sanders: Algorithmen IJuly 8, 2013 350

Dijkstra’s Algorithmus: Pseudocode

initialize d, parent

all nodes are non-scanned

while ∃ non-scanned node u with d[u]< ∞u := non-scanned node v with minimal d[v]

relax all edges (u,v) out of u

u is scanned now

Behauptung:Am Ende definiert d die optimalen Entfernungen

und parent die zugehörigen Wege

Sanders: Algorithmen IJuly 8, 2013 351

Beispielcb

d e f

s

cb

d e f

s

2

19

3 2

8

70

50

102

4

a5

10

c

d e f

s

b

f

s

b

ed

c

c

fed

c

d f

b

e

2

19

3 2

8

70

50

102

4

a5

6 6

7

2

19

3 2

8

70

50

102

4

a5

6 6

7

s

b

2

19

3 2

8

70

50

102

4

a5

6 6

7

s1

9

3 2

8

70

50

102

4

a

10

2

2

19

3 2

8

70

50

102

4

a5

10 6

7

Sanders: Algorithmen IJuly 8, 2013 352

Korrektheit Annahme: alle Kosten nicht negativ!

Wir zeigen: ∀v∈V :

� v erreichbar =⇒ v wird irgendwann gescannt

� v gescannt =⇒ µ(v) = d[v]

Sanders: Algorithmen IJuly 8, 2013 356

Implementierung?

initialize d, parent

all nodes are non-scanned

while ∃ non-scanned node u with d[u]< ∞u := non-scanned node v with minimal d[v]

relax all edges (u,v) out of u

u is scanned now

Wichtigste Operation: finde u

Sanders: Algorithmen IJuly 8, 2013 357

Prioritätsliste

Wir speichern ungescannte erreichte Knoten in

addressierbarer Prioritätsliste Q.

Schlüssel ist d[v].

Knoten speichern handles. oder gleich items

Sanders: Algorithmen IJuly 8, 2013 363

Function Dijkstra(s : NodeId) : NodeArray×NodeArray

d = {∞, . . . ,∞}; parent[s]:= s; d[s] := 0; Q.insert(s) // O(n)

while Q 6= /0 dou := Q.deleteMin // ≤ n×foreach edge e= (u,v) ∈ E do // ≤m×

if d[u]+c(e)< d[v] then // ≤m×d[v]:= d[u]+c(e) // ≤m×parent[v] := u // ≤m×if v∈Q then Q.decreaseKey(v) // ≤m×elseQ.insert(v) // ≤ n×

return (d,parent)

Insgesamt

TDijkstra = O(m·TdecreaseKey(n)+n· (TdeleteMin(n)+Tinsert(n)))

Sanders: Algorithmen IJuly 8, 2013 365

Laufzeit

Bessere Implementierung mit Binary-Heapprioritätslisten:

� insert O(logn)

� decreaseKey O(logn)

� deleteMin O(logn)

TDijkstra = O(m·TdecreaseKey(n)+n· (TdeleteMin(n)+Tinsert(n)))

TDijkstraBHeap = O(m· logn+n· (logn+1))

= O((m+n) logn)

Sanders: Algorithmen IJuly 8, 2013 366

Laufzeit

(Noch) besser mit Fibonacci-Heapprioritätslisten:

� insert O(1)

� decreaseKey O(1) (amortisiert)

� deleteMin O(logn) (amortisiert)

TDijkstra = O(m·TdecreaseKey(n)+n· (TdeleteMin(n)+Tinsert(n)))

TDijkstraFib = O(m·1+n· (logn+1))

= O(m+nlogn)

Aber: konstante Faktoren in O(·) sind hier größer!

4 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Vorlesung: Beschleunigungstechniken fürRoutenplanung

Sanders: Algorithmen IJuly 8, 2013 380

Mehr zu kürzesten Wege

Viele Arbeiten zu besseren Prioritätslisten O(m+nlog logn)

[Thorup 2004]

Verallgemeinerungen

� Mehrere Zielfunktionen abwägen

� Mehrere Ziele in beliebiger Reihenfolge anfahren siehe auch

Optimierungskapitel

� Mehrere disjunkte Wege

Fast alles schwierig (NP-hart)

Sanders: Algorithmen IJuly 8, 2013 383

Straßennetzwerke

Wir konzentrieren uns auf Straßennetzwerke.

� mehrere nützliche Eigenschaften die sich ausnutzen lassen

� viele reale Anwendungen

� einige Techniken: anwendbar für öffentliche Verkehrsmittel

� die meisten Techniken: unklar wie nützlich sie für weitere Graphtypen sind

Sanders: Algorithmen IJuly 8, 2013 384

Straßennetzwerke

Eigenschaften

� groß, z.B. n=18 000 000 Knoten für Westeuropa

� dünn besetzt, z.B., m= Θ(n) Kanten

� beinahe planar, d.h., wenige Kanten kreuzen sich (Brücken)

� inhärente Hierarchie, schnellste Pfade benutzen wichtige Straßen

Sanders: Algorithmen IJuly 8, 2013 381

10.8 Distanz zu einem Zielknotent

Was machen wir, wenn wir nur die Distanz von szu einem bestimmten

Knoten t wissen wollen?

Trick 0:

ts

Dijkstra hört auf, wenn t aus Q entfernt wird

Spart “im Durchschnitt” Hälfte der Scans

Frage: Wieviel spart es (meist) beim Europa-Navi?

Sanders: Algorithmen IJuly 8, 2013 382

Ideen für Routenplanung

mehr in Algorithmen II, Algorithm Engineering

� Vorwärts + Rückwärtssuche

ts

� Zielgerichtete Suche

ts

� Hierarchien ausnutzen

s t

� Teilabschnitte tabellieren

s z

Meist zentrale Idee: Vorberechnungamortisiert über viele Anfragen

Sanders: Algorithmen IJuly 8, 2013 386

1. Approach

Transit-Node Routing

[with H. Bast and S. Funke]

s t

Sanders: Algorithmen IJuly 8, 2013 387

X XX XBeispiel:Karlsruhe→ Copenhagen

Sanders: Algorithmen IJuly 8, 2013 388

X XX XBeispiel:Karlsruhe→ Berlin

Sanders: Algorithmen IJuly 8, 2013 389

X XX XBeispiel:Karlsruhe→ Vienna

Sanders: Algorithmen IJuly 8, 2013 390

X XX XBeispiel:Karlsruhe→ Munich

Sanders: Algorithmen IJuly 8, 2013 391

X XX XBeispiel:Karlsruhe→ Rome

Sanders: Algorithmen IJuly 8, 2013 392

X XX XBeispiel:Karlsruhe→ Paris

Sanders: Algorithmen IJuly 8, 2013 393

X XX XBeispiel:Karlsruhe→ London

Sanders: Algorithmen IJuly 8, 2013 394

X XX XBeispiel:Karlsruhe→ Brussels

Sanders: Algorithmen IJuly 8, 2013 395

X XX XBeispiel:Karlsruhe→ Copenhagen

Sanders: Algorithmen IJuly 8, 2013 396

X XX XBeispiel:Karlsruhe→ Berlin

Sanders: Algorithmen IJuly 8, 2013 397

X XX XBeispiel:Karlsruhe→ Vienna

Sanders: Algorithmen IJuly 8, 2013 398

X XX XBeispiel:Karlsruhe→ Munich

Sanders: Algorithmen IJuly 8, 2013 399

X XX XBeispiel:Karlsruhe→ Rome

Sanders: Algorithmen IJuly 8, 2013 400

X XX XBeispiel:Karlsruhe→ Paris

Sanders: Algorithmen IJuly 8, 2013 401

X XX XBeispiel:Karlsruhe→ London

Sanders: Algorithmen IJuly 8, 2013 402

X XX XBeispiel:Karlsruhe→ Brussels

Sanders: Algorithmen IJuly 8, 2013 403

Erste Beobachtung

Für langeStrecken:benutzen

nur wenige ‘wichtige’ Zugänge zum Fernverkehrsnetzwerk,

access points

( wir können alle Zugangspunkte vorberechnen

[in Europa: etwa 10 Zugangspunkte pro Knoten im Mittel]

Sanders: Algorithmen IJuly 8, 2013 404

X XX XBeispiel:Karlsruhe→ Berlin

Sanders: Algorithmen IJuly 8, 2013 405

X XX XBeispiel:Karlsruhe→ Berlin

Sanders: Algorithmen IJuly 8, 2013 406

X XX XBeispiel:Karlsruhe→ Berlin

Sanders: Algorithmen IJuly 8, 2013 407

Zweite Beobachtung

Jeder Zugangspunkt ist für mehrere Knoten relevant.

Gesamtmenge aller Zugangspunkte ist klein,

Transitknotenmenge

( wir können alle Abstände zwischen allen Transitknoten speichern)

[in Europa:≈ 10 000 Transitknoten]

Sanders: Algorithmen IJuly 8, 2013 408

Transit-Node Routing

Preprocessing:

� Identifiziere Transitknoten T ⊆V

� Berechne |T |× |T | Abstandstabelle

� Für jeden Knoten: identifiziere Zugangsknoten (Abbildung

A : V→ 2T ),

Speichere Abstände

Query (geg. Start sund Ziel t): berechne

dtop(s, t) := min{d(s,u)+d(u,v)+d(v, t) : u∈ A(s),v∈ A(t)}

Sanders: Algorithmen IJuly 8, 2013 409

Transit-Node Routing

Lokalitätsfilter :

lokale Fälle ausfiltern ( Spezialbehandlung)

L : V×V→{true, false}

¬L(s, t) impliziert d(s, t) = dtop(s, t)

Sanders: Algorithmen IJuly 8, 2013 410

Beispiel

Sanders: Algorithmen IJuly 8, 2013 411

Experimente� sehr schnelle queries

(4 µs, > 1 000 000 mal schneller als DIJKSTRA)

� Gewinner der 9. DIMACS Implementation Challenge

� erträgliche Vorberechnungszeiten (1:15 h) und

Speicherbedarf (247 bytes/Knoten)

s t

Sanders: Algorithmen IJuly 8, 2013 412

Offene Fragen

� Wie bestimmt man die Transitknoten?

� Wie bestimmt man die Zugangsknoten effizient?

� Wie bestimmt man die Lokalitätsfilter?

� Wie handhabt man lokale Anfragen?

Sanders: Algorithmen IJuly 8, 2013 413

Open Questions

� Wie bestimmt man die transit nodes?

� Wie bestimmt man die access points efficiently?

� Wie bestimmt man die locality filter?

� Wie handhabt man lokale Anfragen?

Antwort:

� Andere Routenplanungstechniken benutzen!

5 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Graphentheorie

Adjazenz- und Inzidenzmatrix

6 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

v4 v5

v2 v3

v1

e1 e2

e3

e4 e5e6

e7

A =

0 1 1 0 01 0 1 1 11 1 0 0 10 1 0 0 10 1 1 1 0

H =

1 1 0 0 0 0 01 0 1 1 1 0 00 1 1 0 0 1 00 0 0 1 0 0 10 0 0 0 1 1 1

Adjazenzfelder

7 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

1

2

3

4 5

V

E

Adjazenzfelder

7 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

1

2

3

4 5

V 1 2 4 7 7 9

E 2 3 5 2 4 5 3 4

Graphen als MatrizenSymmetrie

8 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Ungerichteter Graph→ symmetrische Adjazenzmatrix A = AT

1 2

3

4

0 1 0 11 0 1 00 1 0 01 0 0 0

Graphen als MatrizenDAG

9 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

DAGs lassen sich als obere Dreiecksmatrix repräsentieren

3 5

4

1 2

0 0 0 0 00 0 0 0 01 1 0 0 00 0 1 0 11 1 0 0 0

Graphen als MatrizenDAG

9 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

DAGs lassen sich als obere Dreiecksmatrix repräsentieren

2 3

1

4 5

0 1 1 0 00 0 0 1 10 0 0 1 10 0 0 0 00 0 0 0 0

Graphen als MatrizenZusammenhangskomponenten

10 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Pro Zusammenhangskomponente ein Block in der Matrix

3 2

54

6

1 0 0 0 0 0 10 0 0 0 1 00 1 0 0 0 00 0 1 0 0 00 0 0 1 0 01 0 0 0 0 0

Graphen als MatrizenZusammenhangskomponenten

10 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Pro Zusammenhangskomponente ein Block in der Matrix

1 2

34

5

6 0 1 0 0 0 00 0 1 0 0 00 0 0 1 0 01 0 0 0 0 00 0 0 0 0 10 0 0 0 1 0

Unter- oder Teilgraphen

11 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Definition: Ein Graph G′ = (V ′,E ′) ist ein Untergraph oder Teilgraphvon G = (V ,E), geschrieben G′ ⊆ G, wenn V ′ ⊆ V , E ′ ⊆ E und für alle{v1, v2} ∈ E ′ sowohl v1 ∈ V ′ als auch v2 ∈ V ′.

Definition: Ist G = (V ,E) ein Graph und V ′ ⊆ V eine Knotenmenge,dann heißt der Graph G[V ′] := (V ′,E ′) mitE ′ = {{v1, v2} ∈ E | v1, v2 ∈ V ′} der durch V ′ knoten-induzierteTeilgraph von G.

Definition: Ist G = (V ,E) ein Graph und E ′ ⊆ E eine Kantenmenge,dann heißt der Graph G[E ′] := (V ′,E ′) mit V ′ =

⋃{v1,v2}∈E ′

{v1, v2} derdurch E ′ kanten-induzierte Teilgraph von G.

Wege, Kreise und Zusammenhang

12 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Ist G = (V ,E) ein ungerichteter Graph, dannheißt eine Folge (v0,e1, v1,e2, . . . , vn−1,en, vn) mit vi ∈ V und ei ∈ Eeine Kantenfolge, ein Kantenweg oder nur Weg (path), wenn

ei = {vi−1, vi} für i = 1, . . . ,n .

Alternativ, kann man in Graphen ohne Mehrfachkanten eineKantenfolge auch durch die Knotenspur (v0, . . . , vn) beschreiben.heißt eine Kantenfolge ein Kantenpfad oder nur Pfad (simple path),wenn alle besuchten Knoten verschieden sind.heißen zwei Knoten x , y ∈ V verbindbar (connected), wenn eseinen Weg mit x = v0 und y = vn gibt.heißt der Graph G zusammenhängend (connected), wenn jedesPaar (x , y) ∈ V × V verbindbar ist.

Wege, Kreise und Zusammenhang

13 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Ist G = (V ,E) ein ungerichteter Graph, dannheißt ein Kantenfolge (v0,e1, v1,e2, . . . , vn−1,en, vn) ein Kantenkreisoder Kantenzyklus (cycle), wenn v0 = vn,ein Kantenkreis einfach (simple), wenn alle besuchten Knotenaußer v0 und vn verschieden sind, undder Graph G kreisfrei, kreislos oder zykelfrei (cycle free), wenn Gkeinen Kantenkreis enthält.

Eulersche und Hamiltonsche Kreise

14 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Ein Kantenkreis heißt Eulersch,wenn er alle Kanten desGraphen genau einmal enthält.

Ein Kantenkreis heißtHamiltonsch, wenn eralle Knoten des Graphengenau einmal enthält (Beginnund Ende einmal gezählt).

Ein Graph heißt Eulersch/Hamiltonsch, wenn er einenEulerschen/Hamiltonschen Kreis enthält.

Eulersche und Hamiltonsche Kreise

14 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Ein Kantenkreis heißt Eulersch,wenn er alle Kanten desGraphen genau einmal enthält.

Ein Kantenkreis heißtHamiltonsch, wenn eralle Knoten des Graphengenau einmal enthält (Beginnund Ende einmal gezählt).

Ein Graph heißt Eulersch/Hamiltonsch, wenn er einenEulerschen/Hamiltonschen Kreis enthält.

Satz von Euler (Graphen)

15 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Satz: Ein Graph G = (V ,E) mit E 6= ∅ ist genau dann Eulersch, wennG zusammenhängend ist und alle Knoten geraden Knotengrad haben.

Satz von Euler (Graphen)

15 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Satz: Ein Graph G = (V ,E) mit E 6= ∅ ist genau dann Eulersch, wennG zusammenhängend ist und alle Knoten geraden Knotengrad haben.

Beweis: „=⇒“Klar, denn G muss zusammenhängend sein und beim Passieren einesKnoten wird dieser durch eine Kante betreten und durch eine andereverlassen.Da jede Kante genau einmal verwendet wird, muss der Knotengrad allerKnoten gerade sein.

Satz von Euler (Graphen)

15 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Satz: Ein Graph G = (V ,E) mit E 6= ∅ ist genau dann Eulersch, wennG zusammenhängend ist und alle Knoten geraden Knotengrad haben.

Beweis: „⇐=“Angenommen der Graph hat diese Eigenschaften, so betrachtet maneine Kantenpfad P = (v0,e1, v1,e2, . . . , vr−1,er , vr ) maximaler Länge, indem also keine Kante zweimal vorkommt.

Behauptung 1: v0 = vr .

Satz von Euler (Graphen)

15 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Satz: Ein Graph G = (V ,E) mit E 6= ∅ ist genau dann Eulersch, wennG zusammenhängend ist und alle Knoten geraden Knotengrad haben.

Beweis: „⇐=“Angenommen der Graph hat diese Eigenschaften, so betrachtet maneine Kantenpfad P = (v0,e1, v1,e2, . . . , vr−1,er , vr ) maximaler Länge, indem also keine Kante zweimal vorkommt.

Behauptung 1: v0 = vr .

Wäre v0 6= vr , dann ist v0 zu einer ungeraden Anzahl Kanten in Pinzident.Da v0 aber geraden Knotengrad hat, gibt es eine inzidente Kantee /∈ P.Der Pfad P kann mit e verlängert werden, ist also nicht maximal!Widerspruch =⇒ v0 = vr , also ist P ein Kreis.

Satz von Euler (Graphen)

15 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Satz: Ein Graph G = (V ,E) mit E 6= ∅ ist genau dann Eulersch, wennG zusammenhängend ist und alle Knoten geraden Knotengrad haben.

Beweis: „⇐=“Angenommen der Graph hat diese Eigenschaften, so betrachtet maneine Kantenkreis C = (v0,e1, v1,e2, . . . , vr−1,er , v0) maximaler Länge,in dem also keine Kante zweimal vorkommt.

Behauptung 2: E(C) := {ei | i = 1, . . . , r} = E .

Satz von Euler (Graphen)

15 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Satz: Ein Graph G = (V ,E) mit E 6= ∅ ist genau dann Eulersch, wennG zusammenhängend ist und alle Knoten geraden Knotengrad haben.

Beweis: „⇐=“Angenommen der Graph hat diese Eigenschaften, so betrachtet maneine Kantenkreis C = (v0,e1, v1,e2, . . . , vr−1,er , v0) maximaler Länge,in dem also keine Kante zweimal vorkommt.

Behauptung 2: E(C) := {ei | i = 1, . . . , r} = E .

Angenommen E(C) 6= E , so betrachten wir G′ := (V ,E \ E(C)).Da G zusammenhängt, muss G′ und C einen gemeinsamen Knotenw mit degG′(w) > 0 haben.

Satz von Euler (Graphen)

15 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Satz: Ein Graph G = (V ,E) mit E 6= ∅ ist genau dann Eulersch, wennG zusammenhängend ist und alle Knoten geraden Knotengrad haben.

Beweis: „⇐=“Angenommen der Graph hat diese Eigenschaften, so betrachtet maneine Kantenkreis C = (v0,e1, v1,e2, . . . , vr−1,er , v0) maximaler Länge,in dem also keine Kante zweimal vorkommt.

Behauptung 2: E(C) := {ei | i = 1, . . . , r} = E .

Angenommen E(C) 6= E , so betrachten wir G′ := (V ,E \ E(C)).Da G zusammenhängt, muss G′ und C einen gemeinsamen Knotenw mit degG′(w) > 0 haben.Alle Knoten in G′ haben geraden Knotengrad, also kann man in G′einen Kreis C′ finden, der durch w geht.

Satz von Euler (Graphen)

15 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Satz: Ein Graph G = (V ,E) mit E 6= ∅ ist genau dann Eulersch, wennG zusammenhängend ist und alle Knoten geraden Knotengrad haben.

Beweis: „⇐=“Angenommen der Graph hat diese Eigenschaften, so betrachtet maneine Kantenkreis C = (v0,e1, v1,e2, . . . , vr−1,er , v0) maximaler Länge,in dem also keine Kante zweimal vorkommt.

Behauptung 2: E(C) := {ei | i = 1, . . . , r} = E .

Angenommen E(C) 6= E , so betrachten wir G′ := (V ,E \ E(C)).Da G zusammenhängt, muss G′ und C einen gemeinsamen Knotenw mit degG′(w) > 0 haben.Alle Knoten in G′ haben geraden Knotengrad, also kann man in G′einen Kreis C′ finden, der durch w geht.C kann an Knoten w mit C′ verlängert werden. Widerspruch zurMaximalität =⇒ E(C) = E .

Algorithmus: Eulersche Kreise

16 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Idee: Erweitere einen Kantenpfad solange, bis er Eulersch wird.Überprüfe, ob jeder Knoten geraden Grad hat.Wähle v0 ∈ V beliebig, setze P := (v0).Sei P = (v0,e1, v1, . . . ,ei , vi) der bisher konstruierte Pfad undG′ = (V ,E \ E(P)) der Restgraph.

Ist E = E(P) so ist P ein gesuchter Eulerscher Kreis. Fertig.Sonst wähle eine zum Knoten vi inzident Kante ei+1 ∈ E \ E(P),wobei Kanten bevorzugt werden, die keine Brücken sind.Eine Kante ist keine Brücke, wenn G′ und(V ,E \ {e1, . . . ,ei ,ei+1}) gleich viele Komponenten haben.Verlängere P mit der Kante ei+1 und wiederhole diesen Schnitt.

17 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Bäume

Warum Bäume?

18 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

C C C C C C C C

H H H H H H H H

H

HHHHHHHH

H

Oktan

C

C

C C

C

C

C

C

HH H

H H H

H

HH

H H HHHH

H

H

H

ein Isooktan

C

C

C

C

CC C C

H

H H

H

H H H

H

H

H

H

H

HH H

H H H

ein anderes Isooktan

Charakterisierung von Bäumen

19 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Definition: Ein ungerichteter Graph heißt Baum, wenn es von jedemKnoten zu jedem anderen Knoten genau einen Kantenpfad gibt.

Satz: Für einen ungerichteten Graphen G = (V ,E) sind äquivalent:1 G ist ein Baum.2 G ist zusammenhängend und |E | = |V | − 1.3 G ist zusammenhängend und kreislos.4 G ist kreislos und |E | = |V | − 1.5 G ist maximal kreislos: G ist kreislos und jede zusätzliche Kante

zwischen nicht-adjazenten Knoten ergibt einen Kreis.6 G ist minimal zusammenhängend: G ist zusammenhängend und

bei Entfernen einer beliebige Kante zerfällt G.

Sätze zu Bäumen

20 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Lemma: Jeder Baum mit mindestens zwei Konten hat mindestens zweiRandknoten, die man auf Blätter nennt.

Lemma: Löscht man von einem Baum mit n ≥ 2 Knoten ein Blatt, soentsteht ein Baum mit n − 1 Knoten.

Aufspannende Bäumen

21 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Definition: Ist G ein Graph und T ⊆ G ein Untergraph, der alle Knotenvon G enthält und selbst ein Baum ist, dann heißt T ein den Graph Gaufspannender Baum.

Satz: Sei G ein zusammenhängender Graph. Sind T1 und T2 zwei Gaufspannende Bäume und ist e ∈ T1 \ T2, dann gibt es eine Kantef ∈ T2 \ T1, so dass sowohl T1 − e + f als auch T2 − f + e zwei Gaufspannende Bäume sind.

Satz von Cayley

22 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Ist G = (V ,E) ein zusammenhängender ungerichteter Graph, dannheißt ein Untergraph (V ,E ′) mit E ′ ⊆ E ein G aufspannender Baum,wenn dieser ein Baum ist.

Satz von CayleyIm vollständigen Graph Kn gibt es genau nn−2 verschiedene Knaufspannende Bäume.

Beispiel: K4 hat folgende 16 aufspannende Bäume:

23 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

GraphpartitionierungEin kleiner Einblick

GraphpartitionierungWas ist Graphpartitionierung?

24 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Geben G und k > 1, teile V in k Blöcke V1,V2, ...Vk so dass:1 alle Mengen disjunkt, und die Vereinigung gerade V ist2 alle Mengen ungefähr gleich groß3 Anzahl der Kanten wird minimiert

Anwendungen

25 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Rn×n 3 Ax = b ∈ Rn

Notation

26 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

ungerichter Graph G = (V ,E , c, ω), n = |V |,m = |E |Knotengewichte c : V → R>0, Kantengewichte ω : E → R≥0

Erweiterung auf Mengen1 c(V ′) :=

∑v∈V ′ c(v)

2 ω(E ′) :=∑

e∈E′ ω(e)

Schnittkanten Eij := {{u, v} ∈ E : u ∈ Vi , v ∈ Vj}

Notation

26 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

ungerichter Graph G = (V ,E , c, ω), n = |V |,m = |E |Knotengewichte c : V → R>0, Kantengewichte ω : E → R≥0

Erweiterung auf Mengen1 c(V ′) :=

∑v∈V ′ c(v)

2 ω(E ′) :=∑

e∈E′ ω(e)

Schnittkanten Eij := {{u, v} ∈ E : u ∈ Vi , v ∈ Vj}

Notation

26 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

ungerichter Graph G = (V ,E , c, ω), n = |V |,m = |E |Knotengewichte c : V → R>0, Kantengewichte ω : E → R≥0

Erweiterung auf Mengen1 c(V ′) :=

∑v∈V ′ c(v), c(Grün) = 11

2 ω(E ′) :=∑

e∈E′ ω(e)

Schnittkanten Eij := {{u, v} ∈ E : u ∈ Vi , v ∈ Vj}

Notation

26 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

ungerichter Graph G = (V ,E , c, ω), n = |V |,m = |E |Knotengewichte c : V → R>0, Kantengewichte ω : E → R≥0

Erweiterung auf Mengen1 c(V ′) :=

∑v∈V ′ c(v)

2 ω(E ′) :=∑

e∈E′ ω(e)

Schnittkanten Eij := {{u, v} ∈ E : u ∈ Vi , v ∈ Vj}

Notation

26 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

ungerichter Graph G = (V ,E , c, ω), n = |V |,m = |E |Knotengewichte c : V → R>0, Kantengewichte ω : E → R≥0

Erweiterung auf Mengen1 c(V ′) :=

∑v∈V ′ c(v)

2 ω(E ′) :=∑

e∈E′ ω(e), ω(Eij) = 5

Schnittkanten Eij := {{u, v} ∈ E : u ∈ Vi , v ∈ Vj}

GraphpartitionierungFormaler

27 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Geg.: Graph G = (V ,E , c, ω)c : V → R>0ω : E → R≥0k ∈ N, ε ∈ R>0.

Ges.: Blöcke V1, ...,Vk ⊆ V , V =⋃

i Vi und Vi ∩ Vj = ∅ (i 6= j)Balancebedingung: c(Vi) ≤ (1 + ε) c(V )

k + maxv c(v) ∀iKantenschnitt =

∑i<j ω(Eij) minimal

Notation

28 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

ungerichter Graph G = (V ,E , c, ω), n = |V |,m = |E |Knotengewichte c : V → R>0, Kantengewichte ω : E → R≥0

c :≡ 1, ω :≡ 1, Kantenschnitt = 17Balancebedingung?

Notation

28 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

ungerichter Graph G = (V ,E , c, ω), n = |V |,m = |E |Knotengewichte c : V → R>0, Kantengewichte ω : E → R≥0

c :≡ 1, ω :≡ 1, Kantenschnitt = 17Balancebedingung? ε = 0.25: 7, 8, 10, 8 ≤ (1+ε)

k c(V ) = 10.31

BeispielFinite Element Methode

29 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Multilevelframework

30 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

input graph

match

... ...local improvement

uncontractcontract

outputpartition

part.

initial

Multilevelframework

30 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

match

... ...local improvement

uncontractcontract

outputpartition

input graph

partitioning

initial

Breitensuchen!

AbstraktionBreitensuchen

31 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Initial Partitioning

32 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Rekursive Bipartitionierung, z.B. mit BFSfinde Knoten die weit entfernt sind

1 wähle zufälligen Startknoten, iteriere Breitensuchen2 bis Konvergenz

wechselseitige Breitensuchen mit Zuweisung zu Blöcken

BubblingBesser

33 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

1: procedure bubbling(Graph G, k ∈ N)2: centers[1..k] : Array of Vertices3: centers = initializeCenters(G, k)4: do5: growRegions(G, centers)6: findNewCenters(G)7: while( !stop-condition )8: return

BubblingBeispiel / Init Centers

34 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

BubblingBeispiel / Grow Regions

35 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

BubblingBeispiel / Grow Regions

35 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

BubblingBeispiel / Grow Regions

35 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

BubblingBeispiel / Grow Regions

35 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

BubblingBeispiel / Grow Regions

35 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

BubblingBeispiel / Grow Regions

35 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

BubblingBeispiel / Grow Regions

35 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

BubblingBeispiel / Grow Regions

35 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

BubblingBeispiel / Grow Regions

35 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Multilevelframework

36 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

input graph

...

initial

...

outputpartition

local improvement

partitioning

match

contract uncontract

später

Lokale OptimierungFiducia and Mattheyses - Anwendung von Heaps

37 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Berechne Verbessung füralle v ∈ V

Verbesserungg(v) = dext(v)− dint(v)speichere Verbesserungenin zwei Heaps

Lokale OptimierungFiducia and Mattheyses - Anwendung von Heaps

37 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Berechne Verbessung füralle v ∈ VVerbesserungg(v) = dext(v)− dint(v)

speichere Verbesserungenin zwei Heaps

Lokale OptimierungFiducia and Mattheyses - Anwendung von Heaps

37 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

Berechne Verbessung füralle v ∈ VVerbesserungg(v) = dext(v)− dint(v)speichere Verbesserungenin zwei Heaps

Lokale OptimierungFiducia and Mattheyses - Anwendung von Heaps

37 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

bewege immer die Knotendie größte Verbesserungliefernjeder Knoten darf nur einmal bewegt werdenVerbessungswerte derNachbarn müssenaktualisiert werden

Schritt: 0Kantenschnitt: 5

Lokale OptimierungFiducia and Mattheyses - Anwendung von Heaps

37 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

bewege immer die Knotendie größte Verbesserungliefernjeder Knoten darf nur einmal bewegt werdenVerbessungswerte derNachbarn müssenaktualisiert werden

Schritt: 0 1Kantenschnitt: 5 4

Lokale OptimierungFiducia and Mattheyses - Anwendung von Heaps

37 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

bewege immer die Knotendie größte Verbesserungliefernjeder Knoten darf nur einmal bewegt werdenVerbessungswerte derNachbarn müssenaktualisiert werden

Schritt: 0 1 2Kantenschnitt: 5 4 6

Lokale OptimierungFiducia and Mattheyses - Anwendung von Heaps

37 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

bewege immer die Knotendie größte Verbesserungliefernjeder Knoten darf nur einmal bewegt werdenVerbessungswerte derNachbarn müssenaktualisiert werden

Schritt: 0 1 2 3Kantenschnitt: 5 4 6 8

Lokale OptimierungFiducia and Mattheyses - Anwendung von Heaps

37 Julian Arz, Timo Bingmann, Sebastian Schlag10. Übung – Algorithmen I

Fakultät für InformatikInstitut für Theoretische Informatik

stop nachdem bestimmteAnzahl Knoten besuchtwurdenimm besten Kantenschnitt,der Balancebedingung

Schritt: 0 1 2 3Kantenschnitt: 5 4 6 8