Informatik II Sortieren

Ähnliche Dokumente
Informatik II Sortieren

Informatik II Sortieralgorithmen

Heapsort. Erstellung eines Heaps

Heapsort. 1. Erstelle aus dem gegebenen Array einen Heap (DownHeap) 2. Tausche erstes und letztes Element des Arrays

(08 - Einfache Sortierverfahren)

damit hätten wir nach Ende der Schleife: "a[0 n-1] enthält nur Elemente aus a[0 n-1], aber in sortierter Reihenfolge".

Heapsort. 1. Erstelle aus dem gegebenen Array einen Max-Heap (DownHeap) 2. Tausche erstes und letztes Element des Arrays

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

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

Elementare Sortierverfahren

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

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

G. Zachmann Clausthal University, Germany

Prof. Dr. Margarita Esponda

Programmiertechnik II

Algorithmen und Datenstrukturen

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

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

Präsenzübung Datenstrukturen und Algorithmen SS 2014

Übung Algorithmen und Datenstrukturen

Kap. 3: Sortieren. 4. VO DAP2 SS April 2009

Kap. 2: Abstrakte Datentypen Kap. 3: Sortieren

A3.1 Sortieralgorithmen

Tutoraufgabe 1 (Sortieralgorithmus):

Übung: Algorithmen und Datenstrukturen SS 2007

Informatik II Hashing

Informatik II Hashing

Datenstrukturen und Algorithmen

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

Algorithmen und Datenstrukturen 1

Zunächst ein paar einfache "Rechen"-Regeln: Lemma, Teil 1: Für beliebige Funktionen f und g gilt:

Suchen und Sortieren

Datenstrukturen & Algorithmen

Informatik II Hashing

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

Erster Sortier-Algorithmus: Bubblesort

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

G. Zachmann Clausthal University, Germany Die wichtigsten Entwurfsverfahren für Algorithmen:

Sortierverfahren 1. Bubble Sort Selection Sort Insertion Sort

Algorithms & Data Structures 2

2.3.1 Einleitung Einfache Sortierverfahren Höhere Sortierverfahren Komplexität von Sortierverfahren Spezielle Sortierverfahren

Untere Schranke für allgemeine Sortierverfahren

Übung Algorithmen und Datenstrukturen

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

Aufgabe (Schreibtischtest, Algorithmenanalyse)

4. Sortieren 4.1 Vorbemerkungen

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

Grundlegende Sortieralgorithmen

Algorithmen und Datenstrukturen Wintersemester 2004/ November T(n) = T(n a) + T(a) + n

Grundlegende Sortieralgorithmen

Untere Schranke für allgemeine Sortierverfahren

Kapitel 10. Komplexität von Algorithmen und Sortieralgorithmen

Algorithmen und Datenstrukturen 12

Algorithmen und Datenstrukturen

Grundlegende Sortieralgorithmen

Algorithmen und Datenstrukturen

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)

Datenstrukturen Kurzanleitung

Technische Universität München

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

Kap. 3 Sortieren. 7. VO DAP2 SS Mai Vorlesung am Do 7.5. entfällt wegen FVV um 14 Uhr HeapSort ff 3.1.

Sortieralgorithmen OOPM, Ralf Lämmel

Aufgabe (Schreibtischtest, lexikographische Ordnung)

Algorithmen und Datenstrukturen (für ET/IT)

Algorithmen und Datenstrukturen

3.2. Divide-and-Conquer-Methoden

Clausthal C G C C G C. Informatik II Bäume. G. Zachmann Clausthal University, Germany Beispiele.

1. Teilklausur. Name:... Vorname:... Matrikel-Nummer:...

7. Sortieren Lernziele. 7. Sortieren

Ausgewählte Algorithmen: Sortieren von Listen

Informatik II, SS 2016

Algorithmen I - Tutorium 28 Nr. 3

Schiller-Gymnasium Hof

2.2 Allgemeine (vergleichsbasierte) Sortierverfahren

Aufgabenblatt: Arrays

Werden sehen, wie wir durch geschicktes Organsieren von Daten effiziente Algorithmen entwerfen können.

Algo-Animation. Konstruktion der Partition: eigentliche Kunst / Arbeit bei Quicksort. Resultat: Partition A=A 1 WA 2 A 1 W A 2.

Algorithmen und Datenstrukturen

