Lineare Suche Divide-and-Conquer-Suche Kombinationssuche

Slides:



Advertisements
Ähnliche Präsentationen
Hash-Tabellen und -Funktionen Hash-Tabellen in Java
Advertisements

Informatik II – Kapitel 11
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Einführung in die Programmierung Zusammenfassung
Foliensatz von A. Weber zur Vorlesung Informatik I, Bonn, 2002/03
„Such-Algorithmen“ Zusammenfassung des Kapitels 11
Kapitel 6: Klassifizierung von Sortiertechniken
Suche in Texten (Stringsuche )
3. Kapitel: Komplexität und Komplexitätsklassen
Kapitel 6. Suchverfahren
5. Sortier-Algorithmen Vorbemerkungen:
Gliederung Motivation / Grundlagen Sortierverfahren
Sortierverfahren Richard Göbel.
Java: Dynamische Datentypen
Listen Richard Göbel.
Sortierverfahren Richard Göbel.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (04 – Entwurfsverfahren) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
WS Algorithmentheorie 01 – Divide and Conquer (Segmentschnitt) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen Halbzeit: Was haben wir bisher gelernt? Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Algorithmen und Datenstrukturen
WS 06/07 Algorithmentheorie 01 - Einleitung Prof. Dr. Th. Ottmann Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (09 - Weitere Sortierverfahren) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Geometrisches Divide and Conquer
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 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
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 Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation II Vorlesung In welcher Masche liegt der Punkt p?
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
Externe Datenstruktur lineare Liste
DVG Klassen und Objekte
Einführung in die Programmierung Datensammlung
Suchen & Sortieren mit Arrays.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Computational Thinking Suchen und Sortieren [Ordnung muss sein…]
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation II Vorlesung 7 SS 2000 Punkt-in-Polygon-Verfahren I (Trapezkarte)
Effiziente Algorithmen
Einführung in die Programmierung
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
2.4 Rekursion Klassifikation und Beispiele
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation III Vorlesung 1 WS 2001/02 Punkt-in-Landkarte I (Streifenkarte)
Sortieralgorithmen Greedy Sortieren: Sortieren durch Auswahl, Einfügen und Austauschen Divide-and-Conquer-Sortieren: Quicksort und merge sort Foliensatz.
M a r c – o l i v e r p a h l Informatik II – Kapitel 12 „Sortier-Algorithmen“ Zusammenfassung des Kapitel 12 Küchlin, Weber, Einführung in die Informatik,
Java Programme nur ein bisschen objektorientiert.
 Präsentation transkript:

Lineare Suche Divide-and-Conquer-Suche Kombinationssuche Suchalgorithmen Lineare Suche Divide-and-Conquer-Suche Kombinationssuche Foliensatz von Prof. D. Saupe, Uni Konstanz, 2003. Überarbeitet und ergänzt von A. Weber, sowie von W. Küchlin zu Informatik II, Tübingen 2004 W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -1- Springer-Verlag, ISBN 3-540-20958-1

Einleitung und Problemstellung Gegeben: abstrakter Datentyp Folge von Elementen Methode: Suche Element a in Folge f Output: eine der (evtl. mehreren) Positionen P(f,a) aus S = 0,1,...,len(f)-1 P(f,a)  I = { p | f[p]=a }, wenn I nicht leer P(f,a) = -1 g.d.w. a kommt in f nicht vor (I leer) W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -2- Springer-Verlag, ISBN 3-540-20958-1

Abstrakte Allgemeine Suchprozedur suchePosition (f,a) // f ist eine Folge, a ein Element. Dann ist res // eine Position von a in f, falls a in f vorkommt, // andernfalls ist res = -1. 1. Initialisiere: res = -1; S = Menge der Suchpositionen in f. 2. Trivialfall: if (S ==) return(res). 3. Reduktion: Wähle die nächste Suchposition p und entferne p aus S. 4. Rekursion? if (f[p == a) return (p ); andernfalls weiter mit Schritt 2. Implementierungsdetails offen (Algorithmen-Schema) Wahl der nächsten Suchposition Realisierung des Tests S == Realisierung führt zu konkretem Algorithmus. W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -3- Springer-Verlag, ISBN 3-540-20958-1

