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 Diskrete Mathematik II Vorlesung 2 20.04.00 Datenstrukturen für den Algorithmus von.

Ähnliche Präsentationen


Präsentation zum Thema: "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."—  Präsentation transkript:

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


Herunterladen ppt "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."

Ähnliche Präsentationen


Google-Anzeigen