1 / 29

Diskrete Mathematik II

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

telyn
Download Presentation

Diskrete Mathematik II

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Diskrete Mathematik II Vorlesung 2 SS 2001 Datenstrukturen für den Algorithmus von Dijkstra

  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

  3. ... aus der letzten Vorlesung 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); } Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

  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

  5. Definition: Die n  n Matrix A = (aij) mit heißt Adjazenzmatrix des Graphen. Adjazenzmatrix Definition: Knoten, die durch eine Kante verbunden sind, heißen benachbart oder adjazent. Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

  6. Adjazenzmatrix mit Kosten k beachte: alle Diagonalelemente sind 0 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

  7. Do 80 Du 20 Ha 30 20 15 W D 15 80 K Adjazenzmatrix 150 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

  8. Adjazenzmatrix • Vorteil: Möglichkeit, in einer Laufzeit von O(1) festzustellen, ob eine Kante vonKi nach Kj existiert. • Nachteil: hoher Platzbedarf: O(n2) Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

  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

  10. Do Du Ha W D K Adjazenzliste Array Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

  11. Du 80 Do Ha 20 Du W D 20 15 D 150 Ha Du 30 W K 80 K 15 D K Adjazenzliste Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

  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

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

  14. Do 80 Du 20 Ha 30 20 15 W D 15 80 K die „grünen Knoten“ abgearbeitet W noch in Arbeit noch nicht betrachtet

  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

  16. Einbettung in einen Array: index(k) = n index (k.linkerSohn) = 2  n index (k.rechterSohn) = 2  n + 1 index (k.vater) =  2 3 4 5 6 7 8 10 11 12 13 14 15 Eine neue Datenstruktur: Der Heap 1 • 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} 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

  17. 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 1 2 3 9 4 5 6 7 8 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Entfernen des kleinsten Elements Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

  18. 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 1 4 5 6 7 8 10 11 12 13 14 15 Entfernen des kleinsten Elements 2 3 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

  19. 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 5 6 7 8 10 11 12 13 14 15 Entfernen des kleinsten Elements 2 3 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

  20. 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 5 6 7 8 10 11 12 13 14 Entfernen des kleinsten Elements 15 2 3 9 15 2 3 4 5 6 7 8 9 10 11 12 13 14 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

  21. 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 5 6 7 8 10 11 12 13 14 Entfernen des kleinsten Elements 2 15 3 9 2 15 3 4 5 6 7 8 9 10 11 12 13 14 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

  22. 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 5 6 7 8 10 11 12 13 14 Entfernen des kleinsten Elements 2 4 3 9 2 4 3 15 5 6 7 8 9 10 11 12 13 14 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

  23. 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 5 6 7 15 10 11 12 13 14 Entfernen des kleinsten Elements 2 4 3 8 9 2 4 3 8 5 6 7 15 9 10 11 12 13 14 Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

  24. 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 4 5 6 7 8 10 11 12 Einfügen eines neuen Elements 1 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

  25. 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 4 5 6 7 8 10 11 12 Einfügen eines neuen Elements 1 9 0 1 2 3 4 5 6 7 8 9 10 11 12 0 Beispiel: füge „0“ ein Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

  26. 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 4 5 0 7 8 10 11 12 Einfügen eines neuen Elements 1 9 6 1 2 3 4 5 0 7 8 9 10 11 12 6 13 / 2 = 6 13 Beispiel: füge „0“ ein Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

  27. 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 4 5 3 7 8 10 11 12 Einfügen eines neuen Elements 1 9 6 1 2 0 4 5 3 7 8 9 10 11 12 6 Beispiel: füge „0“ ein Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

  28. 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 4 5 3 7 8 10 11 12 Einfügen eines neuen Elements 0 9 6 0 2 1 4 5 3 7 8 9 10 11 12 6 Beispiel: füge „0“ ein Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

  29. 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“ ? Für „Kenner“ Lutz Plümer - Diskrete Mathematik - 2. Semester - SS 2001 - Vorlesung 2

More Related