Sortieren und Suchen Jens Wächtler 17.05.2017 Hallo Welt! -Seminar LS 2
Überblick Sortieren kurze Wiederholung Binäre & Ternäre Suche Binäre Suche in einer Liste Bisektionsverfahren (Nullstellensuche) Ternäre Suche (Extremasuche) Range Minimum Query Lowest Common Ancestor Quellen 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 2
Sortieren 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 3
Warum sortieren? Sortieren gibt Daten Struktur Ermöglicht die Verwendung von effizienten Suchalgorithmen Kosten-Nutzen-Verhältnis meist vorteilhaft 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 4
Eigenschaften von Sortieralgorithmen Zusätzlicher Speicherbedarf Stabilität stabil: Die Reihenfolge bei gleichem Schlüssel bleibt erhalten instabil: Die Reihenfolge bei gleichen Schlüssel wird nicht unbedingt behalten Komplexitätsanalyse Best Case Average Case Worst Case 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 5
Vergleichsbasierte Sortieralgorithmen Algorithmus Best-Case Average-Case Worst-Case Stabil Zusätzlicher Speicherbedarf Bogosort O(n) O(n n!) Bubblesort O(n) O(n 2 ) O(n 2 ) Insertionsort O(n) O(n 2 ) O(n 2 ) Shellsort O(n) O(n log n ²) O(n 1,25 ) Quicksort O(n log n ) O(n log n ) O(n 2 ) Für den Heap Introsort O(n log n ) O(n log n ) O(n log n ) Selectionsort O(n 2 ) O(n 2 ) O(n 2 ) Heapsort O(n log n ) O(n log n ) O(n log n ) Mergesort O(n log n ) O(n log n ) O(n log n ) O(n) 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 6
Suche Implementieren Suchalgorithmen selbst zu implementieren kostet Zeit Nutzt die Java-API & C++-STL Wesentlich schneller und weniger fehleranfällig 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 7
Suchen 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 8
Naiver Ansatz Sequentielle Suchen Suchen eines Elementes in einer Liste Vorteil: Keine Sortierung nötig Nachteil: Aufwand sehr hoch. Worst-Case: O n 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 9
Optimierter Ansatz Auf geordneten Listen suchen Ermöglicht effizienteres Suchen Binäre Suche Worst Case: O(log n) 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 10
Binäre Suche Verfahren: Eingabe: liste; wert; links = 0; rechts = liste.length() - 1; mitte = (links + rechts) / 2 links > rechts return -1; wert == liste[mitte] return mitte; rechts = mitte - 1; wert < liste[mitte] links = mitte + 1; 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 11
Beispiel: Binäre Suche Gesucht: 13 links = 0; rechts = 9; mitte = 4; 1 2 3 5 8 13 21 34 55 89 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 12
Beispiel: Binäre Suche Gesucht: 13 links = 0; rechts = 9; mitte = 4; 1 2 3 5 8 13 21 34 55 89 1 2 3 5 8 13 21 34 55 89 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 13
Beispiel: Binäre Suche Gesucht: 13 links = 0; rechts = 9; mitte = 4; 1 2 3 5 8 13 21 34 55 89 1 2 3 5 8 13 21 34 55 89 1 2 3 5 8 13 21 34 55 89 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 14
Beispiel: Binäre Suche Gesucht: 13 links = 0; rechts = 9; mitte = 4; 1 2 3 5 8 13 21 34 55 89 1 2 3 5 8 13 21 34 55 89 1 2 3 5 8 13 21 34 55 89 1 2 3 5 8 13 21 34 55 89 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 15
Bisektionsverfahren Nullstellensuche einer Funktion f(x) Numerisches Verfahren Voraussetzungen: Funktion ist stetig auf abgeschlossenem Intervall [a, b] Es existiert ein Vorzeichenwechsel f a < 0 und f b > 0 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 16
Beispiel: Bisektionsverfahren 4,0 3,0 2,0 1,0 0,0-0,5-1,0 0 0,5 1 1,5 2 2,5 f x = x 2 2 [a n, b n ] a 0 = 0, b 0 = 2 x n = a n + b n 2-2,0-3,0 n a n b n f(a n ) f b n x n f x n 0 0 2-2 2 1-1 1 1 2-1 2 1,5 0,25 2 1 1,5-1 0,25 1,25-0,4375 3 1,25 1,5-0,4375 0,25 1,375-0,109375 4 1,375 1,5-0,109375 0,25 1,4375 0,06640625 5 1,375 1,4375-0,109375 0,06640625 1,40625-0,0224609 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 17
Beispiel: Bisektionsverfahren 4,0 3,0 2,0 1,0 0,0-0,5-1,0 0 0,5 1 1,5 2 2,5 f x = x 2 2 [a n, b n ] a 0 = 0, b 0 = 2 x n = a n + b n 2-2,0-3,0 n a n b n f(a n ) f b n x n f x n 0 0 2-2 2 1-1 1 1 2-1 2 1,5 0,25 2 1 1,5-1 0,25 1,25-0,4375 3 1,25 1,5-0,4375 0,25 1,375-0,109375 4 1,375 1,5-0,109375 0,25 1,4375 0,06640625 5 1,375 1,4375-0,109375 0,06640625 1,40625-0,0224609 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 18
Beispiel: Bisektionsverfahren 4,0 3,0 2,0 1,0 0,0-0,5-1,0 0 0,5 1 1,5 2 2,5 f x = x 2 2 [a n, b n ] a 0 = 0, b 0 = 2 x n = a n + b n 2-2,0-3,0 n a n b n f(a n ) f b n x n f x n 0 0 2-2 2 1-1 1 1 2-1 2 1,5 0,25 2 1 1,5-1 0,25 1,25-0,4375 3 1,25 1,5-0,4375 0,25 1,375-0,109375 4 1,375 1,5-0,109375 0,25 1,4375 0,06640625 5 1,375 1,4375-0,109375 0,06640625 1,40625-0,0224609 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 19
Beispiel: Bisektionsverfahren 4,0 3,0 2,0 1,0 0,0-0,5-1,0 0 0,5 1 1,5 2 2,5 f x = x 2 2 [a n, b n ] a 0 = 0, b 0 = 2 x n = a n + b n 2-2,0-3,0 n a n b n f(a n ) f b n x n f x n 0 0 2-2 2 1-1 1 1 2-1 2 1,5 0,25 2 1 1,5-1 0,25 1,25-0,4375 3 1,25 1,5-0,4375 0,25 1,375-0,109375 4 1,375 1,5-0,109375 0,25 1,4375 0,06640625 5 1,375 1,4375-0,109375 0,06640625 1,40625-0,0224609 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 20
Beispiel: Bisektionsverfahren 4,0 3,0 2,0 1,0 0,0-0,5-1,0 0 0,5 1 1,5 2 2,5 f x = x 2 2 [a n, b n ] a 0 = 0, b 0 = 2 x n = a n + b n 2-2,0-3,0 n a n b n f(a n ) f b n x n f x n 0 0 2-2 2 1-1 1 1 2-1 2 1,5 0,25 2 1 1,5-1 0,25 1,25-0,4375 3 1,25 1,5-0,4375 0,25 1,375-0,109375 4 1,375 1,5-0,109375 0,25 1,4375 0,06640625 5 1,375 1,4375-0,109375 0,06640625 1,40625-0,0224609 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 21
Ternäre Suche Problem: Finden von Extrema mit Genauigkeit ε Voraussetzung: Funktion f x hat nur eine Extremstelle in einem abgeschlossenen Intervall a, b Funktion f x steigt (fällt) monoton im Intervall a, x und fällt (steigt) monoton im Intervall x, b Idee: Intervall wird pro Iteration in drei Teile aufgeteilt Suche wird auf neuem (kleineren) Intervall fortgesetzt Wenn gewünschte Genauigkeit erreicht, dann terminiere 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 22
Ternäre Suche: Ablauf 1. Aufteilen des Intervalls [a, b] in die drei Intervalle a, c, c, b und a, d 2. Berechnen der Funktionswerte f(c) und f(d) 3. Drei Fälle: f c < f d Extremum im Intervall [c, b] f c > f d Extremum im Intervall [a, d] f c = f(d) Extremum im Intervall [c, d] 4. Falls geforderte Genauigkeit erreicht gib x zurück 5. Ansonsten: Nächste Iteration mit neuem Bereich 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 23
Ternäre Suche: Beispiel 25 20 15 10 f x = x 3 + 5x² + 2 Ausgangssituation: a, b = 1,5 5 0-5 0 1 2 3 4 5 6 c = 7 3 d = 11 3 n a b c d f(a) f(b) f(c) f(d) 0 1 5 7/3 11/3 2 2 16,5185 19.9259 1 7/3 5 3,22222 4,11111 16,5185 2 20,4322 17,1291 2 7/3 4,11111 2,92592 3,51851 16,5185 17,1291 19,7562 20.3407 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 24
Ternäre Suche: Beispiel 25 20 15 10 f x = x 3 + 5x² + 2 Ausgangssituation: a, b = 1,5 5 0-5 0 1 2 3 4 5 6 c = 7 3 d = 11 3 n a b c d f(a) f(b) f(c) f(d) 0 1 5 7/3 11/3 2 2 16,5185 19.9259 1 7/3 5 3,22222 4,11111 16,5185 2 20,4322 17,1291 2 7/3 4,11111 2,92592 3,51851 16,5185 17,1291 19,7562 20.3407 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 25
Ternäre Suche: Beispiel 25 20 15 10 f x = x 3 + 5x² + 2 Ausgangssituation: a, b = 1,5 5 0-5 0 1 2 3 4 5 6 c = 7 3 d = 11 3 n a b c d f(a) f(b) f(c) f(d) 0 1 5 7/3 11/3 2 2 16,5185 19.9259 1 7/3 5 3,22222 4,11111 16,5185 2 20,4322 17,1291 2 7/3 4,11111 2,92592 3,51851 16,5185 17,1291 19,7562 20.3407 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 26
Ternäre Suche: Beispiel 25 20 15 10 f x = x 3 + 5x² + 2 Ausgangssituation: a, b = 1,5 5 0-5 0 1 2 3 4 5 6 c = 7 3 d = 11 3 n a b c d f(a) f(b) f(c) f(d) 0 1 5 7/3 11/3 2 2 16,5185 19.9259 1 7/3 5 3,22222 4,11111 16,5185 2 20,4322 17,1291 2 7/3 4,11111 2,92592 3,51851 16,5185 17,1291 19,7562 20.3407 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 27
Range-Minimum-Query 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 28
Range-Minimum-Query Problem: Gesucht ist der Index des kleinsten Elements innerhalb eines Teilarrays A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 RMQ A 2,5 = 4 Naiver Ansatz: Sequenzielle Suche im Teilbereich Laufzeit pro Anfrage: O(n) 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 29
Range-Minimum-Query: Optimierung Verarbeitung der Liste in eine Lookup-Tabelle Form der Tabelle A[start][länge] RMQ A (0,0) RMQ A (0,1) RMQ A (0,2) RMQ A (0,7) RMQ A (1,1) RMQ A (1,2) RMQ A (1,7) RMQ A (2,2) RMQ A (2,7) RMQ A (7,7) Laufzeit für Erstellung O n 3 Suchen O(1) 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 30
Range-Minimum-Query: Optimierung Nicht jede mögliche Sequenz speichern RMQ A Teilbereiche der Länge 2 j, j 0, log 2 (n) Vorverarbeitung lässt sich in O n log n bewerkstelligen Platzbedarf beträgt O n log n Suche in O(1) 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 31
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 1 2 3 4 5 6 7 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 32
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 1 2 3 4 5 6 7 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 33
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 1 1 2 3 4 5 6 7 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 34
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 1 1 2 2 3 4 5 6 7 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 35
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 1 1 2 2 3 3 4 5 6 7 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 36
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 1 1 2 2 3 3 4 4 5 6 7 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 37
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 1 1 2 2 3 3 4 4 5 5 6 7 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 38
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 39
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 40
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 41
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 42
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 0 1 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 43
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 0 1 1 1 2 2 2 3 3 4 4 5 5 6 6 7 7 8 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 44
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 0 1 1 1 2 2 2 3 3 4 4 4 5 5 6 6 7 7 8 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 45
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 0 1 1 1 2 2 2 3 3 4 4 4 4 5 5 6 6 7 7 8 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 46
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 0 1 1 1 2 2 2 3 3 4 4 4 4 5 5 6 6 6 7 7 8 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 47
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 0 1 1 1 2 2 2 3 3 4 4 4 4 5 5 6 6 6 7 7 7 8 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 48
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 0 0 1 1 1 2 2 2 3 3 4 4 4 4 5 5 6 6 6 7 7 7 8 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 49
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 0 0 1 1 1 4 2 2 2 3 3 4 4 4 4 5 5 6 6 6 7 7 7 8 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 50
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 0 0 1 1 1 4 2 2 2 4 3 3 4 4 4 4 5 5 6 6 6 7 7 7 8 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 51
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 0 0 1 1 1 4 2 2 2 4 3 3 4 4 4 4 4 5 5 6 6 6 7 7 7 8 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 52
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 0 0 1 1 1 4 2 2 2 4 3 3 4 4 4 4 4 4 5 5 6 6 6 7 7 7 8 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 53
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 0 0 1 1 1 4 2 2 2 4 3 3 4 4 4 4 4 4 5 5 6 7 6 6 7 7 7 8 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 54
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 0 0 4 1 1 1 4 2 2 2 4 3 3 4 4 4 4 4 4 5 5 6 7 6 6 7 7 7 8 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 55
RMQ: Sparse Table M 2 0 2 1 2 2 2 3 0 0 0 0 4 1 1 1 4 4 2 2 2 4 3 3 4 4 4 4 4 4 5 5 6 7 6 6 7 7 7 8 8 A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 56
RMQ: Sparse Table M 0 1 2 3 0 0 0 0 4 1 1 1 4 4 2 2 2 4 3 3 4 4 4 4 4 4 5 5 6 7 6 6 7 7 7 Suchanfrage: A[0] A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] 5 7 32 43 2 21 15 9 19 M i k, A[M i k A[M j 2 k + 1 k ] RMQ A i, j = M j 2 k + 1 k, sonst RMQ A 2,8 RMQ A 2,5 & RMQ A (5,8) RMQ A (2,5) = 4 RMQ A (5,8) = 7 RMQ A (2,8) = 4 Anfrage in O(1) 8 8 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 57
Lowest Common Ancestor 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 58
Lowest Common Ancestor Gegeben ist ein gerichteter Baum Gesucht ist gemeinsamer Elternknoten zweier unterschiedlicher Knoten Der am weitesten von der Wurzel entfernte Elternknoten ist der Lowest Common Ancestor 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 59
Lowest Common Ancestor LCA 5,3 = 2 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 60
LCA: Erste Überlegung Weg von der Wurzel zu den Knoten speichern Der letzte gemeinsame Knoten ist LCA Vorteil: Einfach zu Implementieren Nachteil: Laufzeit O n Ungeeignet für viele Abfragen 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 61
LCA: Optimierung Umwandlung von LCA zu RMQ Benutze Tiefensuche auf Baum Befülle drei Arrays auf dem Weg: Array A[i] speichert Schlüssel des Knoten Array B[i] speichert Distanz zur Wurzel Array C i speichert das erstmalige Vorkommen eines Knoten 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 62
LCA zu RMQ: Beispiel 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 63
LCA zu RMQ: Beispiel LCA 6,8 = A RMQ B (C 6, C 8 ) = A RMQ B 7,11 = 2 C A B 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 64
LCA zu RMQ: Beispiel LCA 6,8 = A RMQ B (C 6, C 8 ) = A RMQ B 7,11 = 2 0 1 2 3 4 5 6 7 8 9 C 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A 9 B 0 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 65
LCA zu RMQ: Beispiel LCA 6,8 = A RMQ B (C 6, C 8 ) = A RMQ B 7,11 = 2 0 1 2 3 4 5 6 7 8 9 C 1 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A 9 4 B 0 1 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 66
LCA zu RMQ: Beispiel LCA 6,8 = A RMQ B (C 6, C 8 ) = A RMQ B 7,11 = 2 0 1 2 3 4 5 6 7 8 9 C 1 2 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A 9 4 7 B 0 1 2 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 67
LCA zu RMQ: Beispiel LCA 6,8 = A RMQ B (C 6, C 8 ) = A RMQ B 7,11 = 2 0 1 2 3 4 5 6 7 8 9 C 1 2 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A 9 4 7 4 B 0 1 2 1 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 68
LCA zu RMQ: Beispiel LCA 6,8 = A RMQ B (C 6, C 8 ) = A RMQ B 7,11 = 2 0 1 2 3 4 5 6 7 8 9 C 1 2 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A 9 4 7 4 9 B 0 1 2 1 0 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 69
LCA zu RMQ: Beispiel LCA 6,8 = A RMQ B (C 6, C 8 ) = A RMQ B 7,11 = 2 0 1 2 3 4 5 6 7 8 9 C 5 1 2 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A 9 4 7 4 9 2 B 0 1 2 1 0 1 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 70
LCA zu RMQ: Beispiel LCA 6,8 = A RMQ B (C 6, C 8 ) = A RMQ B 7,11 = 2 0 1 2 3 4 5 6 7 8 9 C 5 6 1 2 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A 9 4 7 4 9 2 3 B 0 1 2 1 0 1 2 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 71
LCA zu RMQ: Beispiel LCA 6,8 = A RMQ B (C 6, C 8 ) = A RMQ B 7,11 = 2 0 1 2 3 4 5 6 7 8 9 C 5 6 1 7 2 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A 9 4 7 4 9 2 3 6 B 0 1 2 1 0 1 2 3 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 72
LCA zu RMQ: Beispiel LCA 6,8 = A RMQ B (C 6, C 8 ) = A RMQ B 7,11 = 2 0 1 2 3 4 5 6 7 8 9 C 5 6 1 7 2 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A 9 4 7 4 9 2 3 6 3 B 0 1 2 1 0 1 2 3 2 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 73
LCA zu RMQ: Beispiel LCA 6,8 = A RMQ B (C 6, C 8 ) = A RMQ B 7,11 = 2 0 1 2 3 4 5 6 7 8 9 C 5 6 1 9 7 2 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A 9 4 7 4 9 2 3 6 3 5 B 0 1 2 1 0 1 2 3 2 3 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 74
LCA zu RMQ: Beispiel LCA 6,8 = A RMQ B (C 6, C 8 ) = A RMQ B 7,11 = 2 0 1 2 3 4 5 6 7 8 9 C 5 6 1 9 7 2 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A 9 4 7 4 9 2 3 6 3 5 3 B 0 1 2 1 0 1 2 3 2 3 2 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 75
LCA zu RMQ: Beispiel LCA 6,8 = A RMQ B (C 6, C 8 ) = A RMQ B 7,11 = 2 0 1 2 3 4 5 6 7 8 9 C 5 6 1 9 7 2 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A 9 4 7 4 9 2 3 6 3 5 3 2 B 0 1 2 1 0 1 2 3 2 3 2 1 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 76
LCA zu RMQ: Beispiel LCA 6,8 = A RMQ B (C 6, C 8 ) = A RMQ B 7,11 = 2 0 1 2 3 4 5 6 7 8 9 C 5 6 1 9 7 2 12 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A 9 4 7 4 9 2 3 6 3 5 3 2 8 B 0 1 2 1 0 1 2 3 2 3 2 1 2 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 77
LCA zu RMQ: Beispiel LCA 6,8 = A RMQ B (C 6, C 8 ) = A RMQ B 7,11 = 2 0 1 2 3 4 5 6 7 8 9 C 5 6 1 9 7 2 12 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A 9 4 7 4 9 2 3 6 3 5 3 2 8 2 B 0 1 2 1 0 1 2 3 2 3 2 1 2 1 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 78
LCA zu RMQ: Beispiel LCA 6,8 = A RMQ B (C 6, C 8 ) = A RMQ B 7,11 = 2 0 1 2 3 4 5 6 7 8 9 C 5 6 1 9 7 2 12 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A 9 4 7 4 9 2 3 6 3 5 3 2 8 2 9 B 0 1 2 1 0 1 2 3 2 3 2 1 2 1 0 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 79
FRAGEN? 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 80
Quellen RMQ & LCA https://www.topcoder.com/community/datascience/data-science-tutorials/range-minimum-queryand-lowest-commonancestor/#range_minimum_query_(rmq) Bisektionsverfahren https://apps.topcoder.com/forums//www.eclipse.org?m odule=thread&threadid=670168&start=0&mc=10 Ternäre Suche https://apps.topcoder.com/forums//www.eclipse.org?m odule=thread&threadid=670169&start=0&mc=2 Folien früherer Semester 17.05.2017 Jens Wächtler Hallo Welt! -Seminar LS 2 Suchen und Sortieren 81