Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Diskrete Mathematik II

Ähnliche Präsentationen


Präsentation zum Thema: "Diskrete Mathematik II"—  Präsentation transkript:

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

2 Übersicht letzte Stunde heute: 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 Semester - SS 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 Semester - SS Vorlesung 2

4 Vorgehen Repräsentation des Graphen grüne Knotenmenge
„ for( Ki  succ(K) „ Variante a: Adjazenzmatrix Variante b: Adjazenzliste grüne Knotenmenge Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 2

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

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

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

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 Semester - SS 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 Semester - SS Vorlesung 2

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

11 Adjazenzliste Do Ha W D K Du Du 80 Ha 20 D 20 W 15 Du 30 D 150 K 15 K
Lutz Plümer - Diskrete Mathematik Semester - SS 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 Semester - SS 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 Semester - SS Vorlesung 2

14 die „grünen Knoten“ abgearbeitet noch in Arbeit noch nicht betrachtet
Do Ha W Du K D 20 80 30 15 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 { } achten Sie auf die Indizierung Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 2

16 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} 2 3 4 5 6 7 8 10 11 12 13 14 15 9 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Einbettung in einen Array: index(k) = n index (k.linkerSohn) = 2  n index (k.rechterSohn) = 2  n + 1 index (k.vater) =   Lutz Plümer - Diskrete Mathematik Semester - SS Vorlesung 2

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

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

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

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

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

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

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

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

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

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

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

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

29 Für „Kenner“ Für „Hacker“ ?
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 Semester - SS Vorlesung 2


Herunterladen ppt "Diskrete Mathematik II"

Ähnliche Präsentationen


Google-Anzeigen