Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Hertha Lorenz Geändert vor über 8 Jahren
1
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung 2 20.04.00 Datenstrukturen für den Algorithmus von Dijkstra
2
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.002 Ü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
3
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.003 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( K i succ(K) ) { if (K i (GRÜN BLAU) //noch nicht besuchter Knoten färbe die Kante (K,K i ) rot; färbe K i grün; dist(K i ) = dist(K) + dist(K,K i ); }... aus der letzten Vorlesung
4
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.004 Vorgehen Repräsentation des Graphen –„ for( K i succ(K) „ –Variante a: Adjazenzmatrix –Variante b: Adjazenzliste grüne Knotenmenge
5
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.005 Adjazenzmatrix Definition: Knoten, die durch eine Kante verbunden sind, heißen benachbart oder adjazent. Definition: Die n n Matrix A = (a ij ) mit heißt Adjazenzmatrix des Graphen.
6
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.006 Adjazenzmatrix mit Kosten k beachte: alle Diagonalelemente sind 0
7
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.007 Adjazenzmatrix Do Ha W Du K D 20 15 80 20 30 15 150
8
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.008 Adjazenzmatrix Vorteil: Möglichkeit, in einer Laufzeit von O(1) festzustellen, ob eine Kante von K i nach K j existiert. Nachteil: hoher Platzbedarf: O(n 2 )
9
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.009 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
10
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.0010 Adjazenzliste Do Ha W D K Du Array
11
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.0011 Adjazenzliste Du80W15Du30Ha20D150K15 Do Ha W D K Du D20K80
12
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.0012 Adjazenzliste Vorteil: geringer Platzbedarf: O(n+e) (e = Anzahl der Kanten) Nachteil: Um zu prüfen, ob k i und k j benachbart sind, muß die Adjazenzliste von k i durchlaufen und nach k j durchsucht werden. aber: für Dijkstra idealideal
13
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.0013 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
14
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.0014 Do Ha W Du K D 20 80 20 30 15 W die „grünen Knoten“ abgearbeitet noch in Arbeit noch nicht betrachtet
15
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.0015 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
16
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.0016 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 123456789101112131415 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}
17
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.0017 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 Baum sei 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öhne benenne p, q, r um 2 3 1 14 7 1512 6 1310 5 118 4 9 123456789101112131415
18
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.0018 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 Baum sei 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öhne benenne p, q, r um 2 3 1 14 7 1512 6 1310 5 118 4 9 123456789101112131415
19
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.0019 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 Baum sei 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öhne benenne p, q, r um 2 3 14 7 1512 6 1310 5 118 4 9 23456789101112131415
20
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.0020 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 Baum sei 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öhne benenne p, q, r um 2 3 14 7 15 12 6 1310 5 118 4 9 23456789101112131415
21
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.0021 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 Baum sei 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öhne benenne p, q, r um 15 3 14 7 2 12 6 1310 5 118 4 9 23456789101112131415
22
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.0022 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 Baum sei 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öhne benenne p, q, r um 4 3 14 7 2 12 6 1310 5 118 15 9 23456789101112131415
23
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.0023 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 Baum sei 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öhne benenne p, q, r um 4 3 14 7 2 12 6 1310 5 1115 8 9 23456789101112131415
24
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.0024 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 123456789101112 Beispiel: füge „0“ ein
25
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.0025 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 123456789101112 Beispiel: füge „0“ ein 0 0
26
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.0026 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 123456789101112 Beispiel: füge „0“ ein 0 6 13 13 / 2 = 6
27
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.0027 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 123456789101112 Beispiel: füge „0“ ein 0 6
28
Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.0028 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 123456789101112 Beispiel: füge „0“ ein 0 6
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“ ? Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 2 - 20.04.0029
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.