Übung Algorithmen und Datenstrukturen

Ähnliche Dokumente
Übung Algorithmen und Datenstrukturen

Aufgabe (Schreibtischtest, Algorithmenanalyse)

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

Algorithmen und Datenstrukturen

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

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

4. Sortieren 4.1 Vorbemerkungen

Kapitel 6 Elementare Sortieralgorithmen

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)

Übung Algorithmen und Datenstrukturen

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

Algorithmen und Datenstrukturen 1-3. Seminar -

Übung: Algorithmen und Datenstrukturen SS 2007

Übung Algorithmen und Datenstrukturen

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

Programmieren I. Kapitel 7. Sortieren und Suchen

Kapitel 8 Fortgeschrittene Sortieralgorithmen

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

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

Übung Algorithmen und Datenstrukturen

Übung Algorithmen I

Interne Sortierverfahren

2.2 Allgemeine (vergleichsbasierte) Sortierverfahren

Abschnitt: Algorithmendesign und Laufzeitanalyse

Übung Algorithmen und Datenstrukturen

Ü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:

Tutoraufgabe 1 (Sortieralgorithmus):

Übung Algorithmen I

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

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

Prof. Dr. Margarita Esponda

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

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

Algorithmen und Datenstrukturen 1

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

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

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

Algorithmen und Datenstrukturen

Sortieren durch Einfügen (Insertion Sort) fügt die restlichen Elemente nach und nach in die bereits sortierte Liste der abgearbeiteten Zahlen.

Tutoraufgabe 1 (Sortieren): Lösung: Datenstrukturen und Algorithmen SS14 Lösung - Übung 4

7. Übung zu Algorithmen I 1. Juni 2016

Quicksort ist ein Divide-and-Conquer-Verfahren.

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

Grundlagen der Programmierung 2. Sortierverfahren

Pro Informatik 2009: Objektorientierte Programmierung Tag 17. Marco Block-Berlitz, Miao Wang Freie Universität Berlin, Institut für Informatik

Humboldt-Universität zu Berlin Berlin, den Institut für Informatik

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

Untere Schranke für allgemeine Sortierverfahren

Übungsklausur Algorithmen I

Datenstrukturen und Algorithmen 2. Klausur SS 2001

Algorithmen und Datenstrukturen 1

Übung Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

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

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

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

Algorithmen und Datenstrukturen VO 3.0 Vorlesungsprüfung 19. Oktober 2007

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

Sortieralgorithmen. Selection Sort

Übungsklausur Algorithmen I

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit

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

5. Übungsblatt zu Algorithmen I im SoSe 2016

Datenstrukturen und Algorithmen

Algorithmen und Datenstrukturen

Informatik II: Algorithmen & Datenstrukturen. Blättern Sie nicht um bevor Sie dazu aufgefordert werden!

JAVA - Suchen - Sortieren

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

2. Grundlagen. Beschreibung von Algorithmen durch Pseudocode. Korrektheit von Algorithmen durch Invarianten.

Algorithmen und Datenstrukturen II

Sortierverfahren für Felder (Listen)

NAME, VORNAME: Studiennummer: Matrikel:

INSTITUT FÜR THEORETISCHE INFORMATIK, PROF. SANDERS

Algorithmen und Datenstrukturen

Grundlagen: Algorithmen und Datenstrukturen

Übung Algorithmen und Datenstrukturen

Grundlagen: Algorithmen und Datenstrukturen

Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1

Algorithmen und Datenstrukturen

Aufgabe 8. 1 Arbeitsweise illustrieren. 2 Korrektheitsbeweis führen. 3 Laufzeitanalyse durchführen.

Probeklausur Computerorientierte Mathematik II

