GIN2 – 2. Vorlesung, SS04 Prof. Dr. Wolfram Conen

Slides:



Advertisements
Ähnliche Präsentationen
8. Termin Teil B: Wiederholung Begriffe Baum
Advertisements

Randomisierte Algorithmen Präfix Suche und Konsistentes Hashing
Punkt-in-Polygon-Verfahren III (R/R+-Baum)
Man bestimme den „minimalen aufspannenden Baum“ des Graphen.
Minimum Spanning Tree: MST
Prof. Dr. S. Albers Prof.Dr.Th Ottmann
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Claudio Moraga; Gisbert Dittrich
ADS Vorlesung Prof. Dr. W. Conen, FH Gelsenkirchen
Kapitel 6: Klassifizierung von Sortiertechniken
7. Natürliche Binärbäume
R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister)
Synonyme: Stapel, Keller, LIFO-Liste usw.
Sortieren mit Binären Bäumen
Sortierverfahren Richard Göbel.
Sortierverfahren Richard Göbel.
Algorithmentheorie 04 –Hashing
WS Algorithmentheorie 13 - Kürzeste (billigste) Wege Prof. Dr. Th. Ottmann.
WS Algorithmentheorie 05 - Treaps Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (16 – Fibonacci-Heaps) T. Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (25 – Fibonacci-Heaps – Analyse) T. Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (19 - Analyse natürlicher Bäume) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (24 – Fibonacci-Heaps) T. Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (17 – Bäume: Grundlagen und natürliche Suchbäume) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen 09 - Weitere Sortierverfahren Heapsort-Nachtrag Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (18 - Bäume: Durchlaufreihenfolgen, Analyse nat. Bäume) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (20 - Balancierte Bäume, AVL-Bäume) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (17 – Fibonacci-Heaps – Analyse) Tobias Lauer.
WS Algorithmentheorie 15 – Fibonacci-Heaps Tobias Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (17 – Fibonacci-Heaps) Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (20 - AVL-Bäume: Entfernen, Bruder-Bäume) Prof. Th. Ottmann.
Algorithmentheorie 12 – Spannende Bäume minimalen Gewichts
WS Algorithmentheorie 15 – Fibonacci-Heaps Tobias Lauer.
Algorithmen und Datenstrukturen
WS03/041 Binomial Queues Prof. Dr. S. Albers Prof.Dr.Th Ottmann.
Seminar parallele Programmierung SS 2003
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 12 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Heaps und Priority Queues
Minimum Spanning Tree: MST
ADS – Vorlesung Prof. Dr. Wolfram Conen
Kapitel 2: Datenstrukturen
7.1 Externes Suchen Bisherige Algorithmen: geeignet, wenn alle Daten im Hauptspeicher. Große Datenmengen: oft auf externen Speichermedien, z.B. Festplatte.
Animationen zu Kap. 4.3: AVL-Bäume
Effiziente Algorithmen
Diskrete Mathematik II
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Black Box Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Information und Kommunikation
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Mehrkriterielle Optimierung mit Metaheuristiken
Graphen und Bäume.
Kapitel 5: Von Datenstrukturen zu Abstrakten Datentypen
Kapitel 6: Suchbäume und weitere Sortierverfahren
Kapitel 6: Suchbäume und weitere Sortierverfahren
SWE1 / Übung 10 ( ) Rekursion Binärbäume.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Datenstrukturen für den Algorithmus von.
Binärer Baum, Binärer Suchbaum I
Binärbäume.
Programmiersprachen II Vorbesprechung Klausur Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 2 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 1 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
ADS – Vorlesung Prof. Dr. Wolfram Conen
 Präsentation transkript:

GIN2 – 2. Vorlesung, SS04 Prof. Dr. Wolfram Conen 1.4.2004 Rund um Dijkstra: - Bucket/Radix-Sort - Priority Queues - Heap 01.04.2004 (c) W. Conen, FH GE, GIN2

Schnelles Sortieren 6 12 5 9 10 11 1 2 4 8 3 7 1 2 6 3 12 4 5 9 10 11 7 8 Situation: n (Schlüssel-)Werte aus [1,n] Keine Duplikate. Kosten? O(n) 01.04.2004 (c) W. Conen, FH GE, GIN2

