• Keine Ergebnisse gefunden

Datenstrukturen und Algorithmen

N/A
N/A
Protected

Academic year: 2022

Aktie "Datenstrukturen und Algorithmen"

Copied!
61
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Datenstrukturen und Algorithmen

Christian Sohler

FG Algorithmen & Komplexität

(2)

Graphalgorithmen

Bisherige Ergebnisse:

• Dijkstras Algorithmus für positive Kantengewichte;

Laufzeit O((|V|+|E|) log |V|)

• Bellman-Ford für allgemeine Kantengewichte; Laufzeit O(|V|²+|V|⋅|E|)

• Negative Zyklen können erkannt werden

Heute:

• All Pairs Shortest Paths (mit negativen Kantengewichten)

(3)

Graphalgorithmen

All Pairs Shortest Path (APSP):

• Eingabe: Gewichteter Graph G=(V,E)

• Ausgabe: Für jedes Paar von Knoten u,v∈V die Distanz von u nach v sowie einen kürzesten Weg

2

1 5 -1

8 4

-4

5 6

7 a

a b c d e f

a 0 1 5 5 10 9 b 0 4 5 10 9

c -3 0 1 6 5

d -4 0 0 5 4

e 5 8 9 0 -1

b c

f

d e

(4)

4

Graphalgorithmen

All Pairs Shortest Path (APSP):

• Eingabe: Gewichteter Graph G=(V,E)

• Ausgabe: Für jedes Paar von Knoten u,v∈V die Distanz von u nach v sowie einen kürzesten Weg

2

1 5 -1

8 4

-4

5 6

7 a

a b c d e f

a 0 1 5 5 10 9 b 0 4 5 10 9

c -3 0 1 6 5

d -4 0 0 5 4

e 5 8 9 0 -1

f ∞ ∞ ∞ ∞ ∞ 0

b c

f

d e

(5)

Graphalgorithmen

Eingabe APSP:

• Matrix W=(w ), die Graph repräsentiertij

w =

0 , wenn i=j

Gewicht der ger. Kante (i,j), wenn i≠j und (i,j)∈E

∞ , wenn i≠j und (i,j)∉E

ij

2

1 5 -1

8 4

-4 6

7 a

b c

f

a b c d e f

a 0 2 5 b 0 4 c 0 1 7 d -4 6 0 5 e 8 0 -1

(6)

6

Graphalgorithmen

Eingabe APSP:

• Matrix W=(w ), die Graph repräsentiertij

w =

0 , wenn i=j

Gewicht der ger. Kante (i,j), wenn i≠j und (i,j)∈E

∞ , wenn i≠j und (i,j)∉E

ij

2

1 5 -1

8 4

-4

5 6

7 a

b c

d e

f

a b c d e f

a 0 2 5 b 0 4 c 0 1 7 d -4 6 0 5 e 8 0 -1 f ∞ ∞ ∞ ∞ ∞ 0

(7)

Graphalgorithmen

Eingabe APSP:

• Matrix W=(w ), die Graph repräsentiertij

w =

0 , wenn i=j

Gewicht der ger. Kante (i,j), wenn i≠j und (i,j)∈E

∞ , wenn i≠j und (i,j)∉E

ij

2

1 5 -1

8 4

-4 6

7 a

b c

f

a b c d e f

a 0 2 5 b 0 4 c 0 1 7 d -4 6 0 5 e 8 0 -1

Annahme:

Keine negativen Zyklen!

(8)

Graphalgorithmen

Eine neue Rekursion:

• Nummeriere Knoten von 1 bis n=|V|

• Betrachte kürzeste i-j-Wege, die nur über Knoten 1 bis k laufen

1 2 3 4 5 6

1 0 2 6 5 13 2 0 4 5 11 3 0 1 7 4 -4 0 0 5 7 5 8 14 0 -1 6 ∞ ∞ ∞ ∞ ∞ 0

2

1 5 -1

8 4

-4

5 6

7 1

2 3

4 5

6 k=3

(9)

Graphalgorithmen

Eine neue Rekursion:

• Nummeriere Knoten von 1 bis n=|V|

• Betrachte kürzeste i-j-Wege, die nur über Knoten 1 bis k laufen

1 2 3 4 5 6

