Algorithms & Data Structures 2

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

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

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

Übung Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen

Tutoraufgabe 1 (Sortieralgorithmus):

Aufgabe (Schreibtischtest, Algorithmenanalyse)

Übung: Algorithmen und Datenstrukturen SS 2007

Algorithmen und Datenstrukturen

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

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

2.2 Allgemeine (vergleichsbasierte) Sortierverfahren

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

Programmieren I. Kapitel 7. Sortieren und Suchen

Suchen und Sortieren

Prof. Dr. Margarita Esponda

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

Datenstrukturen und Algorithmen

Übungsklausur Algorithmen I

Kapitel 6 Elementare Sortieralgorithmen

JAVA - Suchen - Sortieren

4. Sortieren 4.1 Vorbemerkungen

Untere Schranke für allgemeine Sortierverfahren

Inhaltsverzeichnis. Teil 1 Grundlagen 23

Inhaltsverzeichnis. Teil 1 Grundlagen 21. Teil 2 Datenstrukturen 85

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

Abschnitt: Algorithmendesign und Laufzeitanalyse

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)

Algorithmen und Datenstrukturen 1

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

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

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

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

Klausur Algorithmen und Datenstrukturen SS August Arbeitszeit 90 min

7. Übung zu Algorithmen I 1. Juni 2016

Quicksort ist ein Divide-and-Conquer-Verfahren.

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

5. Übungsblatt zu Algorithmen I im SoSe 2016

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

Robert Sedgewick. Algorithmen in Java. Teil 1-4 Grundlagen Datenstrukturen Sortieren Suchen. Java-Beratung durch Michael Schidlowsky

Grundlagen der Programmierung 2. Sortierverfahren

Robert Sedgewick. Algorithmen in Java. »il 1-4 Grundlagen Datenstrykturen Sortleren Suchen. java-beratung durch Michael Schidlowsky

7. Sortieren Lernziele. 7. Sortieren

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

NAME, VORNAME: Studiennummer: Matrikel:

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

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

Übungsklausur Algorithmen I

Grundlagen der Programmierung

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

Definition Ein Heap (priority queue) ist eine abstrakte Datenstruktur mit folgenden Kennzeichen:

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

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

Kapitel 8 Fortgeschrittene Sortieralgorithmen

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

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

Algorithmen und Datenstrukturen 1

Algorithmen und Datenstrukturen

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

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für 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:

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

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

Suchen und Sortieren Sortieren. Heaps

Fibonacci-Suche. Informatik I. Fibonacci-Suche. Fibonacci-Suche. Einführung. Rainer Schrader. 24. Mai 2005

Klausur Algorithmentheorie

Algorithmen und Datenstrukturen 1 VL Übungstest WS November 2007

Datenstrukturen und Algorithmen

Grundlagen der Informatik

Kurs 1663 Datenstrukturen" Musterlösungen zur Klausur vom Seite 1. Musterlösungen zur Hauptklausur Kurs 1663 Datenstrukturen 15.

Suchen und Sortieren (Die klassischen Algorithmen)

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

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

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

Sortieren durch Mischen (Mergesort; John von Neumann 1945)

Name:... Vorname:... Matrikel-Nr.:... Unterschrift:...

Sortieralgorithmen. Direkte Sortierverfahren & Shellsort, Quicksort, Heapsort. Vorlesung Algorithmen und Datenstrukturen 2 im SS 2004

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

Sortierverfahren. Sortierverfahren für eindimensionale Arrays

Algorithmen und Datenstrukturen Tafelübung 14. Jens Wetzl 8. Februar 2012

4.4.2 Virtuelles Hashing Erweiterbares Hashing Das Gridfile Implementation von Hashverfahren in Java

Sortierverfahren für Felder (Listen)

Vom Leichtesten zum Schwersten Sortieralgorithmen

Ideen der Informatik Suchen und Sortieren [Ordnung muss sein ] Kurt Mehlhorn Adrian Neumann viele Folien von Kostas Panagiotou

Interne Sortierverfahren

Programmiertechnik II

7 Sortieren in linearer Zeit

Suchen und Sortieren

Transkript:

Algorithms & Data Structures Digital Sorting WS B. Anzengruber-Tanase (Institute for Pervasive Computing, JKU Linz) (Institute for Pervasive Computing, JKU Linz)

