Motivation Überblick

Ähnliche Dokumente
Termine für Übungstests. Kap. 3 Sortieren HeapSort ff Priority Queues. Motivation. Überblick. Analyse SiftDown

Kap. 3: Sortieren. Überblick. Unser Sortierproblem. Motivation. Laufzeitmessung. Warum soll ich hier bleiben? Sortierverfahren sind WICHTIG!!!

Alle bislang betrachteten Sortieralgorithmen hatten (worst-case) Laufzeit Ω(nlog(n)).

2 Sortieren durch Vergleichen Eingabefolge a 1, a 2,..., a n 2, 1, 3 Sortieralg. Für festes n ist ein vergleichsbasierter Sortieralg. charakterisiert

Heapsort / 1 A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8]

8.1.3 Operation Build-Max-Heap Operation zur Konstruktion eines Heaps Eingabe: Feld A[1..n], n = länge(a) BUILD-MAX-HEAP (A)

Technische Universität München

Untere Schranke für allgemeine Sortierverfahren

7. Übung zu Algorithmen I 1. Juni 2016

Kapitel 8 Fortgeschrittene Sortieralgorithmen

Übung Algorithmen und Datenstrukturen

Vorlesung Informatik 2 Algorithmen und Datenstrukturen. (25 Sortieren vorsortierter Daten)

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen SS09. Foliensatz 15. Michael Brinkmeier. Technische Universität Ilmenau Institut für Theoretische Informatik

Datenstrukturen, Algorithmen und Programmierung 2

Bucketsort. Korrektheit. Beispiel. Eingabe: Array A mit n Elementen im Bereich [0,1) Annahme: die Elemente sind in [0,1) gleichverteilt.

Algorithmen und Datenstrukturen

2.2 Allgemeine (vergleichsbasierte) Sortierverfahren

Kap. 4.7 Skiplisten. 14./15. VO DAP2 SS /16. Juni 2009

Tutoraufgabe 1 (Sortieralgorithmus):

Aufgabe (Schreibtischtest, Algorithmenanalyse)

Algorithmen und Datenstrukturen 1

Motivation Binäre Suchbäume

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen 1

Das Suchproblem. Gegeben Menge von Datensätzen. Beispiele Telefonverzeichnis, Wörterbuch, Symboltabelle

7 Sortieren in linearer Zeit

Datenstrukturen und Algorithmen. 7. Suchen in linearen Feldern

Programmieren I. Kapitel 7. Sortieren und Suchen

Datenstrukturen, Algorithmen und Programmierung 2

7. Sortieren Lernziele. 7. Sortieren

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Heaps. Vorlesung 8: Heapsort (K6) Joost-Pieter Katoen. 7. Mai 2015

Abgabe: (vor der Vorlesung) Aufgabe 2.1 (P) O-Notation Beweisen Sie die folgenden Aussagen für positive Funktionen f und g:

Prof. Dr. Margarita Esponda

Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Spezielle Sortierverfahren Autor: Sven Schuierer

Kap. 6.6: Kürzeste Wege

4. Sortieren 4.1 Vorbemerkungen

Kap. 4.4: B-Bäume Kap. 4.5: Dictionaries in der Praxis

Übung Algorithmen I

Algorithmen und Datenstrukturen 1-3. Seminar -

Denition: Rang eines Elements e einer Folge s = Position von e in sort(s) (angefangen bei 1). Frage: warum ist r nicht notwendig eindeutig?

8. Sortieren II. 8.1 Heapsort. Heapsort. [Max-]Heap 6. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften

Übung Algorithmen I

f 1 (n) = log(n) + n 2 n 5 f 2 (n) = n 3 + n 2 f 3 (n) = log(n 2 ) f 4 (n) = n n f 5 (n) = (log(n)) 2

Suchen und Sortieren Sortieren. Heaps

NAME, VORNAME: Studiennummer: Matrikel:

Datenstrukturen, Algorithmen und Programmierung 2

Kap. 4.2: Binäre Suchbäume

Adnan Kadric Kevin Kandler Seminararbeit Sommersemester 2017

Übung: Algorithmen und Datenstrukturen SS 2007

Sortieralgorithmen. Jan Pöschko. 18. Januar Problemstellung Definition Warum Sortieren?... 2

Grundlagen: Algorithmen und Datenstrukturen

Informatik II Prüfungsvorbereitungskurs

Algorithmen und Datenstrukturen Heapsort

Übersicht. Einfache Verfahren MergeSort Untere Schranke QuickSort Selektieren Schnelleres Sortieren Externes Sortieren. 6 Sortieren.

Klausur Algorithmen und Datenstrukturen SS August Arbeitszeit 90 min

Kapitel 2: Sortier- und Selektionsverfahren Gliederung

5. Übungsblatt zu Algorithmen I im SoSe 2016

Datenstrukturen & Algorithmen

Algorithmen und Datenstrukturen 1 VL Übungstest WS November 2007

Algorithmen I. Prof. Jörn Müller-Quade Institut für Theoretische Informatik Web:

Algorithmen und Datenstrukturen. Kapitel 3: Sortierverfahren. Skript zur Vorlesung. Algorithmen und Datenstrukturen

2 Sortieren. Beispiel: Es seien n = 8 und a = i : a i : ϕ(i) : a ϕ(i) :

1. Übungsblatt zu Algorithmen II im WS 2011/2012

Algorithmen und Datenstrukturen

lim log 2n n = > 0 Da es einen Limes gibt, gibt es auch einen Limes inferior, der gleich diesem Limes ist.

Datenstrukturen und Algorithmen

Kapitel 6 Elementare Sortieralgorithmen

Suchen und Sortieren

Algorithmen und Datenstrukturen

Kapitel 2. Sortieren. Adressenverwaltung (lexikographisch) Treerlisten bei Suchanfragen (Relevanz) Verdeckung (z-koordinate) ...

Programmiertechnik II

Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Einfache Sortierverfahren Autor: Stefan Edelkamp

Programmiertechnik II

Übungsblatt 1. f(n) = f(n) = O(g(n)) g(n) = O(f(n)) Zeigen oder widerlegen Sie: 3 n = Θ(2 n ) Aufgabe 1.2 Gegeben sei die folgende Funktion:

Übungsklausur Algorithmen I

Heap-Sort und andere Sortieralgorithmen

Datenstrukturen und Algorithmen 2. Klausur SS 2001

Informatik B Sommersemester Musterlösung zur Klausur vom

Christoph Niederseer, Michaela Mayr, Alexander Aichinger, Fabian Küppers. Wissenschaftl. Arbeitstechniken und Präsentation

Algorithmen I. Tutorium 1-3. Sitzung. Dennis Felsing

Quicksort ist ein Divide-and-Conquer-Verfahren.

Interne Sortierverfahren

Algorithmen und Datenstrukturen

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Divide-and-Conquer. Vorlesung 9: Quicksort (K7)

1. Musterlösung. Problem 1: Average-case-Laufzeit vs. Worst-case-Laufzeit

Informatik IV SS 2006 Institut für Informatik, Abt. I

Beispiellösung zu den Übungen Datenstrukturen und Algorithmen SS 2008 Blatt 5

Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer) Folien: Suchverfahren Autor: Stefan Edelkamp / Sven Schuierer

8. A & D - Heapsort. Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS

Algorithmen und Datenstrukturen 1 Kapitel 5

Tutoraufgabe 1 (Starke Zusammenhangskomponenten):

Build-Max-Heap. Build-Max-HeappAq. Satz Nach Ablauf von Build-Max-Heap ist A ein Heap. Build-Max-Heap hat Laufzeit Opnq.

Grundlagen der Programmierung

Vorlesung Datenstrukturen

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 9. Sortieren