1 0 2 6 5 13 2 0 4 5 11 3 0 1 7 4 -4 0 0 5 7 5 8 14 0 -1

2

1 5 -1

8 4

-4

5 6

7 1

2 3

4 5

6 k=3

(10)

Graphalgorithmen

Zur Erinnerung:

• Sei G ein Graph ohne negative Zyklen und sei j von i aus erreichbar. Dann gibt es einen kürzesten i-j-Weg, der

keinen Knoten doppelt benutzt. (Lemma 40)

• Wir können also annehmen, dass jeder Knoten in jedem Weg maximal einmal vorkommt

• Betrachte i-j-Weg, der nur über Knoten aus {1,…,k} läuft:

i

j k

(11)

Graphalgorithmen

Zur Erinnerung:

• Sei G ein Graph ohne negative Zyklen und sei j von i aus erreichbar. Dann gibt es einen kürzesten i-j-Weg, der

keinen Knoten doppelt benutzt. (Lemma 40)

• Wir können also annehmen, dass jeder Knoten in jedem Weg maximal einmal vorkommt

• Betrachte i-j-Weg, der nur über Knoten aus {1,…,k} läuft:

j k

Knoten k tritt maximal einmal auf

(12)

Graphalgorithmen

Zur Erinnerung:

• Sei G ein Graph ohne negative Zyklen und sei j von i aus erreichbar. Dann gibt es einen kürzesten i-j-Weg, der

keinen Knoten doppelt benutzt. (Lemma 40)

• Wir können also annehmen, dass jeder Knoten in jedem Weg maximal einmal vorkommt

• Betrachte i-j-Weg, der nur über Knoten aus {1,…,k} läuft:

i

j k

Weg von u nach k führt nur über Knoten

aus {1,…,k-1}

(13)

Graphalgorithmen

Zur Erinnerung:

• Sei G ein Graph ohne negative Zyklen und sei j von i aus erreichbar. Dann gibt es einen kürzesten i-j-Weg, der

keinen Knoten doppelt benutzt. (Lemma 40)

• Wir können also annehmen, dass jeder Knoten in jedem Weg maximal einmal vorkommt

• Betrachte i-j-Weg, der nur über Knoten aus {1,…,k} läuft:

j k

Weg von k nach v führt nur über Knoten

aus {1,…,k-1}

(14)

Graphalgorithmen

Die Rekursion:

• Kürzester i-j-Weg über Knoten aus {1,…,k} ist

• (a) kürzester i-j-Weg über Knoten aus {1,…,k-1} oder

• (b) kürzester i-k-Weg über Knoten aus {1,…,k-1} gefolgt von kürzestem k-j-Weg über Knoten aus {1,…,k-1}

i

j

Fall (b): k

(15)

Graphalgorithmen

Die Rekursion:

• Sei d die Länge eines kürzesten i-j-Wegs mit über Knoten aus {1,…,k}

• Matrix D =(d ) enthält die gesuchte Lösung d = w , falls k=0

min ( d , d + d ), falls k≥1

ij (k)

(k)

(k-1) (k-1) (k-1)

ij ij

ij ik kj

(n)

ij (n)

(16)

Graphalgorithmen

Floyd-Warshall(W,n) 1. D ← W

2. for k←1 to n do 3. for i←1 to n do 4. for j←1 to n do

5. d ← min(d , d + d ) 6. return D

(0)

(k) (n)ij

(k-1) ij

(k-1) ik

(k-1) kj

(17)

Graphalgorithmen

1 2 3 4 5 6

1 2 3 4 5

1 2 3 4 5 6

1 0 2 5 2 0 4 3 0 1 7 4 -3 4 6 0 5 5 8 0 -1

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6 -3

(18)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 5 2

3 4 5 6

1 2 3 4 5 6

1 0 2 5 2 0 4 3 0 1 7 4 -3 4 6 0 5 5 8 0 -1 6 ∞ ∞ ∞ ∞ ∞ 0

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6

D(0) D(1)

-3

(19)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 5 2 0 4 3

4 5

1 2 3 4 5 6

1 0 2 5 2 0 4 3 0 1 7 4 -3 4 6 0 5 5 8 0 -1

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6 -3

(20)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 5 2 0 4 3 0 1 7 4

5 6

1 2 3 4 5 6