WIEDERHOLUNG :: UNTERE SCHRANKE FÜR SORTIEREN DURCH VERGLEICHEN Algorithmus Worst Case Best Case Avg. Case BubbleSort O(N ) O(N) O(N ) InsertionSort O(N ) O(N) O(N ) SelectionSort O(N ) O(N ) O(N ) HeapSort O(N log N) O(N log N) O(N log N) MergeSort O(N log N) O(N log N) O(N log N) QuickSort O(N ) O(N log N) O(N log N) Algorithms & Datastructures // W //

WEITERE SORTIERSTRATEGIEN Bisher: Schlüsselvergleiche um die korrekte Ordnung der Elemente herzustellen O (N log N) als untere Schranke Andere Strategie: nicht den vollständigen Schlüssel bei jedem Schritt betrachten und verarbeiten. Analogie: wenn man die Nummer in einem Telefonbuch sucht, werden oftmals nur die ersten Buchstaben des Namens betrachtet, um die Seite mit dem gewünschten Eintrag zu finden. Schlüssel zerlegen in eine Folge von festen Bestandteilen (Bits/Bytes) Binärzahlen sind Bitfolgen, Strings sind Zeichenfolgen, Dezimalzahlen sind Ziffernfolgen, etc. Schlüssel sind Wörter über einem aus m Elementen bestehenden Alphabet, z.b.: m = Schlüssel sind Dezimalzahlen m =.. Schlüssel sind Binärzahlen m = Schlüssel sind Wörter über dem Alphabet {a,, z} Man kann die Schlüssel also als m-adische Zahlen auffassen. Daher nennt man m auch die Wurzel (lat.: Radix) der Darstellung. Algorithms & Datastructures // W // 3

WEITERE SORTIERSTRATEGIEN Sortierverfahren, die Schlüssel Stück für Stück verarbeiten, heißen RadixSort-Verfahren. Sie vergleichen Schlüssel nicht einfach, sondernd verarbeiten und vergleichen Teile von Schlüsseln. Methodik: Extrahiere die i-te Ziffer aus einem Schlüssel Vorraussetzung: Funktion z m (i, k) die für einen Schlüssel k die Ziffer mit Gewicht m i in der m-adischen Darstellung von k (also die i-te Ziffer von rechts) liefert, z.b.: z (, ) = z (, ) = z (, ) = z (, ) = z (, ) = Wenn k eine positive ganze Zahl ist, so erhält man die i-te Ziffer der Darstellung von k zur Basis m mit: Ein Schlüssel ist eine Zahl zur Basis m (m=radix), im Folgenden m= Algorithms & Datastructures // W //

RADIX SORT RadixSort betrachtet die Struktur der Schlüssel Es seien die Schlüssel als Zahl zur Basis m (m=radix) dargestellt Bsp.: m= (Darstellung im Binärsystem) = 3 Gewicht (b=) bit # Sortieren erfolgt auf Basis des Vergleichs der Bits an der selben Position Erweiterung auf Schlüssel, die alphanumerische Zeichenketten sind Algorithms & Datastructures // W //

RADIX EXCHANGE SORT (BINÄRER QUICKSORT) Methode: gegeben ist das nach aufsteigenden Binärschlüsseln (gleicher Länge) zu sortierende Feld a[] a[n] dieses wird in Abhängigkeit des führenden Bits der binären Sortierschlüssel in zwei Teile aufgeteilt Alle Elemente, deren Schlüssel eine führende haben, kommen in die obere/linke Teilfolge, alle Elemente deren Schlüssel eine führende haben, kommen in die untere/rechte Teilfolge Ähnlich zum QuickSort erfolgt diese Aufteilung In-Situ durch Vertauschen Teilfolgen werden rekursiv auf dieselbe Weise sortiert, wobei das nächste Bit von links als führendes Bit betrachtet wird Analyse: Wird für Schlüssel der Länge b+ insgesamt (s b+ -)-mal rekursiv aufgerufen maximale Rekursionstiefe ist b Bearbeitung (z.b.: Aufteilung) pro Rekursionsebene in linearer Zeit Komplexität: O( b N ) Algorithms & Datastructures // W //

RADIX EXCHANGE SORT (BINÄRER QUICKSORT) Untersuche Bits von links nach rechts. Sortiere Array nach Bit an Position links außen. Teile Array 3. Rekursion sortiere oberes Subarray (und ignoriere Bit ganz links außen) sortiere unteres Subarray (und ignoriere Bit ganz links außen) oberes Subarray unteres Subarray Algorithms & Datastructures // W //

RADIX EXCHANGE SORT (BINÄRER QUICKSORT) Wie erfolgt Sortierung? repeat scan top-down to find key starting with ; scan bottom-up to find key starting with ; exchange keys until scan indices cross; scan top-down scan bottom-up scan top-down scan bottom-up. Austauschschritt. Austauschschritt Algorithms & Datastructures // W //

