29
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2 SS 2001

Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Embed Size (px)

Citation preview

Page 1: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Institut für Kartographie und GeoinformationProf. Dr. Lutz Plümer

Datenstrukturen für den Algorithmus von

Dijkstra

Diskrete Mathematik IIVorlesung 2

SS 2001

Page 2: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

2 2

Übersicht

• letzte Stunde– Algorithmus von Dijkstra– alle kürzesten Wege von einem Knoten (1:n)

• heute:– Datenstrukuren für den Algorithmus von Dijkstra

• Datenstruktur für Graphen mit Kosten– Adjazenzliste

– Adjazenzmatrix

• Datenstruktur für grüne Knoten

Page 3: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

3 3

algorithm Dijkstra (S){berechne alle kürzesten Wege von S aus}

BLAU = ; GRÜN = {S}; dist(S) = 0;while( GRÜN ) {

wähle K GRÜN, so daß K‘ GRÜN:dist(K) dist(K‘);

färbe K blau;

for( Ki succ(K) ) { if (Ki (GRÜN BLAU) //noch nicht besuchter Knoten

färbe die Kante (K,Ki) rot;

färbe Ki grün;

dist(Ki) = dist(K) + dist(K,Ki); }

... aus der letzten Vorlesung

Page 4: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

4 4

Vorgehen

• Repräsentation des Graphen– „ for( Ki succ(K) „– Variante a: Adjazenzmatrix– Variante b: Adjazenzliste

• grüne Knotenmenge

Page 5: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

5 5

Adjazenzmatrix

Definition: Knoten, die durch eine Kante verbunden sind, heißen benachbart oder adjazent.

Definition: Die n n Matrix A = (aij) mit

heißt Adjazenzmatrix des Graphen.

sonst

adjazent und falls

false

trueaij

ji KK

Page 6: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

6 6

Adjazenzmatrix mit Kosten

sonst K nach K von Kante

der Kosten die k falls

ji

kaij

k

beachte: alle Diagonalelemente sind 0

Page 7: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

7 7

0

150

80150030

150

200

20800

Adjazenzmatrix

Do

Ha

W

Du

K

D

20

15

80

80

20 30

15

KDWHaDuDo

K

D

W

Ha

Du

Do

150

Page 8: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

8 8

Adjazenzmatrix

• Vorteil: Möglichkeit, in einer Laufzeit von O(1) festzustellen, ob eine Kante von Ki nach Kj existiert.

• Nachteil: hoher Platzbedarf: O(n2)

Page 9: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

9 9

Adjazenzliste

• Für jeden Knoten wird eine Liste seiner (Nachfolger-) Nachbarknoten verwaltet.

• Über ein Array der Länge n (n = Anzahl der Knoten) ist jede Liste direkt zugänglich

Page 10: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

10 10

Adjazenzliste

Do

Ha

W

D

K

Du

0

150

80150030

150

200

20800

KDWHaDuDo

K

D

W

Ha

Du

DoArray

Page 11: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

11 11

Adjazenzliste

Du 80

W 15

Du 30

Ha 20

D 150

K 15

Do

Ha

W

D

K

Du

0

150

80150030

150

200

20800

KDWHaDuDo

K

D

W

Ha

Du

Do

D 20

K 80

Page 12: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

12 12

Adjazenzliste

• Vorteil: geringer Platzbedarf: O(n+e) (e = Anzahl der Kanten)

• Nachteil: Um zu prüfen, ob ki und kj benachbart sind, muß die Adjazenzliste von ki durchlaufen und nach kj durchsucht werden.

• aber: für Dijkstra ideal

Page 13: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

13 13

Repräsentation der „grünen Knoten“

• die „aktiven“ Knoten• Operationen

– Algorithmus:• füge die Nachfolger des betrachteten Knoten ein• selektiere und entferne das kleinste Element

• Ziel:• Einfügen eines Knotens in O(log n)• Finden und Entfernen des kleinsten Knotens in O(log n)

– Variante A: AVL-Baum– spezialisierter auf diese Anwendung: Heap

Page 14: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Do

Ha

W

Du

K

D

20

80

80

20 30

15

15

W

die „grünen Knoten“

abgearbeitet

noch in Arbeit

noch nicht betrachtet

Page 15: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

15 15

Eine neue Datenstruktur: der Heap

• Idee: ein zu jeder Zeit möglichst vollständiger Baum– alle Ebenen bis auf die letzte sind voll besetzt

• Darstellung eines vollständigen Baums in einem Array

• Problem: Bestimmung der Kanten auf Indizes– Index des Vaters– Indizes der beiden Söhne

• Beispiel: Eingabe der sortierten Folge von Zahlen{1 .. 15}

• achten Sie auf die Indizierung

Page 16: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

16 16

Einbettung in einen Array:• index(k) = n

– index (k.linkerSohn) = 2 n– index (k.rechterSohn) = 2 n + 1– index (k.vater) =

Eine neue Datenstruktur: Der Heap

2 3

1

14

7

1512

6

1310

5

118

4

9

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

• ein partiell geordneter Baum

• für jeden Teilbaum T‘ mit Wurzel x gilt:

info(y) info(x)für jeden Knoten y von T‘{in der Wurzel steht das Minimum des Teilbaums}

2n

Page 17: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

17 17

Entfernen des kleinsten Elements

algorithm deletemin (H)

/*lösche das minimale Element des Heaps und gib es aus*/

gib den Eintrag der Wurzel aus;lösche die Wurzel und ersetze sie durch die letzte Position im Baumsei p die Wurzel mit den Söhnen q und r;

while q oder r existieren und ((info (p) > info (q)) oder (info (p) > info (r)))vertausche p mit dem kleineren der beiden Söhnebenenne p, q, r um

2 3

1

14

7

1512

6

1310

5

118

4

9

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Page 18: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

18 18

Entfernen des kleinsten Elements

algorithm deletemin (H)

/*lösche das minimale Element des Heaps und gib es aus*/

gib den Eintrag der Wurzel aus;lösche die Wurzel und ersetze sie durch die letzte Position im Baumsei p die Wurzel mit den Söhnen q und r;

while q oder r existieren und ((info (p) > info (q)) oder (info (p) > info (r)))vertausche p mit dem kleineren der beiden Söhnebenenne p, q, r um

2 3

1

14

7

1512

6

1310

5

118

4

9

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Page 19: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

19 19

Entfernen des kleinsten Elements

algorithm deletemin (H)

/*lösche das minimale Element des Heaps und gib es aus*/

gib den Eintrag der Wurzel aus;lösche die Wurzel und ersetze sie durch die letzte Position im Baumsei p die Wurzel mit den Söhnen q und r;

while q oder r existieren und ((info (p) > info (q)) oder (info (p) > info (r)))vertausche p mit dem kleineren der beiden Söhnebenenne p, q, r um

2 3

14

7

1512

6

1310

5

118

4

9

2 3 4 5 6 7 8 9 10 11 12 13 14 15

Page 20: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

20 20

Entfernen des kleinsten Elements

algorithm deletemin (H)

/*lösche das minimale Element des Heaps und gib es aus*/

gib den Eintrag der Wurzel aus;lösche die Wurzel und ersetze sie durch die letzte Position im Baumsei p die Wurzel mit den Söhnen q und r;

while q oder r existieren und ((info (p) > info (q)) oder (info (p) > info (r)))vertausche p mit dem kleineren der beiden Söhnebenenne p, q, r um

2 3

14

7

15

12

6

1310

5

118

4

9

2 3 4 5 6 7 8 9 10 11 12 13 1415

Page 21: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

21 21

Entfernen des kleinsten Elements

algorithm deletemin (H)

/*lösche das minimale Element des Heaps und gib es aus*/

gib den Eintrag der Wurzel aus;lösche die Wurzel und ersetze sie durch die letzte Position im Baumsei p die Wurzel mit den Söhnen q und r;

while q oder r existieren und ((info (p) > info (q)) oder (info (p) > info (r)))vertausche p mit dem kleineren der beiden Söhnebenenne p, q, r um

15 3

14

7

2

12

6

1310

5

118

4

9

2 3 4 5 6 7 8 9 10 11 12 13 1415

Page 22: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

22 22

Entfernen des kleinsten Elements

algorithm deletemin (H)

/*lösche das minimale Element des Heaps und gib es aus*/

gib den Eintrag der Wurzel aus;lösche die Wurzel und ersetze sie durch die letzte Position im Baumsei p die Wurzel mit den Söhnen q und r;

while q oder r existieren und ((info (p) > info (q)) oder (info (p) > info (r)))vertausche p mit dem kleineren der beiden Söhnebenenne p, q, r um

4 3

14

7

2

12

6

1310

5

118

15

9

2 34 5 6 7 8 9 10 11 12 13 1415

Page 23: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

23 23

Entfernen des kleinsten Elements

algorithm deletemin (H)

/*lösche das minimale Element des Heaps und gib es aus*/

gib den Eintrag der Wurzel aus;lösche die Wurzel und ersetze sie durch die letzte Position im Baumsei p die Wurzel mit den Söhnen q und r;

while q oder r existieren und ((info (p) > info (q)) oder (info (p) > info (r)))vertausche p mit dem kleineren der beiden Söhnebenenne p, q, r um

4 3

14

7

2

12

6

1310

5

1115

8

9

2 34 5 6 78 9 10 11 12 13 1415

Page 24: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

24 24

Einfügen eines neuen Elements

algorithm insert (H,e)

/*füge Element e in H ein*/

füge einen neuen Knoten q mit Eintrag e an der ersten freien Position der untersten Ebene des Baumes ein, eröffne ggf. neue Ebene;p sei der Vater von q;

while p existiert und (info (q) < info (p)) do vertausche p und q benenne p und q um

2 3

1

7

12

6

10

5

118

4

9

1 2 3 4 5 6 7 8 9 10 11 12

Beispiel: füge „0“ ein

Page 25: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

25 25

Einfügen eines neuen Elements

algorithm insert (H,e)

/*füge Element e in H ein*/

füge einen neuen Knoten q mit Eintrag e an der ersten freien Position der untersten Ebene des Baumes ein, eröffne ggf. neue Ebene;p sei der Vater von q;

while p existiert und (info (q) < info (p)) do vertausche p und q benenne p und q um

2 3

1

7

12

6

10

5

118

4

9

1 2 3 4 5 6 7 8 9 10 11 12

Beispiel: füge „0“ ein

0

0

Page 26: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

26 26

Einfügen eines neuen Elements

algorithm insert (H,e)

/*füge Element e in H ein*/

füge einen neuen Knoten q mit Eintrag e an der ersten freien Position der untersten Ebene des Baumes ein, eröffne ggf. neue Ebene;p sei der Vater von q;

while p existiert und (info (q) < info (p)) do vertausche p und q benenne p und q um

2 3

1

7

12

0

10

5

118

4

9

1 2 3 4 5 67 8 9 10 11 12

Beispiel: füge „0“ ein

0

6

1313 / 2 = 6

Page 27: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

27 27

Einfügen eines neuen Elements

algorithm insert (H,e)

/*füge Element e in H ein*/

füge einen neuen Knoten q mit Eintrag e an der ersten freien Position der untersten Ebene des Baumes ein, eröffne ggf. neue Ebene;p sei der Vater von q;

while p existiert und (info (q) < info (p)) do vertausche p und q benenne p und q um

2 0

1

7

12

3

10

5

118

4

9

1 2 34 5 67 8 9 10 11 12

Beispiel: füge „0“ ein

0

6

Page 28: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

28 28

Einfügen eines neuen Elements

algorithm insert (H,e)

/*füge Element e in H ein*/

füge einen neuen Knoten q mit Eintrag e an der ersten freien Position der untersten Ebene des Baumes ein, eröffne ggf. neue Ebene;p sei der Vater von q;

while p existiert und (info (q) < info (p)) do vertausche p und q benenne p und q um

2 1

0

7

12

3

10

5

118

4

9

12 34 5 67 8 9 10 11 12

Beispiel: füge „0“ ein

0

6

Page 29: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2

Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

29 29

Für „Kenner“

• Bestimmen des Vaterknotens: ganzzahlige Division durch 2

• Bestimmen des Sohns: Multiplikation mit 2– ggf. Addition von 1

• auf Maschinenebene einfache Bit-Schiftoperationen

Für „Hacker“ ?