Teste jedes Element der Folge in natürlicher Reihenfolge Lineare Suche Teste jedes Element der Folge in natürlicher Reihenfolge Entwurfsschema ist greedy Generischer Fall: Folge f von Elementen des Typs Object (z.B. Reihung oder Liste) Test auf Gleichheit: Virtuelle Funktion equals Implementierung der Methode linearSearch in Beispielklasse SearchClass linearSearch deklariert als static (greift nicht auf Instanzvariablen der kapselnden Klasse zu) W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -4- Springer-Verlag, ISBN 3-540-20958-1

Linear Search public class SearchClass { // ... /** * Anforderungen: * f eine Folge aus Elementen vom Typ Object * Zusicherungen: * Res == -1, falls a nicht in f vorkommt. * res == i, falls i die erste * Position mit f[i].equals(a). */ public static int linearSearch(Object[] f, Object a) { // Initialisierung int res = -1; // Iteration for (int i = 0; i < f.length; i++) { // Trivialfall: Suche erfolgreich if (f[i].equals(a)) return (res = i); } return res; } } W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -5- Springer-Verlag, ISBN 3-540-20958-1

Lineare Suche mit Wächter Iteration der linearen Suche in while-Notation while ( i< f.length && !(f[i].equals(a)) ) i++; Zwei Tests je Iteration erforderlich Test i< f.length überflüssig, falls a in f vorkommt Daher Einführen eines Wächters (engl. Sentinel) Füge a an das Ende von f an Nach while-Schleife Prüfung ob ein a in f oder der Wächter gefunden wurde (Erkennung anhand von Zähler i) Erfinder des Wächters: N. Wirth Motivation: mit traditionellen Programmiersprachen wird Ende von Reihung nicht automatisch erkannt W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -6- Springer-Verlag, ISBN 3-540-20958-1

Lineare Suche in Java ohne Wächter Java macht Test (array bounds check) automatisch Java erzeugt Ausnahme (exception) IndexOutOfBoundsException falls f[i] ungültigen Index i enthält Anstelle eines Wächters die Ausnahme auffangen: try{ while (!f[i].equals(a)) i++; // now f[i].equals(a) return(i); } catch (IndexOutOfBoundsException ioobe) { return(-1); } Kein doppelter Test, dafür aber schlechter Stil: Reguläre Ergebnisse nie durch Exceptions generieren! W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -7- Springer-Verlag, ISBN 3-540-20958-1

Lineare Suche: Komplexität I Aufwand: k1 Operationen (Ops) für Initialisierung k2 Ops für Test auf Trivialfall k3 Ops für Reduktion und Rekursion (Schleifenverwaltung) Maximal n=f.length Iterationen, also k1 + n (k2 + k3) Ops maximal Wenn a erstes Element von f k1 + k2 + k3 Ops minimal Konstanten k1 , k2 , k3 rechnerabhängig, daher asymptotischer Aufwand O(n) W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -8- Springer-Verlag, ISBN 3-540-20958-1

Lineare Suche: Komplexität II Aufwand im Mittel: Modellierung der Anfragen: Nach jedem Objekt a in f wird gleich oft gefragt Anzahl der Schleifendurchläufe im Mittel Die asymptotische Komplexität von linearer Suche ist linear (im worst case als auch im Mittel) Bemerkung: hier wurde wahlfreier Zugriff auf Elemente in f mit O(1) Ops angenommen (random access) Bei verlinkten Listen naiver Zugriff in O(n) Ops Damit ergibt sich Komplexität von O(n2) Zugriff in O(1) Ops und Gesamtkomplexität von O(n) möglich, wenn Zeiger auf f[i] gehalten wird 1 + 2 + . . . + n n · (n + 1) n + 1 n n · 2 2 = =  Schleifendurchgänge. W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -9- Springer-Verlag, ISBN 3-540-20958-1

Divide-and-Conquer-Suche I Teile und Herrsche: Zerlege Problem in (kleinere) Teilprobleme Löse Teilprobleme (i.d.R. rekursiv) Füge Lösungen zu Gesamtlösung zusammen Binäre Suche: Wähle eine Position p, die die Folge in linke und rechte Teilfolge zerlegt Sinnvoll wenn Folge sortiert: dann muss nur in einer der beiden Teilfolgen weiter gesucht werden Dazu müssen Objekte auch eine Vergleichsoperation unterstützen also z.B. vom Referenztyp Comparable sein W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -10- Springer-Verlag, ISBN 3-540-20958-1

Divide-and-Conquer-Suche II public class SearchClass { // ... /** * Anforderungen: * f: aufsteigend sortierte Folge von Elementen * f[i], i>=0. * a: gesuchtes Element in f. * l: linker Rand der zu * durchsuchenden Teilfolge von f; * 0 <= l <= i <= r. * r: rechter Rand der zu * 0 <= l <= i <= r. * Zusicherungen: * res == p, falls f[p] == a und l <= p <= r, * res == -1, sonst. */ W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -11- Springer-Verlag, ISBN 3-540-20958-1

Divide-and-Conquer-Suche III public static int binarySearch(Comparable[] f, Comparable a, int l, int r) { // (1) Initialisiere int p = (l+r)/2; int c = f[p].compareTo(a); // (2) Trivialfall: Element gefunden if (c == 0) return p; // (3) Trivialfall: Element nicht vorhanden if (l == r) return -1; // (4) Rekursion if (c > 0) { if (p > l) return binarySearch(f, a, l, p-1); else return (-1); } else { if (p < r) return binarySearch(f, a, p+1, r); Spezialfall: Wahl vom p=l oder p=r ergibt die lineare Suche in rekursiver Form W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -12- Springer-Verlag, ISBN 3-540-20958-1

Binäre Suche: Komplexität Spezialfall: Wahl von p=l oder p=r ergibt die lineare Suche in rekursiver Form Minimaler Aufwand wenn f[p]=a für p=(l+r)/2 Tbest(n)  O(1) Maximaler Aufwand wenn a nicht in f vorkommt Tworst(n) = k + Tworst(n/2)= 2k + Tworst(n/4)= . . . = k log2(n) + Tworst(1) = klog2(n) + k1 + k2 + k3. Das ergibt asymptotische Komplexität von O(log n) W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -13- Springer-Verlag, ISBN 3-540-20958-1

Cross-over Point Divide-and-Conquer-Verfahren (D&C) haben relativ großen Verwaltungsaufwand (Overhead) bzw. große Proportionalitätskonstanten in O()-Komplexitäten Greedy-Verfahren haben kleinen Overhead Es gibt i.d.R. einen Übernahmepunkt (Cross-over Point) zwischen beiden Verfahren Liegt heute typischerweise bei n=16 bis 32 Kann experimentell bestimmt werden W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -14- Springer-Verlag, ISBN 3-540-20958-1

Kombinationsverfahren Benutze rekursives Divide-and-Conquer-Verfahren um große Probleme zu behandeln bis Größe kleiner als Cross-over Punkt Nutze Greedy-Verfahren, um kleine Probleme zu lösen Spezielle, schnelle Implementierungen von Greedy-Verfahren möglich, da nur sehr kleine Probleme behandelt werden müssen Sehr große Beschleunigungen möglich, da sehr viele kleine Problem zu lösen sind? W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -15- Springer-Verlag, ISBN 3-540-20958-1

Kombinationsverfahren: Analyse und Design I Problem: Ab welcher Problemgröße soll das greedy-Verfahren eingesetzt werden? Analyse: Modelliere oder bestimme empirisch Laufzeiten Td(n), Tg(n), T´m(n) von D&C, greedy- und Kombinationsverfahren mit greedy-Einsatz bei n=2m Beispielansätze (etwa bei Sortierverfahren): Td(n) = k´n + 2 Td(n/2) mit k´= 1 (Normierung) ergibt Td(n) = n (log2 n + 1) Tg(n) = k n2 Bei k=0.1 Cross-over point zwischen 64 und 128 n=32: Tg(n) = 32*32*0.1 = 102.4; Td(n) = 32(5+1) = 192 n=64: Tg(n) = 64*64*0.1 = 409.6; Td(n) = 64(6+1) = 448 n=128: Tg(n) = 128*128*0.1 = 1638.4; Td(n) = 128(7+1) = 1024 W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -16- Springer-Verlag, ISBN 3-540-20958-1

Kombinationsverfahren: Analyse und Design II Modell liefert Anzahl von Operationen T´m(n) = n (log2 n - m+ k 2m) Also: Minimiere T´m(n) durch Minimierung von f(m) = - m+ k 2m Extremwertrechnung der Analysis (löse f´(m)=0) liefert für k = 0.1 den Wert m ≈ 3.9 Bei n = 220 (= 1 Mega), k = 0.1, m = 4 erhält man Td(220) = 21 Mops (mega Operationen) Tg(220) ≈ 100 000 Mops T´4(220) ≈ 17.6 Mops (16% Einsparung gegen D&C) W. Küchlin, A. Weber: Einführung in die Informatik – objektorientiert mit Java -17- Springer-Verlag, ISBN 3-540-20958-1