RADIX EXCHANGE SORT (BINÄRER QUICKSORT) 3 Algorithms & Datastructures // W //

RADIX EXCHANGE SORT (BINÄRER QUICKSORT) 3 Algorithms & Datastructures // W //

RADIX EXCHANGE SORT (BINÄRER QUICKSORT) 3 Algorithms & Datastructures // W //

RADIX EXCHANGE SORT (BINÄRER QUICKSORT) 3 Algorithms & Datastructures // W //

RADIX EXCHANGE SORT (BINÄRER QUICKSORT) 3 Algorithms & Datastructures // W // 3

RADIX EXCHANGE SORT (BINÄRER QUICKSORT) 3 Algorithms & Datastructures // W //

RADIX EXCHANGE SORT (BINÄRER QUICKSORT) 3 Algorithms & Datastructures // W //

RADIX EXCHANGE SORT (BINÄRER QUICKSORT) 3 Algorithms & Datastructures // W //

RADIX EXCHANGE SORT (BINÄRER QUICKSORT) 3 Algorithms & Datastructures // W //

RADIX EXCHANGE SORT (BINÄRER QUICKSORT) 3 Algorithms & Datastructures // W //

RADIX EXCHANGE SORT (BINÄRER QUICKSORT) 3 3 Algorithms & Datastructures // W //

RADIX EXCHANGE SORT (BINÄRER QUICKSORT) unsortiertes Array b- = = = = = = = = 3 = = 3 Algorithms & Datastructures // W //

RADIX EXCHANGE SORT (BINÄRER QUICKSORT) Array sortiert nach Bit links außen b- = = = = = = = = 3 = = 3 Algorithms & Datastructures // W //

RADIX EXCHANGE SORT (BINÄRER QUICKSORT) Array sortiert nach ersten Bits links außen b- = = = = = = = = 3 = = 3 Algorithms & Datastructures // W //

RADIX EXCHANGE SORT (BINÄRER QUICKSORT) Array sortiert nach ersten 3 Bits links außen b- = = = = = = = = 3 = = 3 Algorithms & Datastructures // W // 3

RADIX EXCHANGE SORT (BINÄRER QUICKSORT) Array vollständig sortiert = = = = = = = = 3 = = 3 Algorithms & Datastructures // W //

RADIX EXCHANGE SORT VS. QUICKSORT Gemeinsamkeiten sortieren beide auf Basis von Partition des Arrays rekursive Verfahren Unterschiede Art der Partitionierung: Radix Exchange Sort unterteilt Array nach größer/kleiner als b- Quicksort unterteilt nach größer/kleiner als bestimmtes Element im Array Komplexität: Radix Exchange: O(N b) Quicksort: O(N log N) im Average Case Algorithms & Datastructures // W //

DIREKTER RADIX SORT Untersucht Bits von rechts nach links for k:= to b- sort the array in a stable way, looking only at bit k Unsortiertes Array sortiere nach Sortiertes Array Algorithms & Datastructures // W //

DIREKTER RADIX SORT Erinnere: Ein Sortierverfahren heißt stabil, wenn die anfängliche relative Ordnung der Elemente mit gleichem Schlüssel beibehalten wird Beispiel: betrachte ersten Sortierschritt aus vorangegangenem Beispiel: stabil, da Ordnung innerhalb der Elemente, die mit bzw. enden, beibehalten wird Algorithms & Datastructures // W //

DIREKTER RADIX SORT Beweis, dass Algorithmus korrekt funktioniert zu zeigen: nach Durchführung des Algorithmus sind beliebige zwei Schlüssel in Korrekter relativer Ordnung gegeben: zwei Schlüssel, wobei k die am weitesten links stehende Bitposition ist, an der sich die Schlüssel unterscheiden k Im Schritt k werden die beiden Schlüssel in die richtige relative Reihenfolge gebracht Da das verwendete Sortierverfahren stabil ist, wird diese relative Reihenfolge in den nachfolgenden Schritten nicht mehr verändert Algorithms & Datastructures // W //

DIREKTER RADIX SORT Beispiel zum Beweis der Korrektheit: k Es spielt keine Rolle, in welcher Reihenfolge die Elemente ursprünglich sind Im Sortierschritt k werden sie in korrekte relative Ordnung gebracht Sortieren nach höheren Bits als k zerstört die relative Ordnung nicht mehr, da ein stabiles Sortierverfahren verwendet werden muss Algorithms & Datastructures // W //