Ordnen Sie die folgenden Funktionen nach ihrer asymptotischer Komplexität in aufsteigender Reihenfolge: i=1 4i + n = 4 n. i=1 i + 3n = 4 ( n(n+1)

Datenstrukturen und Algorithmen. 7. Suchen in linearen Feldern

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Algorithmen und Datenstrukturen

In C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht:

Suchen und Sortieren

Grundlagen der Informatik

Wiederholung ADT Menge Ziel: Verwaltung (Finden, Einfügen, Entfernen) einer Menge von Elementen

Kapitel 9. Komplexität von Algorithmen und Sortieralgorithmen

Transkript:

Übung Algorithmen und Datenstrukturen Sommersemester 2017 Patrick Schäfer, Humboldt-Universität zu Berlin

Agenda: Sortierverfahren 1. Schreibtischtest 2. Stabilität 3. Sortierung spezieller Arrays 4. Untere Schranke Nächste Woche: Vorrechnen (first-come-first-served) Gruppe 5 13-15 Uhr https://dudle.inf.tu-dresden.de/algodatgr5u2/ Gruppe 6 15-17 Uhr https://dudle.inf.tu-dresden.de/algodatgr6u2/ Beim Vorrechnen von Programmieraufgaben bitte Source-Codes erklären. Übung: Vorlesung: https://hu.berlin/algodat17 http://hu.berlin/vl_algodat17 2

Allgemeine (vergleichsbasierte) Sortierverfahren Ein allgemeines Sortierverfahren ist ein Sortierverfahren, welches die zu sortierenden Elemente nur vergleichen kann, um die Anordnung zu bestimmen, und ansonsten keinerlei Eigenschaften der Elemente ausnutzt. Welche Algorithmen aus der Vorlesung sind (keine) allgemeine Sortierverfahren? 1. Selection Sort 2. Insertion Sort 3. Bubble Sort 4. Merge Sort 5. Quick Sort 6. Bucket Sort 5

Selection Sort Insertion Sort Comps worst case avg. case best case Additional space Moves (wc / ac) O(n 2 ) O(n 2 ) O(1) O(n) O(n 2 ) O(n) O(1) O(n 2 ) Bubble Sort O(n 2 ) O(n) O(1) O(n 2 ) Merge Sort O(n*log(n)) O(n*log(n)) O(n) O(n*log(n)) QuickSort O(n 2 ) O(n*log(n) O(n*log(n) O(log(n)) O(n 2 )/ O(n*log(n)) BucketSort (m= ) O(m*(n+k)) O(n+k) 6

Agenda Sortierverfahren 1. Schreibtischtest 2. Stabilität 3. Sortierung spezieller Arrays 4. Untere Schranke 7

MergeSort Führen Sie einen Schreibtischtest für den Algorithmus MergeSort aus der VL für das Eingabe-Array A= [x, a, b, o, k, j, c, r, g] durch, wobei die Ordnung die alphabetische Ordnung auf den Buchstaben ist. Geben Sie die Zwischenschritte in Form eines Graphen wie in der VL an. 8

Algorithmus MergeSort(A, l, r) Input: Array A, l linke und r rechte Grenze Output: Sortiertes Array A 1: if l<rthen 2: m := (r l) div 2; # sortiere beide Hälften 3: mergesort(a, l, l + m); 4: mergesort(a, l + m +1,r); 5: merge(a, l, l + m, r); # Zusammenführen der sortieren Listen 6: end if 7: return A; Zerlegt das Array in zwei gleichgroße Hälften (Zeilen 2-4). Fügt die sortierten Hälften im Reißverschlussverfahren zusammen (Zeile 5). Algorithmus Merge(A, l, m, r) Input: Array A, l, m und r Intervall-Grenzen Output: Sortiertes Array A 1: B := array[1..r l + 1]; 2: i := l; # Anfang der 1. Liste 3: j := m +1; # Anfang der 2. Liste 4: k := 1; # Ergebnisliste 5: while (i <= m) and (j <= r) do 6: if A[i] <= A[j] then 7: B[k] :=A[i ++]; # Aus der 1. Liste 8: else 9: B[k] :=A[j ++]; # Aus der 2. Liste 10: end if 11: k := k +1; 12: end while 13: if i>mthen 14: copy A[j..r] to B[k..k + r j]; 15: else 16: copy A[i..m] to B[k..k + m i]; 17: end if 18: copy B[1..r l + 1] to A[l..r]; #Zurück ins Array A schreiben 19: return A;

QuickSort Führen Sie einen Schreibtischtest für den Algorithmus QuickSort aus der VL für das Eingabe-Array A= [2, 10, 6, 7, 13, 4, 1, 12, 5, 9] durch, wobei Sie als Ordnung die natürliche Ordnung auf den natürlichen Zahlen annehmen. Als Pivot-Element wählen Sie das am weitesten rechts stehende Element des aktuellen Teil-Arrays. Geben Sie den aktuellen Wert von A nach jeder swap-operation an. Unterstreichen Sie jeweils das in diesem Aufruf von divide(a,l,r) betrachtete Teil- Array A[l..r]. 10

Algorithmus QuickSort(A, l, r) Input: Array A, l linke und r rechte Grenze Output: Sortiertes Array A 1: if l<rthen 2: pos := divide(a, l, r); 3: QuickSort(A, l, pos 1); 4: QuickSort(A, pos +1, r); 5: end if 6: return A; Zerlegt das Array in zwei Hälften, basierend auf dem Pivot Element. Links (rechts) sind anschließend alle kleineren (größeren) Elemente. Algorithmus divide(a, l, r) Input: Array A, l linke und r rechte Grenze Output: Sortiertes Array A 1: val := A[r]; 2: i := l; 3: j := r 1; 4: repeat 5: while A[i] <= val and i<rdo 6: i := i +1; # Element kleiner als Pivot 7: end while 8: while A[j] >= val and j>ldo 9: j := j 1; # Element größer als Pivot 10: end while 11: if i<jthen 12: swap(a[i],a[j]); 13: end if 14: until i>= j 15: swap(a[i],a[r]); 16: return i; 11

BucketSort Bei Sortierverfahren, die nicht auf Vergleichen beruhen, kann eine Eingabe im Worst Case in linearer Zeit sortiert werden. BucketSort: O(: ; (% + <)) mit k := Alphabetgröße Σ m := Anzahl Stellen n := A Verteilt die Elemente auf Buckets (Zeilen 3-7). Konkatenation der sortierten Buckets (Lines 9-14). Algorithmus Bucketsort(A, m) Input: Array A mit Einträgen aus Output: Sortiertes Array A m 1: B := Array leerer Queues mit B = ; 2: for i := m downto 1 do # die m-te Stelle ist die Stelle ganz rechts 3: for j := 1 to A do 4: a := A[j]; 5: k := findbucket(a, i); 6: B[k].enqueue(a); 7: end for 8: j := 1; 9: for k := 1 to B do 10: while not B[k].empty() do 11: A[j] :=B[k].dequeue(); 12: j := j +1; 13: end while 14: end for 15: end for 16: return A; 12

BucketSort 13

Agenda Sortierverfahren 1. Schreibtischtest 2. Stabilität 3. Sortierung spezieller Arrays 4. Untere Schranke 14

Aufgabe (Stabilität) Ein Sortierverfahren heißt stabil, wenn Elemente mit gleichen Schlüsseln nach der Sortierung in der gleichen Reihenfolge aufeinander folgen wie vor der Sortierung. Entscheiden Sie, ob die folgenden Verfahren stabil sind. Falls das Verfahren nicht stabil ist, geben Sie eine (bitte möglichst kleine) Instanz als Gegenbeispiel an. Begründen Sie auf jeden Fall Ihre Entscheidung. 1. Position Sort 2. Selection Sort 15

Algorithmus SelectionSort(A) Input: Array A Output: Sortiertes Array A 1: n := A ; 2: for i := 1 to n 1 do 3: min_pos := i; 4: for j := i +1to n do 5: if A[min_pos] >A[j] then 6: min_pos := j; 7: end if 8: end for 9: swap(a[min_pos],a[i]); 10: end for 11: return A; Algorithmus InsertionSort(A) Input: Array A Output: Sortiertes Array A 1: n := A ; 2: for i := 2 to n do 3: j := i; 4: key := A[j]; 5: while (A[j 1] > key) and (j >1) do 6: A[j] :=A[j 1]; 7: j := j 1; 8: end while 9: A[j] :=key; 10: end for 11: return A; Bestimmt das kleinste Element im Rest-Array (Zeile 4-8). Am Ende jeder Iteration der FOR-Schleife (Zeile 1-9) steht das Minimum am Angang des Rest-Arrays. Zählt Anzahl der Elemente, die kleiner oder gleich sind. Am Ende jeder Iteration der FOR- Schleife (Zeile 3-16) steht das aktuelle Element an einer Position, so dass alle kleineren Elemente links und alle größeren Elemente rechts liegen. Fügt das i-te Element sortiert in das Array ein. Am Ende jeder Iteration der FOR-Schleife (Zeile 2-10) ist das Array bis zum i- ten Element sortiert. => Übungsaufgabe 16

Stabilität (PositionSort) Wir zeigen, dass PositionSort stabil ist. Wir betrachten dafür zwei Elemente s 1 und s 2 mit identischem Schlüsselwert s 1 = s 2. Falls s 1 vor s 2 in S steht (Zeile 10), dann hängt die Position von s 1 nicht von s 2 ab (Zeilen 11-12). Damit ist die Position von s 1 in B kleiner als die von s 2. S=[... s 1... s 2...] Falls s 1 nach s 2 in S steht (Zeile 5), wird für die Bestimmung der Position s 2 mitgezählt (Zeilen 6-7). Damit ist die Position von s 1 in B größer als die von s 2 : S=[... s 2... s 1...] 17

Agenda Sortierverfahren 1. Schreibtischtest 2. Stabilität 3. Sortierung spezieller Arrays 4. Untere Schranke 18

Aufgabe (Sortierung spezieller Arrays) Ein allgemeines Sortierverfahren ist ein Sortierverfahren, welches die zu sortierenden Elemente nur vergleichen kann und sonst keinerlei Eigenschaften der Elemente ausnutzt. Beweisen oder widerlegen Sie: Es gibt ein allgemeines Sortierverfahren, welches ein Array von n beliebigen (vergleichbaren) Elementen im Worst Case in Laufzeit Ο % sortiert, falls 1.... in einem ursprünglich sortierten Array zwei beliebige Zahl vertauscht wurden. 2.... die ersten drei Viertel des Arrays bereits vorsortiert sind. 3.... im Array nur Zahlen zwischen 1 und n vorkommen. Hinweis: Für den Fall, dass es ein solches allgemeines Sortierverfahren gibt, können Sie als Beweis die Idee eines konkreten Verfahrens beschreiben. Falls kein solches allgemeines Sortierverfahren existiert, können Sie die in der Vorlesung gezeigte untere Schranke für allgemeine Sortierverfahren nutzen. BucketSort ist kein allgemeines Sortierverfahren! 19

Agenda Sortierverfahren 1. Schreibtischtest 2. Stabilität 3. Sortierung spezieller Arrays 4. Untere Schranke 20

Untere Schranke für allgemeine Sortierverfahren Ein allgemeines Sortierverfahren kann im Worst Case nicht schneller sein als: Ω(% log %) Für ein Array mit n Elementen gibt es n! mögliche Permutationen. In einem Entscheidungsbaum mit %! Blättern, der vollständig balanciert ist, hat ein Blatt eine minimale Tiefe von h log %! : h log %! % 2 log % 2 Ω(% log n) Hinweis: log n! = log(1)+log(2)+ +log(n 1)+log(n) log n 2 + log n +1 + +log(n) 2 log n 2 + log n 2 + +log( n 2 ) = 1 6 IJK 1 6 21

Nächste Woche Nächste Woche: Vorrechnen (first-come-first-served) Gruppe 5 13-15 Uhr https://dudle.inf.tu-dresden.de/algodatgr5u2/ Gruppe 6 15-17 Uhr https://dudle.inf.tu-dresden.de/algodatgr6u2/ Beim Vorrechnen von Programmieraufgaben bitte Source-Codes erklären. Übung: https://hu.berlin/algodat17 Vorlesung: http://hu.berlin/vl_algodat17 22