1 0 2 5 2 0 4 3 0 1 7 4 -3 4 6 0 5 5 8 0 -1 6 ∞ ∞ ∞ ∞ ∞ 0

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6

D(0) D(1)

-3

(21)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 5 2 0 4 3 0 1 7 4 3 -1 6 0 5 5

1 2 3 4 5 6

1 0 2 5 2 0 4 3 0 1 7 4 -3 4 6 0 5 5 8 0 -1

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6 -3

(22)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 5 2 0 4 3 0 1 7 4 3 -1 6 0 5 5 8 0 -1 6

1 2 3 4 5 6

1 0 2 5 2 0 4 3 0 1 7 4 -3 4 6 0 5 5 8 0 -1 6 ∞ ∞ ∞ ∞ ∞ 0

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6

D(0) D(1)

-3

(23)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 5 2 0 4 3 0 1 7 4 3 -1 6 0 5 5 8 0 -1

1 2 3 4 5 6

1 0 2 5 2 0 4 3 0 1 7 4 -3 4 6 0 5 5 8 0 -1

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6 -3

(24)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 6 5 2

3 4 5 6

1 2 3 4 5 6

1 0 2 5 2 0 4 3 0 1 7 4 -3 -1 6 0 5 5 8 0 -1 6 ∞ ∞ ∞ ∞ ∞ 0

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6

D(1) D(2)

-3

(25)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 6 5 2 0 4 3

4 5

1 2 3 4 5 6

1 0 2 5 2 0 4 3 0 1 7 4 -3 -1 6 0 5 5 8 0 -1

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6 -3

(26)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 6 5 2 0 4 3

4 5 6

1 2 3 4 5 6

1 0 2 5 2 0 4 3 0 1 7 4 -3 -1 6 0 5 5 8 0 -1 6 ∞ ∞ ∞ ∞ ∞ 0

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6

D(1) D(2)

-3

(27)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 6 5 2 0 4 3 0 1 7 4

5

1 2 3 4 5 6

1 0 2 5 2 0 4 3 0 1 7 4 -3 -1 6 0 5 5 8 0 -1

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6 -3

(28)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 6 5 2 0 4 3 0 1 7 4 -3 -1 3 0 5 5

6

1 2 3 4 5 6

1 0 2 5 2 0 4 3 0 1 7 4 -3 -1 6 0 5 5 8 0 -1 6 ∞ ∞ ∞ ∞ ∞ 0

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6

D(1) D(2)

-3

(29)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 6 5 2 0 4 3 0 1 7 4 -3 -1 3 0 5 5 8 0 -1

1 2 3 4 5 6

1 0 2 5 2 0 4 3 0 1 7 4 -3 -1 6 0 5 5 8 0 -1

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6 -3

(30)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 6 5 2 0 4 3 0 1 7 4 -3 -1 3 0 5 5 8 0 -1 6 ∞ ∞ ∞ ∞ ∞ 0

1 2 3 4 5 6

1 0 2 5 2 0 4 3 0 1 7 4 -3 -1 6 0 5 5 8 0 -1 6 ∞ ∞ ∞ ∞ ∞ 0

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6

D(1) D(2)

-3

(31)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 6 5 13 2

3 4 5

1 2 3 4 5 6

1 0 2 6 5 2 0 4 3 0 1 7 4 -3 -1 3 0 5 5 8 0 -1

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6 -3

(32)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 6 5 13 2 0 4 5 11 3

4 5 6

1 2 3 4 5 6

1 0 2 6 5 2 0 4 3 0 1 7 4 -3 -1 3 0 5 5 8 0 -1 6 ∞ ∞ ∞ ∞ ∞ 0

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6

D(2) D(3)

-3

(33)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 6 5 13 2 0 4 5 11 3 0 1 7 4

5

1 2 3 4 5 6

1 0 2 6 5 2 0 4 3 0 1 7 4 -3 -1 3 0 5 5 8 0 -1

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6 -3

(34)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 6 5 13 2 0 4 5 11 3 0 1 7 4 -3 -1 3 0 5 10 5

6

1 2 3 4 5 6

1 0 2 6 5 2 0 4 3 0 1 7 4 -3 -1 3 0 5 5 8 0 -1 6 ∞ ∞ ∞ ∞ ∞ 0

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6