Schnelles Sortieren: BucketSort 6 12 5 9 6 10 11 1 6 Töpfe: 1 5 6 9 10 11 12 1 5 6 6 9 10 11 12 Ergebnis: Situation: m Töpfe, Schlüsselwerte aus [1,m], Duplikate 01.04.2004 (c) W. Conen, FH GE, GIN2

Schneller Sortieren: BucketSort in mehreren Phasen (Radixsort) Situation: n Werte aus [0,,nk-1], Duplikate möglich Kosten normaler Bucketsort: O(n+nk) Idee: Wir wenden ihn mehrfach an! Beispiel: n Werte aus [0,,n2-1], m = n Phase: Werti einfügen in Bk mit k = Werti MOD m Phase: Ergebnisliste durchlaufen, Werti nach Bk mit k = Werti DIV m, dort am ENDE anfügen 01.04.2004 (c) W. Conen, FH GE, GIN2

Schneller Sortieren: BucketSort in mehreren Phasen Beispiel: n = 10, Werte aus [0,,99], 1. Phase 3 18 24 6 47 7 56 34 98 60 3 MOD 10 = 3 18 MOD 10 = 8 60 24 6 98 56 34 47 7 18 Töpfe: 3 Ergebnis 1. Phase: 60 3 24 34 6 5 47 7 18 98 01.04.2004 (c) W. Conen, FH GE, GIN2

Schneller Sortieren: BucketSort in mehreren Phasen Beispiel: n = 10, Werte aus [0,,99], 2. Phase 60 3 24 34 6 56 47 7 18 98 3 6 7 24 34 56 18 98 47 60 DIV 10 = 6 18 DIV 10 = 1 Töpfe: 60 Ergebnis: 3 6 7 18 24 34 47 56 60 98 01.04.2004 (c) W. Conen, FH GE, GIN2

Bucket/Radix Sort: Review Wenn wir die Größe des Schlüsselbereichs als Konstante ansehen, dann sortieren wir zu Kosten von O(n) Aus einer sortieren Folge können wir zu Kosten von O(1) das minimale Element finden und entnehmen Aber Dijkstra verändert ja auch noch die Distanz-Werte der Knoten... 01.04.2004 (c) W. Conen, FH GE, GIN2

Priority Queues INSERT: Warteschlangen, in die Elemente gemäß einer Priorität eingeordnet werden DELETE MIN: Es wird jeweils das Element höchster Priorität entnommen (das soll das Element mit dem minimalen Wert sein) Für uns noch wichtig: DECREASE KEY – der Wert eines Knotens verringert sich! Das sind genau die Operationen, die wir im Dijkstra brauchen: Initialer Aufbau des Queues (INSERT), Updates der Knotenwerte (DECREASE KEY), Entnahme des „besten“ Knotens (DELETE MIN) 01.04.2004 (c) W. Conen, FH GE, GIN2

Priority Queues Genauer: INSERT(Q,v): Füge Knoten v mit Wert Wert(v) in Priority-Queue Q ein (Q,v*) Ã DELETE MIN(Q): Liefere den Knoten mit dem minimalen Wert und lösche ihn aus dem Priority-Queue Q, liefere Q zurück Q Ã DECREASE KEY(Q,v,Wert): Verringere den (Schlüssel-)Wert des Knotens v auf Wert. 01.04.2004 (c) W. Conen, FH GE, GIN2

Priority Queues: Implementierung Wie kann man das effizient implementieren? Z.B. mittels eines sogenannte Heaps! (wir betrachten zunächst nur die Operationen INSERT und DELETE MIN) Was ist ein Heap (=Haufen)? Das ist ein partiell-geordneter Baum: Definition: Ein partiell-geordneter (binärer) Baum ist ein knotenmarkierter binärer Baum T, in dem für jeden Teilbaum T´ mit Wurzel w gilt: 8 y 2 T´: Wert(w) · Wert(y) 01.04.2004 (c) W. Conen, FH GE, GIN2

