Datenstrukturen und Algorithmen VO 708.031 05.12.2013 [email protected] 1 Struktur der Vorlesung unterteilt in 5 Kapitel 1. Einführung u. Grundlagen 2. Algorithmische Grundprinzipien 3. SorGerverfahren 4. Suchen in linearen Feldern 5. Suchen in Bäumen 05.12.2013 [email protected] 2 Suchverfahren Verfahren, das in einem Suchraum nach Mustern oder Objekten mit besGmmten EigenschaQen sucht. Anwendungsbereiche für Suchverfahren: – Suchen in Datenbanken, Google‐Search, DNA‐Tests – Suchen nach ähnlichen Mustern: z.B. Viren, Malware – Bilderkennungsverfahren: Suchen nach PaXern – Suchen in Textdateien, ... Inhalt der VO: einfache Suchverfahren auf Listen und später auf Bäumen siehe auch AuD VO, WS10/11, C. Eckert, TU München 05.12.2013 [email protected] 3 In dieser Vorlesung 1. StaGsche, kleine Menge, selten SuchoperaGon notwendig: • Lösung: Feld als Datenstruktur und sequenGelles Suchen: O(n) 2. StaGsche, kleine Menge, häufige Zugriffe/SuchoperaGonen • Lösung: VorsorGertes Feld in O(n log n) erstellen und binäre Suche mit O(log n) verwenden. siehe auch AuD VO, WS10/11, C. Eckert, TU München 05.12.2013 [email protected] 4 In den nächsten VOs 3. Dynamisch, große Menge von Elementen, z.B. Personaldaten • Lösung: Baum als dynamische Datenstruktur (einfügen, löschen), organisiert als binärer Suchbaum. Suchen in O(h), wobei h die Baumhöhe ist. 4. Dynamisch, große Menge, viele, effiziente Zugriffe notwendig z.B. große Produktdatenbanken, Suchmaschinen, … • Lösung: Binärer Suchbaum, der eine möglichst geringe Höhe h garanGert. Sollte möglichst balanziert sein, z.B. 2‐4 Baum, Rot‐Schwarz Baum usw. siehe auch AuD VO, WS10/11, C. Eckert, TU München 05.12.2013 [email protected] 5 4. Suchen in linearen Feldern • Ohne VorsorGerung, z.B. A=[34, 4, 99, 13, 42] – SequenGelle Suche – Selbstanordnende Felder • Mit VorsorGerung, z.B. A=[4, 13, 34, 42, 99] – InterpolaGonssuche – Binärsuche – QuadraGsche Binärsuche – Fastsearch 05.12.2013 [email protected] 6 4. Suchen in linearen Feldern 1. Ohne VorsorDerung, z.B. A=[34, 4, 99, 13, 42] – SequenGelle Suche – Selbstanordnende Felder Wir wollen in einer Datenmenge (lineares Feld A[1..n]) nur Suchen (staGscher Fall, kein SorGeren, Einfügen bzw. Enpernen) 05.12.2013 [email protected] 7 SequenGelle Suche • Durchsuche das Feld von Anfang bis Ende T(n) = Θ(n) im schlechtesten Fall, bzw. im miMleren Fall, wenn jedes Element gleich oQ gesucht wird 05.12.2013 [email protected] 8 SequenGelle Suche • Verbesserung der erwarteten Laufzeit: – Speichere die Elemente A[i] nach ihrer Zugriffswahrscheinlichkeit pi: p1 ≥ p2 ≥ p3 … • Gleichverteilung: = 1 ! ( )= ( ) • ExponenGelle Verteilung: pi = 1 ⇒ T (n) = O(1) i 2 – Zugriffswahrscheinlichkeiten pi müssen bekannt sein 05.12.2013 [email protected] 9 Selbstanordnende Felder • Wenn pi unbekannt: verschiebe Elemente, die häufiger gesucht werden, nach vorne. • Bsp. 3er HeurisDken: Wird auf A[i] zugegriffen, – vertausche A[i] mit A[1]: – vertausche A[i] mit A[i‐1]: – Zählen der Zugriffe u. dementsprechend das Feld sorGeren Im MiXel sind diese Methoden zumindest halb so gut wie die Anordnung nach fallender Zugriffswahrscheinlichkeit bei bekannten pi. Achtung: Ist pi gleichverteilt, dann sind die HeurisGken ineffizienter als die sequenGelle Suche. 10 4. Suchen in linearen Feldern 2. Mit VorsorDerung, z.B. A=[4, 13, 34, 42, 99] – InterpolaGonssuche – Binärsuche – QuadraGsche Binärsuche – Fastsearch Input: Feld A[1..n] mit A[1] ≤ A[2] ≤ … ≤ A[n] Output: Index t für das gesuchte Element x (A[1] ≤ x ≤ A[n]) Falls x ∉ A, wird als Ergebnis ‐1 ausgegeben 05.12.2013 [email protected] 11 Binärsuche (Binary BisecDon Search) Teile das Feld in zwei gleich große HälQen und vergleiche mit dem miXleren Element; falls ident → gefunden, sonst suche entweder in der linken (kleiner) oder rechten HälQe (größer) weiter rekursive Version Aufruf: BINSUCH(1,n,x) T(n) = T(n/2) + O(1) ⇒ T(n) = O(log n) 05.12.2013 [email protected] 12 Binärsuche (Binary BisecDon Search) Teile das Feld in zwei gleich große HälQen und vergleiche mit dem miXleren Element; falls ident → gefunden, sonst suche entweder in der linken (kleiner) oder rechten HälQe (größer) weiter iteraGve Version Aufruf: BINSUCH_ITERATIV(1,n,x) 05.12.2013 [email protected] 13 InterpolaGonssuche Suche nicht in der MiXe, sondern dort, wo das Element „sein sollte“, unter der Annahme, dass die Werte linear steigen A[bis] x A[von] von 05.12.2013 t [email protected] bis 14 InterpolaGonssuche Suche nicht in der MiXe, sondern dort, wo das Element „sein sollte“, unter der Annahme, dass die Werte linear steigen rekursive Version Aufruf: INTSUCH(1,n,x) Erwartete Laufzeit: T(n) = O(log log n) Worst‐case: T(n) = O(n) 05.12.2013 [email protected] 15 QuadraGsche Binärsuche Idee: Verhindere den worst‐case der InterpolaGonssuche durch Anwendung der InterpolaGonssuche auf Teilfelder der Länge n n • Berechne Index t durch InterpolaGonssuche: • Suche von t aus das korrekte Teilfeld (in Sprüngen von ) und suche von n dort aus weiter: IdenGfizieren des korrekten Teilfeldes in O(1) erwarteter Zeit 05.12.2013 [email protected] 16 QuadraGsche Binärsuche rekursive Version Aufruf: QUADSUCH(1,n,x) Erwartete Laufzeit: (Teilfeld in O(1) Zeit) T(n) = O(log log n) Worst‐case: (alle Teilfelder probiert) T(n) = O( ) n 05.12.2013 [email protected] 17 FastSearch KombinaGon von Binärsuche und InterpolaGonssuche mit O(log log n) im miMleren Fall und O(log n) im schlechtesten Fall (zumindest immer so gut wie das bessere der beiden Verfahren) A von mB Binärsuche 05.12.2013 B C mI bis Interpolationssuche [email protected] 18 FastSearch KombinaGon von Binärsuche und InterpolaGonssuche mit O(log log n) im miMleren Fall und O(log n) im schlechtesten Fall (zumindest immer so gut wie das bessere der beiden Verfahren) 05.12.2013 [email protected] 19 Laufzeitverhalten der Suchverfahren Mi#lerer Fall Schlechtester Fall O(log n) O(log n) InterpolaGonssuche O(log log n) O(n) QuadraGsche Binärsuche O(log log n) O( ) n „FastSearch“ O(log log n) O(log n) Binärsuche Speicherbedarf: • Rekursive Algorithmen: proporGonal zur Laufzeit (RekursionsGefe) • Itera9ve Algorithmen: O(1) 05.12.2013 [email protected] 20 Laufzeitverhalten der Suchverfahren Beispiel: Anzahl der Vergleiche für 109 Elemente Mi#lerer Fall Schlechtester Fall Binärsuche 30 30 InterpolaGonssuche 5 1.000.000.000 QuadraGsche Binärsuche 5 32.000 „FastSearch“ 10 60 05.12.2013 [email protected] 21 Laufzeitverhalten der Suchverfahren 9 Elemente Beispiel: Anzahl der Vergleiche für 10 Es gibt je einen Zusatzpunkt für eine ImplemenGerung von der quadraDschen Binärsuche bzw. Mi#lerer Fall Schlechtester Fall von Fastsearch Binärsuche Abgabe bis zum 12.12.2013 InterpolaGonssuche 30 30 5 1.000.000.000 • Codeausdruck (nur der Alg. kein Plot oder sonsGge QuadraGsche Binärsuche 5 32.000 FunkGonen) „FastSearch“ 10 60 • Grafik mit einem Vergleich der Laufzeiten zu einem beliebigen vorhandenen Suchalgorithmus (DiskuGere das Ergebnis im Zusammenhang mit SorGeren ohne VorsorGerung). 05.12.2013 [email protected] 22 Danke für Ihre Aufmerksamkeit! Bis zum nächsten Mal. (Donnerstag, 12. Dez. 2013, 11:15, i13) 05.12.2013 [email protected] 23