D(2) D(3)

-3

(35)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 6 5 13 2 0 4 5 11 3 0 1 7 4 -3 -1 3 0 5 10 5 8 9 0 -1

1 2 3 4 5 6

1 0 2 6 5 2 0 4 3 0 1 7 4 -3 -1 3 0 5 5 8 0 -1

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6 -3

(36)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 6 5 13 2 0 4 5 11 3 0 1 7 4 -3 -1 3 0 5 10 5 8 9 0 -1 6 ∞ ∞ ∞ ∞ ∞ 0

1 2 3 4 5 6

1 0 2 6 5 2 0 4 3 0 1 7 4 -3 -1 3 0 5 5 8 0 -1 6 ∞ ∞ ∞ ∞ ∞ 0

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6

D(2) D(3)

-3

(37)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 6 5 10 13 2

3 4 5

1 2 3 4 5 6

1 0 2 6 5 13 2 0 4 5 11 3 0 1 7 4 -3 -1 3 0 5 10 5 8 9 0 -1

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6 -3

(38)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 6 5 10 13 2 2 0 4 5 10 11 3

4 5 6

1 2 3 4 5 6

1 0 2 6 5 13 2 0 4 5 11 3 0 1 7 4 -3 -1 3 0 5 10 5 8 9 0 -1 6 ∞ ∞ ∞ ∞ ∞ 0

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6

D(3) D(4)

-3

(39)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 6 5 10 13 2 2 0 4 5 10 11 3 -2 0 0 1 6 7 4

5

1 2 3 4 5 6

1 0 2 6 5 13 2 0 4 5 11 3 0 1 7 4 -3 -1 3 0 5 10 5 8 9 0 -1

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6 -3

(40)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 6 5 10 13 2 2 0 4 5 10 11 3 -2 0 0 1 6 7 4 -3 -1 3 0 5 10 5

6

1 2 3 4 5 6

1 0 2 6 5 13 2 0 4 5 11 3 0 1 7 4 -3 -1 3 0 5 10 5 8 9 0 -1 6 ∞ ∞ ∞ ∞ ∞ 0

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6

D(3) D(4)

-3

(41)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 6 5 10 13 2 2 0 4 5 10 11 3 -2 0 0 1 6 7 4 -3 -1 3 0 5 10 5 6 8 8 9 0 -1

1 2 3 4 5 6

1 0 2 6 5 13 2 0 4 5 11 3 0 1 7 4 -3 -1 3 0 5 10 5 8 9 0 -1

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6 -3

(42)

Graphalgorithmen

1 2 3 4 5 6

1 0 2 6 5 10 13 2 2 0 4 5 10 11 3 -2 0 0 1 6 7 4 -3 -1 3 0 5 10 5 6 8 8 9 0 -1 6 ∞ ∞ ∞ ∞ ∞ 0

1 2 3 4 5 6

1 0 2 6 5 13 2 0 4 5 11 3 0 1 7 4 -3 -1 3 0 5 10 5 8 9 0 -1 6 ∞ ∞ ∞ ∞ ∞ 0

2

1 5 -1

8 4

4

5 6

7 1

2 3

4 5

6

D(3) D(4)

-3

Referenzen

ÄHNLICHE DOKUMENTE

[r]

Wenn es m¨oglich ist, von einem Zustand in einen anderen zu wechseln, zeichnen wir einen Pfeil

„ Siehe Bild: Für jeden Knoten sind alle Daten links kleiner und alle Daten rechts größer als die Daten des

Ein Matching M in G ist eine Teilmenge von E, so dass keine zwei Kanten aus M einen Endpunkt gemeinsam haben. Variante 1 Variante

Tipp: Identifizieren Sie zuerst einen (nicht notwendigerweise bipartiten) Teilgraphen mit genügend hohem Minimalgrad, indem Sie Knoten kleinen Grades löschen. Aufgabe 4:

  Dieser Knoten erzeugt in jedem Frame eine Transformation, die dafür sorgt, daß die lokale z-Achse zum aktuellen Viewpoint zeigt..   axisOfRotation wird im

Für die Beurteilung von abweichenden Situationen wird angenommen, dass sich die Störwirkung in Abhängigkeit der Anzahl Stop & Go Ereignisse verändert. Bei einer minimal