Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 9 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmen und Datenstrukturen
Advertisements

der Universität Oldenburg
der Universität Oldenburg
DNA-Array oder DNA-Chip
Sortieren I - Bubblesort -
Algorithmen und Datenstrukturen
Kapitel 6: Klassifizierung von Sortiertechniken
Kapitel 7. Sortier-Algorithmen
5. Sortier-Algorithmen Vorbemerkungen:
3 Sprachelemente und Anweisungen JavaHS Merseburg (FH) WS 06/07 Strings (Zeichenketten)
Sortieren mit Binären Bäumen
Sortierverfahren Richard Göbel.
Java: Dynamische Datentypen
Listen Richard Göbel.
Sortierverfahren Richard Göbel.
Java: Grundlagen der Sprache
Konstruktoren.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
Funktionenklassen zur Messung der Komplexität
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (23 – Sortieren vorsortierter Daten) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (08 - Einfache Sortierverfahren) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen
Halbzeit: Kurze Wiederholung
Sortieren vorsortierter Daten
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (24 – Sortieren vorsortierter Daten) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen Halbzeit: Was haben wir bisher gelernt? Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Anwendungen von Stapeln und Schlangen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen 09 - Weitere Sortierverfahren Heapsort-Nachtrag Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (11-1 –Selbstanordnende lineare Listen) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27-Selbstanordnende lineare Listen) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (15 Hashverfahren: Verkettung der Überläufer) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 13 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Algorithmen und Datenstrukturen
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 12 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (09 - Weitere Sortierverfahren) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 16 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
Vortrag: Ingo Gensch, Mathias Reich am:
Einführung in die Programmierung Anweisungen und Datentypen
Bestimmung des ggT zweier Zahlen
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
4 Sortierverfahren 4.1 Einführung 4.2 Naive Sortierverfahren
Sortieralgorithmen Sortieren von Arrays.
Effiziente Algorithmen
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
2.4 Rekursion Klassifikation und Beispiele
Kapitel 6: Suchbäume und weitere Sortierverfahren
Programmiervorkurs WS 2014 Referenzdatentypen
Selection-Sort Insertion-Sort Bubble-Sort.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
M a r c – o l i v e r p a h l Informatik II – Kapitel 12 „Sortier-Algorithmen“ Zusammenfassung des Kapitel 12 Küchlin, Weber, Einführung in die Informatik,
Sortierverfahren Mit VB 2010 express edition JBS Tr, info Q1.
Allgemeine Formulierung des Suchproblems
InsertionSort Einfügen eines Elements an der richtigen Stelle eines bereits sortierten Arrays. Verschiebungen von Elementen statt Vertauschungen Element.
Suchen und Sortieren.
 Präsentation transkript:

Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 9 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät für Angewandte Wissenschaften Albert-Ludwigs-Universität Freiburg Einfache Sortierverfahren

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann2 Sortieren: Motivation Datenbestände müssen sehr oft sortiert werden, etwa um Zuordnungen herzustellen, oder um darin suchen zu können. Im täglichen Leben werden ebenfalls oft Dinge sortiert – etwa Spielkarten (beim Aufnehmen in die Hand). Mögliche Strategien sind: 1. Alle Karten kommen in die Hand, anschließend werden benachbarte Karten (in korrekte Reihenfolge) getauscht, bis alle korrekt sind Bubble Sort 2. Die jeweils niedrigste Karte wird vom Tisch in die Hand genommen und an die schon sortierten dort angefügt Selection Sort 3. Karten werden in beliebiger Reihenfolge aufgenommen und jeweils an der richtigen Stelle (die zu suchen ist) in die sortierten in der Hand eingefügt Insertion Sort

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann3 Rahmenbedingungen beim Sortieren (1) Die zu sortierenden Datensätze können beliebig strukturiert sein. Der Sortierschlüssel ist Teil jedes Datensatzes. Davon kann es mehrere geben. Das Sortieren ändert die Reihenfolge von Datensätzen oder beschreibt (etwa durch Angabe einer Folge von Operationen) wie die korrekte Reihenfolge erreicht werden kann.

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann4 Rahmenbedingungen beim Sortieren (2) Internes Sortieren: Anzahl der Datensätze ist so begrenzt, dass alle gleichzeitig in den Speicher passen. Externes Sortieren: Anzahl der Datensätze ist zu groß, um sie alle gleichzeitig im Speicher zu halten. Kann auf Internes Sortieren zurückgeführt werden: 1. Die zu sortierende Datei wird in Teile zerlegt, die jeweils intern sortiert werden können. 2. Die Teile werden sortiert. 3. Die Ergebnisdatei wird aus den sortierten Teilen zusammengemischt: Dazu ist ein Datensatz pro Teil im Speicher ausreichend, der kleinste wird zum Ergebnis hinzugefügt und durch seinen Nachfolger aus der Ursprungsdatei ersetzt.

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann5 Methode des Verfahrens Vertauschen, Einfügen, Auswählen Vorsortierung ausnutzend Rekursion, Iteration Verwendung spezieller Datenstrukturen Effizienz O(n 2 ), O(n log n), O(n) Verwendung von zusätzlichem Speicher Allgemeine oder Verfahren mit speziellen Voraussetzungen A: Nur Schlüsselvergleiche A: Reihenfolge von Daten ändern A: Kann Reihenfolge von Daten mit gleichem Sortierschlüssel geändert werden (Stabilität)? S: Wird eine bestimmte Schlüssel-Struktur vorausgesetzt? Klassifikationsmöglichkeiten für Sortierverfahren

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann6 Untere Komplexitätsschranke für Sortierverfahren (1) Satz. Jeder Sortier-Algorithmus für n Elemente, der ausschließlich auf Schlüssel-Vergleichen und Element-Vertauschungen beruht, hat eine worst- case Laufzeit Ω(n log n). Am Ende des Sortier-Vorgangs muss eine von n! Permutationen der n Elemente erzeugt worden sein. Jeder Ausgang eines Vergleiches liefert Informationen um die in Frage kommende Menge von Permutationen in zwei Teile zu zerlegen.

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann7 Untere Komplexitätsschranke für Sortierverfahren (2)

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann8 Untere Komplexitätsschranke für Sortierverfahren (3) Der entstehende Entscheidungsbaum mit n! Blättern ist im besten Fall balanciert. Die Höhe des Baumes ist also log n! Mit der Stirlingschen Formel folgt dann der Satz.

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann9 Rahmen für Sortier-Verfahren Sortier-Verfahren sollten immer so geschrieben sein, dass sie mit beliebigen Datentypen operieren können. Das bedingt einen gewissen Zusatz-Aufwand. Für die Darstellung der Verfahren wird im Folgenden der Einfachheit halber ein Array von Zeichen (char) sortiert. Wir verwenden ein simples Rahmen-Programm. class CharSort { public static void main (String args[]) { char [] a = " thequickbrownfoxjumpsoverthelazydog".toCharArray(); System.out.println ("Zeichen-Sortierprogramme\n"); System.out.println (a); System.out.print ("bubbleSort: "); Sorter.bubbleSort (a); System.out.println (a); } // main } // CharSort

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann10 Die Sorter-Klasse Die Sorter-Klasse vereint verschiedene Sortier-Algorithmen sowie Hilfs- Methoden: class Sorter { private final static void swap (char[] a, int i, int k){ char h = a[i]; a[i] = a[k]; a[k] = h; } // swap // verschiedene Sortier-Verfahren... } // Sorter Die Ausgabe eines Sortier-Laufs sieht dann etwa so aus: C:\algo>java CharSort Zeichen-Sortierprogramme thequickbrownfoxjumpsoverthelazydog bubbleSort: abcdeeefghhijklmnoooopqrrsttuuvwxyz

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann11 Bubble Sort Wiederholung: Das Blasen-Aufstiegs-Verfahren static void bubbleSort (char[] a){ int hi = a.length-1; for (int k = hi; k > 0; k--){ boolean test = true; for (int i = 0; i a[i+1]) { swap (a, i, i+1); test = false; } if (test) break; } } // bubbleSort Beginnend mit dem höchsten Index wird das Array sortiert. Vorsortierung wird ausgenutzt Laufzeiten in O(n²) im worst und average case sowie Ο(n) im best case.

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann12 Selection Sort (1) Suche das kleinste der verbleibenden Elemente und hänge es an den bisher sortierten Bereich (durch Tausch) an. Am Ende ist alles sortiert. static void selectionSort (char[] a){ int hi = a.length-1; for (int k = 0; k < hi; k++){ int min = minPos (a, k, hi); // finde minPos im Rest if (min != k) swap (a, min, k); // tausche es nach k } } // selectionSort private static int minPos (char[] a, int lo, int hi){ int min = lo; for (int i = lo+1; i <= hi; i++) if (a[i] < a[min]) min = i; return min; } // minPos

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann13 Selection Sort (2) Äußere Schleifendurchläufe: (n - 1) Bestimmung von minPos (a,k,hi): (n - k) Vergleiche. Gesamtaufwand: O(n²) Vorteil: Nur (n - 1) Vertauschungen, besser als bei Bubble Sort. Nachteil: Bei Vorsortierung keine Verbesserung.

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann14 Insertion Sort (1) Das erste Element des noch unsortierten Bereiches wird genommen und in den schon sortierten an der richtigen Stelle (durch Tausch) eingefügt. Die bereits sortierten Elemente oberhalb der Einfügestelle müssen dazu je um eine Position verschoben werden. static void insertionSort (char[] a){ int hi = a.length-1; for (int k = 1; k 0) && (a[i-1] > x) ) ; i-- ) a[i] = a[i-1]; // rechts schieben a[i] = x; // einfuegen } } // insertionSort

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann15 Insertion Sort (2) Aufwand wieder in O(n²) im Mittel und im worst case. Es werden viele Vertauschungen ausgeführt. Vorsortierung ist von Vorteil.

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann16 Shell Sort (1) Shell Sort kann als Variante von Insertion Sort angesehen werden (Donald Shell). Es werden mehrere Durchgänge gemacht, deren letzter mit Insertion Sort übereinstimmt. Frühere Durchgänge erhöhen die Vorsortierung, so dass spätere Durchgänge weniger zu tun haben. Insgesamt kann der Aufwand gegenüber Insertion Sort verbessert werden, auch in Größenordnungen. Er liegt unter O(n 1.5 ), experimentell belegt in O(n 1.25 ). Es wird eine (mit h statt 1) parametrisierte Version von Insertion Sort benutzt.

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann17 Shell Sort: Beispiel h 3 = 5, h 2 = 3, h 1 = 1 Eingabefolge:dafebcg h 3 = 5dafebcg cafebdg h 2 = 3cafebdg cadebfg h 1 = 1cadebfg abcdefg

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann18 Shell Sort (2) private static void insertionSorth (char[] a, int h){ int i, hi = a.length-1; for (int k = h; k (h-1)) && (a[i-h] > x)) ; i-=h) a[i] = a[i-h]; a[i] = x; } } // insertionSorth

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann19 Shell Sort (3) Die parametrisierte Version von Insertion Sort wird nun für immer kleiner werdende Werte von h aufgerufen: h =..., 1093, 364, 121, 40, 13, 4, 1 static void shellSort (char[] a){ int hi = a.length-1; int hmax, h; for (hmax = 1; hmax 0; h /= 3) insertionSorth (a, h); } // shellSort Der erste Wert von h muss kleiner sein als n Experimentell hat man noch bessere Folgen für h ermittelt, etwa: 16001, 3905, 2161, 929, 505, 209, 109, 41, 19, 5, 1