Einführung in die Informatik I Kapitel II.3: Sortieren

Lineare Kongruenzgeneratoren und Quicksort

Teil VII. Hashverfahren

Transkript:

Kap. ff: Untere Laufzeitschranke und Lineare Verfahren Professor Dr. Lehrstuhl für Algorithm Engineering, LS Fakultät für Informatik, TU Dortmund 8. VO DAP SS 009. Mai 009. Übungstest Termin: Di 9. Mai 009, Beginn: : Uhr (bitte um :00 Uhr anwesend sein) Ort: im Audi-Max (statt Vorlesung) Dauer: 0 Minuten Stoff: aus VO-Folien, Skript und Übungen bis Heap-Sort inklusive.. Realisierung von Priority Queues durch Heaps Ab ca. :0 Uhr: Vorlesung bis : Uhr Motivation Überblick Warum soll ich hier bleiben? Wir erfahren ein scheinbares Paradoxon Was genau ist damit gemeint? Gut aufpassen:-) Zuerst: Eine untere Laufzeitschranke für allgemeine Sortierverfahren Dann: Schnelle angepasste Sortierverfahren, die die obige Schranke schlagen Worst-Case Laufzeiten Θ(n ): Insertion-, Quick-, Selection-Sort Wie schnell kann ein allgemeines Sortierverfahren das Sortierproblem im Worst-Case bestenfalls lösen? Θ(n log n): Heap-Sort, Merge-Sort Besser? O(n)? NEIN!

Sortierproblem a a a n Permutation der Eingabeelemente Allgemeine Sortierverfahren Vergleich zweier Elementschlüssel Vertauschen zweier Elemente KEIN WISSEN ÜBER SCHLÜSSEL! a σ a σ a σn n! Permutationen 8 Allgemeine Sortierverfahren Allgemeine Sortierverfahren??? a m a l a k a m a l a k 9 0 Vergleichsentscheidung Entscheidungsfolge a m a k a a a a a a a a a m a k a k a m a a

Entscheidungsbaum Entscheidungsbaum Alle möglichen Entscheidungen des Algorithmus Knoten entspricht Vergleichsoperation Blatt ist Permutation der Eingabe Jede Permutation ist als Ergebnis möglich n! Blätter in Binärbaum Alle Permutationen Worst-Case Schlüsselvergleiche = Längster Weg von Wurzel zu Blatt Entscheidungsbaum Untere Laufzeitschranke Untere Schranke Laufzeit untere Schranke für Baumtiefe t Sei n. Ein Binärbaum der Tiefe t hat max. t Blätter t n! n t log n! = log i n/ log (n/) i= t = Ω(n log n) Jedes allgemeine Sortierverfahren benötigt mindestens Worst-Case Laufzeit Ω(n log n) Informationstheoretische untere Schranke Heap-Sort und Merge-Sort sind asymptotisch optimal Kap..: Lineare Sortierverfahren Hier: Elemente sind in Feld A[..n] Zugriffe auf Schlüssel via A[i] z.b.: Lineare Sortierverfahren Annahmen über Schlüsselmenge! Festes Alphabet (endlich) Folgen von Ziffern, Zeichen Ganze Zahlen Datum (Tag, Monat, Jahr) Nutze arithmetische Eigenschaften der Schlüssel, keine Vergleiche! 8 9

