Datenstrukturen und Algorithmen VO 708.031 05.12.2013 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 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 elmar.rueckert@igi.tugraz.at 22 Danke für Ihre Aufmerksamkeit! Bis zum nächsten Mal. (Donnerstag, 12. Dez. 2013, 11:15, i13) 05.12.2013 elmar.rueckert@igi.tugraz.at 23