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".

Ähnliche Dokumente
Informatik II Sortieren

Informatik II Sortieren

Elementare Sortierverfahren

Datenstrukturen und Algorithmen

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

3. Suchen. Das Suchproblem. Suche in Array. Lineare Suche. 1 n. i = n Gegeben Menge von Datensätzen.

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)

14. Sortieren II Heapsort. Heapsort. [Max-]Heap 7. Heapsort, Quicksort, Mergesort. Binärer Baum mit folgenden Eigenschaften

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

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

Heapsort, Quicksort, Mergesort. 8. Sortieren II

Erster Sortier-Algorithmus: Bubblesort

Heapsort, Quicksort, Mergesort. 8. Sortieren II

Übung: Algorithmen und Datenstrukturen SS 2007

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

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

Algorithmen und Datenstrukturen

9. Rekursion. 1 falls n 1 n (n 1)!, andernfalls. Experiment: Die Türme von Hanoi. Links Mitte Rechts. Mathematische Rekursion

Kapitel 2. Weitere Beispiele Effizienter Algorithmen

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

Informatik II Sortieralgorithmen

Sortieren II / HeapSort Heaps

A3.1 Sortieralgorithmen

Informatik II, SS 2016

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

Algorithmen und Datenstrukturen 1

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

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

Prof. Dr. Margarita Esponda

Algorithmen und Datenstrukturen

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

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

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

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

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

Datenstrukturen Kurzanleitung

Tutoraufgabe 1 (Sortieralgorithmus):

Grundlagen der Programmierung 2. Sortierverfahren

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

A7.1 Untere Schranke. Algorithmen und Datenstrukturen. A7.1 Untere Schranke. Algorithmen und Datenstrukturen. A7.2 Quicksort. A7.

3.2. Divide-and-Conquer-Methoden

Algorithmen und Datenstrukturen

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

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

Kapitel 6 Elementare Sortieralgorithmen

Algorithmen und Datenstrukturen

Präsenzübung Datenstrukturen und Algorithmen SS 2014

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

7. Sortieren Lernziele. 7. Sortieren

Abschnitt: Algorithmendesign und Laufzeitanalyse

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

JAVA - Suchen - Sortieren

Algorithms & Data Structures 2

Suchen und Sortieren Sortieren. Mergesort

Algorithms & Data Structures 2

Kap. 3: Sortieren (3)

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

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

Abschnitt 19: Sortierverfahren

Programmiertechnik II

Algorithmen und Datenstrukturen

in eine Folge ai, so daß bezgl. einer Ordnung gilt: a a, j < n

Sortieren Anordnen einer gegebenen Menge von Objekten in einer bestimmten Ordnung.

Übung zu Algorithmen und Datenstrukturen (für ET/IT)

Aufgabe (Schreibtischtest, Algorithmenanalyse)

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

Übung Algorithmen I

1 Raumwechsel: Gr. 15 (Do 10-12, F-235) ab sofort in G Studie zum Arbeitsverhalten von Studierenden unter Leitung

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

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

Das Suchproblem 4. Suchen Das Auswahlproblem Suche in Array

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

Suchen und Sortieren

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

Sortieren & Co. KIT Institut für Theoretische Informatik

6 Quicksort. die mittlere Laufzeit Θ(n log n) beträgt und. die in der asymptotischen Notation verborgenen Konstanten sehr klein sind.

4. Sortieren 4.1 Vorbemerkungen

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

Programmierung mit C Algorithmen

Übung Algorithmen I

Mergesort. Idee. Die folgende Funktion mergesort sortiert eine Folge a vom unteren Index lo bis zum oberen Index hi.

Sortieren und Suchen. Jens Wächtler Hallo Welt! -Seminar LS 2

Übung Algorithmen und Datenstrukturen

Sortieren Jiri Spale, Algorithmen und Datenstrukturen - Sortieren 1

Sortieralgorithmen OOPM, Ralf Lämmel

Suchen und Sortieren

Datenstrukturen & Algorithmen

Algorithmen und Datenstrukturen

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

Datenstrukturen und Algorithmen

Übung Algorithmen und Datenstrukturen

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

Transkript:

Korrektheit Invariante: a[0 k-1] enthält nur Elemente aus a[0 k-1], aber in sortierter Reihenfolge Terminierung: Die Schleife endet mit k=n def insertionsort(a): for k in range( 1, len(a) ): while i > 0 && a[i-1] > x: a[i] = a[i-1] i -= 1 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".. Zachmann Informatik 2 - SS 06 Sortieren 22 Invariante: a[0 k-1] enthält nur Elemente aus a[0 k-1], aber in sortierter Reihenfolge Initialisierung: k=1 Invariante trivialerweise erfüllt, da a[0] sortiert ist def insertionsort(a): for k in range( 1, len(a) ): while i > 0 && a[i-1] > x: a[i] = a[i-1] i -= 1. Zachmann Informatik 2 - SS 06 Sortieren 23 1

Invariante: a[0 k-1] enthält nur Elemente aus a[0 k-1], aber in sortierter Reihenfolge Schritt: Nach dem Ende der inneren while-schleife gilt - und - die Elemente, die vorher in a[i] a[k-1] standen, stehen jetzt in a[i+1] a[k], und -. def insertionsort(a): for k in range( 1, len(a) ): while i > 0 && a[i-1] > x: a[i] = a[i-1] i -= 1 Damit sind die Elemente a[0],,a[i-1],x,a[i+1],,a[k] wieder sortiert Es ist kein Element aus a[0 k] verschwunden oder hinzugekommen. Zachmann Informatik 2 - SS 06 Sortieren 24 Analyse Ist es in-place? Ist es stabil? Anzahl von Vergleichen: A ist sortiert Θ(n) Vergleiche A ist unsortiert Ο(n 2 ) Vergleiche, denn: Die maximale Anzahl von Vergleichen beim Einfügen von A k ist (k-1) Damit ist A ist umgekehrt sortiert Θ(n 2 ) Vergleiche. Zachmann Informatik 2 - SS 06 Sortieren 25 2