Partiell-geordneter Baum (Schlüssel-)Werte: 4 6 6 7 10 10 12 13 13 19 4 6 10 12 6 13 10 13 19 7 Alle Wurzeln erfüllen die Bedingung! Ist der Baum eindeutig? 01.04.2004 (c) W. Conen, FH GE, GIN2

Partiell-geordneter Baum (Schlüssel-)Werte: 4 6 6 7 10 10 12 13 13 19 4 6 10 12 6 10 13 19 7 13 Alle Wurzeln erfüllen die Bedingung! Aber der Baum ist nicht mehr „balanciert“! 01.04.2004 (c) W. Conen, FH GE, GIN2

Heap: INSERT Algorithm INSERT(Q,v) Füge v auf der ersten freien Position der untersten Ebene ein (wenn voll, neue Ebene beginnen) p à Vater(v) Solange p existiert und Wert(v) < Wert(p) tue Vertausche die Werte von p und v; v à p; p à Vater(p) Wir betrachten links-vollständige partiell geordnete Bäume: alle Ebenen bis auf die letzte sind voll besetzt auf der letzten Ebene sitzen die Knoten soweit links wie möglich 01.04.2004 (c) W. Conen, FH GE, GIN2

Heap: INSERT Einfügen von 5 Algorithm INSERT(Q,v) Füge v auf der ersten freien Position der untersten Ebene ein (wenn voll, neue Ebene beginnen) p à Vater(v) Solange p existiert und Wert(v) < Wert(p) tue Vertausche die Werte von p und v; v à p; p à Vater(p) Einfügen von 5 4 6 12 13 19 7 10 p ! à v 5 Wert(v) < Wert(p)? Klar! Also: Vertauschen! 01.04.2004 (c) W. Conen, FH GE, GIN2

Heap: INSERT Einfügen von 5 Algorithm INSERT(Q,v) Füge v auf der ersten freien Position der untersten Ebene ein (wenn voll, neue Ebene beginnen) p à Vater(v) Solange p existiert und Wert(v) < Wert(p) tue Vertausche die Werte von p und v; v à p; p à Vater(p) Einfügen von 5 4 6 12 13 19 5 7 10 v ! à p 6 Wert(v) < Wert(p)? Klar! Also: Vertauschen! 01.04.2004 (c) W. Conen, FH GE, GIN2

Heap: INSERT Einfügen von 5 Algorithm INSERT(Q,v) Füge v auf der ersten freien Position der untersten Ebene ein (wenn voll, neue Ebene beginnen) p à Vater(v) Solange p existiert und Wert(v) < Wert(p) tue Vertausche die Werte von p und v; v à p; p à Vater(p) Einfügen von 5 p ! à v 4 5 12 13 19 6 7 10 6 Wert(v) < Wert(p)? Nein! Also: Fertig! 01.04.2004 (c) W. Conen, FH GE, GIN2

Heap: INSERT Ist INSERT korrekt? Algorithm INSERT(Q,v) Füge v auf der ersten freien Position der untersten Ebene ein (wenn voll, neue Ebene beginnen) p à Vater(v) Solange p existiert und Wert(v) < Wert(p) tue Vertausche die Werte von p und v; v à p; p à Vater(p) Ist INSERT korrekt? Wir betrachten eine einzelne Vertauschung der Werte von v und p, es gilt also Wert(v) < Wert(p). Wert(p) ist minimal bzgl. aller Unterbäume von p (und damit aller Unterbäume von v – das gilt auch nach dem Positionswechsel!) Wg. Wert(v) < Wert(p) ist dann auch Wert(v) nach Vertauschung minimal für alle Unterbäume, also ist der neue Baum partiell geordnet (unter der Annahme, dass der Ausgangsbaum partiell geordnet war). 01.04.2004 (c) W. Conen, FH GE, GIN2