DIREKTER RADIX SORT ANALYSE Komplexität for k:= to b- sort the array in a stable way, looking only at bit k Falls ein stabiles Sortierverfahren innerhalb des Schleifenkörpers verwendet wird, so ist die Komplexität O( b N ) Gibt es ein stabiles Sortierverfahren mit O(N)? Bucket Sort! Algorithms & Datastructures // W // 3

BUCKET SORT Stabiles Sortierverfahren für N Zahlen, wobei für jede Zahl n gilt: n {,, 3,..., m} Komplexität: O(N+m) Algorithmus erläutert anhand des Beispiels m=3 und Array (N=) 3 Erzeuge m buckets m=3 Algorithms & Datastructures // W // 3

BUCKET SORT Setze jedes Element des Arrays in passendes Bucket 3 m=3 3 Algorithms & Datastructures // W // 3

BUCKET SORT Setze jedes Element des Arrays in passendes Bucket 3 3 m=3 3 Algorithms & Datastructures // W // 33

BUCKET SORT ANALYSE Unterbietet N log N im average case: O(N) Voraussetzung: Schlüssel kommen gleichverteilt in festem Intervall vor (hier benutztes Beispiel: Schlüssel aus..) auf Kosten zusätzlichen Speicherplatzes O(N) Idee: Schlüsselintervall wird in N gleichgroße Teilintervalle aufgeteilt. Zusätzlich zu Array a[..n] gibt es Array b[..n-] von Zeigern auf N lineare Listen (Buckets, Körbe). Die Listen enthalten die Elemente, die in dem jeweiligem Teilintervall liegen. Algorithms & Datastructures // W // 3

BUCKET SORT for i:= to n- do initialisiere b[i] mit leerer Liste for i:= to n do trage a[i] in Liste b[a[i].key div ] ein for i:= to n- do sortiere Listen b[i] nach Standardverfahren füge Listen b[], b[],... b[n-] zu sortierter Liste zusammen Wahrscheinlichkeit ist sehr hoch, daß nur sehr kurze Listen entstehen, dadurch linearer average case. Worst case hängt von worst case für gewähltes Standardverfahren ab. Algorithms & Datastructures // W // 3

BUCKET SORT Beispiel: Datensätze mit -stelligen Dezimalschlüsseln (d.h.: N =, m =, L = ) 3 a: 3 3 b: - -3 - - - a: Algorithms & Datastructures // W // 3

BUCKET SORT Beispiel: Datensätze mit -stelligen Dezimalschlüsseln (d.h.: N =, m =, L = ) 3 a: 3 3 b: - -3 - - - 3 a: Algorithms & Datastructures // W // 3

BUCKET SORT Beispiel: Datensätze mit -stelligen Dezimalschlüsseln (d.h.: N =, m =, L = ) 3 a: 3 3 b: - -3 - - - 3 3 3 Algorithms & Datastructures // W // 3

SORTIEREN DURCH FACHVERTEILUNG Methode: zu sortierendes Feld a[] a[n] besteht aus m-adischen Schlüsseln gleicher Länge L Algorithmus wird unterteilt in eine Verteilungsphase und Sammelphase In der Verteilungsphase werden die Datensätze auf m Fächer verteilt (das i-te Fach F i nimmt alle Datensätze auf, deren Schlüssel an Position t die Ziffer i haben) In der Sammelphase werden die Datensätze in den Fächern F, F m- eingesammelt, sodass die relative Ordnung in den einzelnen Fächern erhalten bleibt (stabiles Verfahren) Algorithms & Datastructures // W // 3

SORTIEREN DURCH FACHVERTEILUNG Beispiel Datensätze mit -stelligen Dezimalschlüsseln (d.h.: N =, m =, L = ), 3,,,,,,,, 3,, ) Verteilung erfolgt auf Fächer/Buckets (mit t = ) 3 F F F 3 F 3 F F F F F F ) Nach der ersten Sammelphase ergibt sich folgende Schlüsselfolge,, 3,,,,,,,, 3, Algorithms & Datastructures // W //

SORTIEREN DURCH FACHVERTEILUNG Beispiel,, 3,,,,,,,, 3, 3) erneute Verteilung auf nach der Ziffer an Position t = ergibt: 3 3 F F F F 3 F F F F F F ) Sammeln der Schlüssel ergibt die sortierte Schlüsselfolge, 3,,,,,, 3,,,, Algorithms & Datastructures // W //

Algorithms & Data Structures Digital Sorting WS B. Anzengruber-Tanase (Institute for Pervasive Computing, JKU Linz) (Institute for Pervasive Computing, JKU Linz)