a a (Sortieren durch Fachverteilung) 0 a n Schlüssel aus festem Alphabet der Größe k Schlüssel als Index. Verteilungsphase. Sammelphase Schlüsselwerte Buckets für mögliche Schlüsselwerte Schlüssel als Index Phase I: Verteilungsphase Schlüssel in entsprechendes Bucket hängen Buckets als Liste/Queue Phase II: Sammelphase Durchlauf der Buckets nach aufsteigendem Index Hintereinanderhängen der Bucketlisten 0 Pseudo-Code von BucketSort procedure BUCKETSORT(ref A) { () Initialisiere Bucketfeld B // Größe k () for i :=,.., n do { // Verteilung () B[A[i]].put(A[i]) // Element in Bucketqueue () } () i := // Sammeln () for j := 0,.., k- do { //Jedes Bucket durchlaufen () while not B[j].isEmpty do { (8) A[i] := B[j].get() (9) i:= i+ Verteilungsphase Sammelphase 0 (0)}}} Variante für gleichverteilte Zahlen aus [0, ): n gleich große Buckets Lege A[i] in B[ na[i] ] Ungleiche Schlüssel in Bucket Insertion-Sort, erwartete Laufzeit: linear, weil nur weniger Zahlen pro Bucket (wegen Gleichverteilung) sehr einfach auch für reelle Zahlen Anpassung an Schlüssel (Indexmapping) Bucket-Feld über Wertebereich nur sinnvoll, falls dies nicht zu groß ist Stabil Laufzeit Θ(n+k)

Counting-Sort (Sortieren durch Abzählen, H. Seward 9) Schlüssel sind ganze Zahlen aus [0..k-] Nutze Werteanzahl als Index,,,,, 8,,,,,, 8,,, Counting-Sort Element mit Schlüssel i steht rechts von allen Elementen mit Schlüssel < i Schema: Zähle Vorkommen von Zahlen (Schlüssel) Summiere für Zahl i alle Vorkommen von Zahlen i Platziere Element mit Schlüssel i entsprechend 8 Pseudo-Code procedure COUNTINGSORT(ref A) { () Initialisiere Zählfeld C mit 0 // Größe k () for i := to n do C[A[i]] := C[A[i]]+//Zähle an Index () for i := to k- do C[i] := C[i]+C[i-] //Summiere auf () for i := n to do { () B[C[A[i]]] := A[i] // Eintragen in B () C[A[i]] := C[A[i]] // Runterzählen () } (8) Kopiere B nach A (9) } Beispiel Counting-Sort n = 0, k = A 9 8 0 8 9 0 C 0 0 0 n = 0, k = Beispiel Counting-Sort n = 0, k = Beispiel Counting-Sort A 9 8 A 9 8 0 8 9 0 0 8 9 0 C 0 8 9 9 0 C 0 8 9 9 B 8 9

Counting-Sort Sehr einfach Schlüssel sind Zahlen Schlüssel und Anzahlen als Indizes Zählfeld der Größe k Nur sinnvoll falls nicht zu groß, z.b. Graphenalgorithmen Stabil Laufzeit Θ(n+k) Radix-Sort Schlüssel: Zahlen aus [0..b d -], Ziffernfolge zu einer Basis b Sortiere einzelne Ziffern der Schlüssel Bsp. Postleitzahlen: Radix-Sort Pseudo-Code Schema: Schlüssel Ziffernfolge Sortiere Ziffern einzeln und stabil von hinten nach vorne Nach wichtigster = erster Ziffer wird zuletzt sortiert Stabilität garantiert Erhalt der Vorsortierung nach i Ziffern procedure RADIXSORT(ref A, int digits) { for i := 0 to digits- do Benutze stabiles Sortierverfahren um A nach Stelle i zu sortieren } Beispiel Radix-Sort Radix-Sort 9 9 Laufzeit abhängig von stab. Sortierverf. Mit Counting-Sort: Θ(d(n+b)) Für d konstant, b = O(n): Linear in n 9 9 Basis Zifferextraktion, b = m Bitmanipulation abhängig von Software-/ Hardware-Unterstützung Nicht für kleine Eingabefolgen b << n 8 0

Varianten geht auch mit Zeichenfolge: Sortierung von Namen MSD: Most Significant Digits zuerst spare Laufzeit falls Daten schon nach wenigen Ziffern vollständig sortiert Mehrwege-Quick-Sort LSD: Least Significant Digits zuerst, aber nur auf z.b. erster Hälfte der Ziffern, Rest Insertion-Sort