Heap: DELETE MIN Entfernen des Minimums: Algorithm DELETE MIN (Q): (Q, Min) Sei w die Wurzel des Heaps mit den Söhnen s1, s2; Min à Wert(w) Sei k der letzte Knoten (unten, rechts) Wert(w) à Wert(k); Lösche k; Solange s1 oder s2 existieren und (Wert(w) > Wert(s1) oder Wert(w) > Wert(s2)) tue Vertausche den Wert von w mit dem kleineren Wert der beiden Söhne, dieser Sohn sei s; w à s; s1 à Linker_Sohn(w); s2 à Rechter_Sohn(w) Gib Q und Min zurück. 4 5 12 13 19 6 7 10 w ! à k 01.04.2004 (c) W. Conen, FH GE, GIN2

Heap: DELETE MIN Entfernen des Minimums: Algorithm DELETE MIN (Q): (Q, Min) Sei w die Wurzel des Heaps mit den Söhnen s1, s2; Min à Wert(w) Sei k der letzte Knoten (unten, rechts) Wert(w) à Wert(k); Lösche k; Solange s1 oder s2 existieren und (Wert(w) > Wert(s1) oder Wert(w) > Wert(s2)) tue Vertausche den Wert von w mit dem kleineren Wert der beiden Söhne, dieser Sohn sei s; w à s; s1 à Linker_Sohn(w); s2 à Rechter_Sohn(w) Gib Q und Min zurück. w ! 6 5 12 13 19 7 10 Bedingung für s = s1erfüllt! Also: Tauschen s = s1 ! s2 ! 01.04.2004 (c) W. Conen, FH GE, GIN2

Heap: DELETE MIN Entfernen des Minimums: Algorithm DELETE MIN (Q): (Q, Min) Sei w die Wurzel des Heaps mit den Söhnen s1, s2; Min à Wert(w) Sei k der letzte Knoten (unten, rechts) Wert(w) à Wert(k); Lösche k; Solange s1 oder s2 existieren und (Wert(w) > Wert(s1) oder Wert(w) > Wert(s2)) tue Vertausche den Wert von w mit dem kleineren Wert der beiden Söhne, dieser Sohn sei s; w à s; s1 à Linker_Sohn(w); s2 à Rechter_Sohn(w) Gib Q und Min zurück. 5 6 12 13 19 7 10 w ! s1 ! s2 ! Bedingung nicht erfüllt! Also: Fertig! 01.04.2004 (c) W. Conen, FH GE, GIN2

Heap: DELETE MIN Algorithm DELETE MIN (Q): (Q, Min) Sei w die Wurzel des Heaps mit den Söhnen s1, s2; Min à Wert(w) Sei k der letzte Knoten (unten, rechts) Wert(w) à Wert(k); Lösche k; Solange s1 oder s2 existieren und (Wert(w) > Wert(s1) oder Wert(w) > Wert(s2)) tue Vertausche den Wert von w mit dem kleineren Wert der beiden Söhne, dieser Sohn sei s; w à s; s1 à Linker_Sohn(w); s2 à Rechter_Sohn(w) Gib Q und Min zurück. Ist DELETE MIN korrekt? Wir betrachten eine einzelne vertauschung der Werte von w und s, es gilt also Wert(s) < Wert(w). Wert(s) ist minimal bzgl. aller Unterbäume von s. Es wurde ausgewählt, also ist es auch minimal im Vergleich zum anderen Kind-Baum – das gilt auch nach dem Positionswechsel!) w ist möglicherweise nicht minimal für seinen Unterbaum. Das wird aber weiterbehandelt (w sinkt dann weiter!) bis schließlich Wert(w) · Wert(s1) und Wert(w) · Wert(s2). 01.04.2004 (c) W. Conen, FH GE, GIN2

Priority Queue Mit dem Heap lassen sich INSERT und DELETE MIN mit Aufwand O(log n) realisieren! Das gleiche gilt für Updates, also DECREASE KEY-Operationen (analog zu INSERT plus schnelles Auffinden, kommt noch)! Damit können wir (für sparsam besetzte Graphen) Dijkstra verbessern! Wie es noch besser geht: s. Tarjan bzw. die nächste Veranstaltung 01.04.2004 (c) W. Conen, FH GE, GIN2