Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Datenstrukturen für den Algorithmus von Dijkstra Diskrete Mathematik II Vorlesung 2."—  Präsentation transkript:

1 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

2 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 22 Ü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 - 2. Semester - SS Vorlesung 23 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 - 2. Semester - SS Vorlesung 24 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 - 2. Semester - SS Vorlesung 25 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 - 2. Semester - SS Vorlesung 26 Adjazenzmatrix mit Kosten k beachte: alle Diagonalelemente sind 0

7 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 27 Adjazenzmatrix Do Ha W Du K D

8 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 28 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 - 2. Semester - SS Vorlesung 29 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 - 2. Semester - SS Vorlesung 210 Adjazenzliste Do Ha W D K Du Array

11 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 211 Adjazenzliste Du80W15Du30Ha20D150K15 Do Ha W D K Du D20K80

12 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 212 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 - 2. Semester - SS Vorlesung 213 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 Do Ha W Du K D W die grünen Knoten abgearbeitet noch in Arbeit noch nicht betrachtet

15 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 215 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 - 2. Semester - SS Vorlesung 216 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 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 - 2. Semester - SS Vorlesung 217 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

18 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 218 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

19 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 219 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

20 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 220 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

21 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 221 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

22 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 222 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

23 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 223 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

24 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 224 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 Beispiel: füge 0 ein

25 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 225 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 Beispiel: füge 0 ein 0 0

26 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 226 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 Beispiel: füge 0 ein / 2 = 6

27 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 227 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 Beispiel: füge 0 ein 0 6

28 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 228 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 Beispiel: füge 0 ein 0 6

29 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS Vorlesung 229 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 ?


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

Ähnliche Präsentationen


Google-Anzeigen