Upload
ute-welz
View
108
Download
1
Embed Size (px)
Citation preview
Institut für Kartographie und GeoinformationProf. Dr. Lutz Plümer
Datenstrukturen für den Algorithmus von
Dijkstra
Diskrete Mathematik IIVorlesung 2
SS 2001
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
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
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
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
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
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
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)
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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“ ?