Einführung in die Informatik Algorithmen und Datenstrukturen. Thema 17 Sortieren

Algorithmen und Datenstrukturen

Programmieren I. Kapitel 7. Sortieren und Suchen

Kapitel 8 Fortgeschrittene Sortieralgorithmen

Heapsort. Dr. Michael Brinkmeier (TU Ilmenau) Algorithmen und Datenstrukturen / 50

file:///h:/dokumente/_fh/ ws /etinfoii/vorlesung/infoi...

Grundlagen der Programmierung 2. Sortierverfahren

Komplexität. G. Zachmann Clausthal University, Germany Leistungsverhalten von Algorithmen

Mergesort. Inhaltsverzeichnis. Veranschaulichung der Funktionsweise. aus Wikipedia, der freien Enzyklopädie

Stabiles Sortieren. Dieses Prinzip lässt sich natürlich auf beliebiege andere Zahlensystem oder auch komplett anders gestaltete Mengen übertragen.

Sortieren II / HeapSort Heaps

Algorithmen und Programmieren II

(Digital) Sorting. October 25, Algorithms & Datastructures 2 Exercises WS 2016

Komplexität. G. Zachmann Clausthal University, Germany Leistungsverhalten von Algorithmen

Grundlagen: Algorithmen und Datenstrukturen

Transkript:

lausthal Informatik II Sortieren. Zachmann lausthal University, ermany zach@in.tu-clausthal.de Sortieralgorithmen Preprocessing fürs Suchen sind für kommerzielle Anwendungen häufig die Programmteile, die die meiste Rechenzeit verbrauchen viele raffinierte Methoden wurden im Laufe der Zeit entwickelt, von denen wir ein paar kennenlernen wollen. Zachmann Informatik 2 - SS 06 Sortieren 2 1

Die Sortieraufgabe Eingabe: Datensätze (records) aus einem File, der Form Key und satellite/payload data Sortierschlüssel Inhalt Sortierschlüssel kann aus einem oder mehreren Feldern des Datensatzes bestehen (z.b. Nachname + Vorname) Ordnungsrelation: auf den Keys muß eine totale Ordnungsrelation definiert sein, d.h., es gilt Trichotomie: für alle Keys a,b gilt genau eine Relation Transitivität: Aufgabe: bestimme eine Permutation Π = (p 1,, p n ) für die Records, so daß die Keys in nicht-fallender Ordnung sind:. Zachmann Informatik 2 - SS 06 Sortieren 3 Implementierung üblicherweise als Klasse (oder struct in ) class MyData: def init ( self, key, value ): self.key = key self.value = value def cmp ( self, other ): if self.key < other.key: return 1 elif self.key > other.key: return -1 a = MyData( ) b = MyData( ) if a < b:... else: return 0 class Student { String Name; String Vorname; long int MatrikelNr; short int Fachbereich; };. Zachmann Informatik 2 - SS 06 Sortieren 4 2

Klassifikation / Kriterien von Sortierverfahren interne Sortierverfahren alle Datensätze befinden sich im Hauptspeicher es besteht random access auf den gesamten Datenbestand bekannte Verfahren: Bubblesort, Insertionsort, Selectionsort, Quicksort, Heapsort externe Sortierverfahren die Datensätze befinden sich in einem Hintergrundspeicher (Festplatte, Magnetband, etc.) und können nur sequentiell verarbeitet werden bekanntes Verfahren: Mergesort. Zachmann Informatik 2 - SS 06 Sortieren 5 Vergleichsbasiert (comparison sort ): zulässige Operationen auf den Daten sind nur Vergleich und Umkopieren Stabil (stable ): leiche Keys behalten ihre relative Lage zueinander, d.h., Array-basiert vs. Listen-basiert: Können Datensätze beliebig im Speicher angeordnet sein (Liste), oder müssen sie hintereinander im Speicher liegen (Array) In-Place (in situ): Algorithmus braucht nur konstanten zusätzlichen Speicher (z.b. Zähler, keine Hilfsarrays). Zachmann Informatik 2 - SS 06 Sortieren 6 3