im Average-ase spart man ein paar Vergleiche gegenüber Selectionsort da beim Aufspüren des Zielortes im Mittel nur die Hälfte des sortierten Bereiches abgesucht werden muß bei Selectionsort müssen zur Bestimmung des Minimums immer alle Elemente betrachtet werden Beim Verschieben müssen mehr Swaps als bei Selectionsort gemacht werden Insertionsort hat um so bessere Laufzeit, je besser das Array vorsortiert ist. Zachmann Informatik 2 - SS 06 Sortieren 26 Laufzeitvergleiche zufällige Daten (in Sekunden) vorsortierte Daten (in Sekunden). Zachmann Informatik 2 - SS 06 Sortieren 27 3

Häufig vorkommende Situation unsortierter Datenbestand wird einmal aufwendig sortiert danach ändert sich der Datenbestand immer nur um wenige Datensätze - einige Datensätze werden neu eingebracht - einige Datensätze werden geändert oder gelöscht Neusortierung trifft daher häufig auf gut vorsortierte Datenbestände - Bubblesort und Insertionsort sind dann eine gute Wahl. Zachmann Informatik 2 - SS 06 Sortieren 28 Shellsort Von Donald Shell [1959] Idee: versuche, die Datensätze durch größere Sprünge an die richtige Position zu bringen parametrisiere Insertionsort um eine "Schrittweite" (stride length) damit werden Elemente x mit größeren Schritten nach links bewegt Insertionsort im letzten Durchgang fast nichts mehr zu tun arantie, daß die Daten anschließend sortiert sind. Zachmann Informatik 2 - SS 06 Sortieren 29 4

Definition: Eine Folge a 1, a 2, a N heißt h-sortiert, wenn alle Teilfolgen a 1, a 1+h, a 1+2h, a 2, a 2+h, a 2+2h, a h-1, a 2h-1, a 3h-1, sortiert sind.. Zachmann Informatik 2 - SS 06 Sortieren 30 Methode: Stelle für eine abnehmende und mit 1 endende Folge von Inkrementen h t, h t-1, h 1 nacheinander eine h i -sortierte Folge der Datensätze mittels parametrisiertem Insertionsort her. Algorithmus: Bilde eine Folge von h-werten, z.b. 1, 4, 13,..., 3. h k-1 +1,... starte bei dem größten h-wert, der kleiner als N ist benutze parametrisiertes Insertionsort gehe zum nächst kleineren h-wert und wiederhole Korrektheit: klar, da letzte Phase identisch zu Insertion-Sort ist. Zachmann Informatik 2 - SS 06 Sortieren 31 5

Beispiel. Zachmann Informatik 2 - SS 06 Sortieren 32 Parametriesierung von Insertionsort, h = stride length: def insertionsort( a, h ): for k in range( h, len(a), h ): while i > h-1 && a[i-1] > x: a[i] = a[i-h] i -= h def insertionsort(a): for k in range( 1, len(a), 1): while i > 0 && a[i-1] > x: a[i] = a[i-1] i -= 1 esamtprogramm: def shellsort(a): h = 1 while h <= len(a): h = 3*h + 1 h /= 3 while h > 0: insertionsort( a, h ) h /= 3. Zachmann Informatik 2 - SS 06 Sortieren 33 6

Eigenschaften Es gibt gute und schlechte Folgen für h derzeit beste bekannte Folge -... 16001, 3905, 2161, 929, 505, 209, 109, 41, 19, 5, 1 garantiert weniger als N 1.5 Vergleiche Es gibt h-folgen, für die Shellsort im worst-case Laufzeitverhalten wahrscheinlich O(N log 2 N) oder O(N 1.25 ) Laufzeit größtenteils unabhängig von Daten braucht. Zachmann Informatik 2 - SS 06 Sortieren 34 Demo. Zachmann Informatik 2 - SS 06 Sortieren 35 7

Quicksort.A.R. Hoare, britischer Informatiker, erfand 1960 Quicksort bis dahin dachte man, man müsse die einfachen Sortieralgorithmen durch raffinierte Assembler- Programmierung beschleunigen Quicksort zeigt, daß es sinnvoller ist, nach besseren Algorithmen zu suchen einer der schnellsten bekannten allgemeinen Sortierverfahren wird im egensatz zu Shellsort auch theoretisch gut verstanden Idee: vorgegebenes Sortierproblem in kleinere Teilprobleme zerlegen Teilprobleme rekursiv sortieren allgemeines Algorithmen-Prinzip: divide and conquer (divide et impera). A. R. Hoare, 1960. Zachmann Informatik 2 - SS 06 Sortieren 36 Algorithmus 1. wähle irgend einen Wert W des Sortierfeldes 2. konstruiere Partitionierung des Arrays A mit folgenden Eigenschaften 3. wenn man jetzt A 1 und A 2 sortiert, ist das Problem gelöst 4. A 1 und A 2 sortiert man natürlich wieder mit Quicksort. Zachmann Informatik 2 - SS 06 Sortieren 37 8

Algo-Animation. Zachmann Informatik 2 - SS 06 Sortieren 38 9