Erster Sortier-Algorithmus: Bubblesort Idee vergleiche von links nach rechts jeweils zwei Nachbarelemente und vertausche deren Inhalt, falls sie in der falschen Reihenfolge stehen; wiederhole dies, bis alle Elemente richtig sortiert sind; die kleinsten Elemente steigen wie Luftblasen zu ihrer richtigen Position auf. Python-ode: def bubblesort( a ): for k in range( : 0, len(a)-1, ): 0, -1 ): for i in range(0,k): len(a)-1 ): if a[i] > a[i+1]: a[i], a[i+1] = a[i+1], a[i]. Zachmann Informatik 2 - SS 06 Sortieren 7 Beispiel. Zachmann Informatik 2 - SS 06 Sortieren 8 4

Korrektheits- Beweis Schleifeninvariante: Nach dem i-ten Durchlauf befinden sich die i größten Elemente an der richtigen Position (und in der richtigen Reihenfolge) nach dem 1. Durchlauf befindet sich das größte Element an der richtigen Stelle nach dem 2. Durchlauf auch das 2.-größte, etc. nach spätestens N-1 Durchgängen ist das Array sortiert da bei jedem Durchlauf auch andere Elemente ihre Position verbessern, ist häufig der Vorgang bereits nach weniger als N-1 Durchgängen beendet. Zachmann Informatik 2 - SS 06 Sortieren 9 Beispiel. Zachmann Informatik 2 - SS 06 Sortieren 10 5

Kleine Optimierung: Test auf vorzeitiges Ende def bubblesort( a ): for k in range (len(a)-1, 0, -1): sorted = true for i in range (0,k): if a[i] > a[i+1]: a[i], a[i+1] = a[i+1], a[i] sorted = false if sorted: break. Zachmann Informatik 2 - SS 06 Sortieren 11 Aufwand von Bubblesort Laufzeitberechnung für den schlimmsten Fall def bubblesort( a ): k = len(a)-1 while k >= 0: for i in range (0,k): if a[i]>a[i+1]: a[i], a[i+1] = a[i+1], a[i] c 2 c 1 c0 c 3 T(n) Für den besten Fall (für den ode mit "early exit"): T(n) = c n Beweis: Übungsaufgabe Im durchschnittlichen Fall (o.bew.):. Zachmann Informatik 2 - SS 06 Sortieren 12 6

Selectionsort Sortieren durch Auswahl suche das kleinste Element A[i] der noch nicht sortierten Elemente und hänge es an die Menge der sortierten Elemente hinten an (durch Vertauschung). Zachmann Informatik 2 - SS 06 Sortieren 13 Beispiel. Zachmann Informatik 2 - SS 06 Sortieren 14 7

Python ode def minpos(a, lo, hi): min = lo; for i in range(lo+1, hi): if a[i] < a[min]: min = i return min def selectionsort(a): for k in range(0, len(a) 1 ): min = minpos(a, k, len(a) ) if min!= k: a[min], a[k] = a[k], a[min]. Zachmann Informatik 2 - SS 06 Sortieren 15 Laufzeitbetrachtung Ebenfalls N 2, da wieder zwei ineinander geschachtelte Schleifen (ganz ähnlich zu Bubblesort) aber Vorfaktor niedriger als bei Bubblesort, da nur einmal pro Durchgang getauscht wird allerdings braucht Selectionsort immer gleich viele Durchläufe, während Bubblesort häufig vorzeitig abbricht, insbesondere bei vorsortierten Arrays. Zachmann Informatik 2 - SS 06 Sortieren 16 8

Insertionsort Sortieren durch Einfügen wie das Sortieren beim Kartenspielen - eine Karte nach der anderen wird aufgenommen und an die richtige Stelle einsortiert sei ein Teil des Arrays schon sortiert. Zachmann Informatik 2 - SS 06 Sortieren 17 dann wird das nächste Element A[k] herausgenommen die entstehende Lücke wird von links durch Verschieben der bereits sortierten Elemente aufgefüllt, bis die Stelle gefunden ist, an die A[k] gehört. Zachmann Informatik 2 - SS 06 Sortieren 18 9

Beispiel. Zachmann Informatik 2 - SS 06 Sortieren 19 Algo-Animation. Zachmann Informatik 2 - SS 06 Sortieren 20 10

Python ode def insertionsort(a): for k in range( 1, len(a) ): x = a[k] i = k while i > 0 && a[i-1] > x: a[i] = a[i-1] i -= 1 a[i] = x eht dieser Test gut? (ist a[i-1] immer wohldefiniert??). Zachmann Informatik 2 - SS 06 Sortieren 21 11