Sortierverfahren Richard Göbel.

Slides:



Advertisements
Ähnliche Präsentationen
Algorithmen und Datenstrukturen
Advertisements

Algorithmen und Datenstrukturen
Der R-Baum Richard Göbel.
DNA-Array oder DNA-Chip
Der k-d-Baum Richard Göbel.
Sortieren I - Bubblesort -
Claudio Moraga; Gisbert Dittrich
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (22 – B-Bäume)
FH-Hof Der B-Baum Richard Göbel. FH-Hof Wahl des Verzweigungsgrad Verzweigungsgrad kann größer als 2 sein v Nachfolger für einen Knoten v-1 Werte in einem.
Kapitel 6: Klassifizierung von Sortiertechniken
Prioritätswarteschlangen
Kapitel 7. Sortier-Algorithmen
Kapitel 6. Suchverfahren
5. Sortier-Algorithmen Vorbemerkungen:
Synonyme: Stapel, Keller, LIFO-Liste usw.
Sortieren mit Binären Bäumen
Java: Dynamische Datentypen
Listen Richard Göbel.
Sortierverfahren Richard Göbel.
FH-Hof Effizienz - Grundlagen Richard Göbel. FH-Hof Inhalt Einführung Aufwand für Anfragen ohne Indexierung Indexstrukturen für Anfragen an eine Tabelle.
Der R-Baum Richard Göbel.
FH-Hof Optimierungsverfahren für kombinatorische Probleme Richard Göbel.
Motivation Richard Göbel.
Effizienz: Indexstrukturen
Baumstrukturen Richard Göbel.
WS Algorithmentheorie 05 - Treaps Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (23 – Sortieren vorsortierter Daten) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (08 - Einfache Sortierverfahren) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Halbzeit: Kurze Wiederholung
Sortieren vorsortierter Daten
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen Halbzeit: Was haben wir bisher gelernt? Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen 09 - Weitere Sortierverfahren Heapsort-Nachtrag Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (03 – Verschiedene Algorithmen für dasselbe Problem) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (09 - Weitere Sortierverfahren) Prof. Th. Ottmann.
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.
Geometrisches Divide and Conquer
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Diskrete Mathematik I Vorlesung 9b AVL-Baum, Algorithmen.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation II Vorlesung In welcher Masche liegt der Punkt p?
Vortrag: Ingo Gensch, Mathias Reich am:
Bubbelsort und Quicksort Vortrag von Rolf Heitzenröder
Rekursion Richard Göbel.
FH-Hof Algorithmen und Datenstrukturen - Einführung Richard Göbel.
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
4 Sortierverfahren 4.1 Einführung 4.2 Naive Sortierverfahren
Algorithmen Gruppe 4.
Sortieralgorithmen Sortieren von Arrays.
Diskrete Mathematik II
Effiziente Algorithmen
Übung Datenbanksysteme II Index- strukturen
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation III Vorlesung 1 WS 2001/02 Punkt-in-Landkarte I (Streifenkarte)
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.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Datenstrukturen für den Algorithmus von.
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,
Algorithmen und Datenstrukturen
Binärbäume.
Sortierverfahren Mit VB 2010 express edition JBS Tr, info Q1.
Suchen und Sortieren.
 Präsentation transkript:

Sortierverfahren Richard Göbel

Sortierte Ausgabe von Studentennamen public class Vorlesung { String bezeichnung; Dozent dozent; int sws; int ects; Student[] teilnehmer; int anzTeilnehmer; } public abstract class Person String name; public class Student extends Person . . .

Sortierverfahren - Anwendungen Sortierte Ausgabe von Daten Effiziente Algorithmen Suchen in sortierten Listen Vergleich von Elementen verschiedener Listen . . . und andere . . .

Sortierverfahren - Voraussetzung Elemente müssen vergleichbar sein Zahlen Zeichenketten Allgemein: Totale Ordnung Eine Liste [x1, x2, . . . , xn] ist sortiert g.d.w.:

Einfaches Sortierverfahren (Bubble Sort) Überprüfe ob die Liste sortiert ist Falls die Sortierbedingung an einer Stelle verletzt ist, dann tausche die entsprechenden Elemente Wiederhole dieses Verfahren, bis die Liste sortiert ist Dieses Verfahren ist nicht effizient!

Effizientes Sortieren Aufwand für Sortierverfahren: Vergleich von Elementen Einfügen von Elementen in eine sortierte Liste Ansatz: Verringere die Anzahl der Vergleichsoperationen Vermeide Verschieben einer Teilliste beim Einfügen

Sortieren - Ideen für ein Verfahren Identifiziere schrittweise alle größten (kleinsten) Elemente einer Liste und speichere diese in ihrer Reihenfolge Teile und Beherrsche: Aufteilung der großen Liste in kleinere Listen und Sortieren der Teillisten Sortieren durch Fachverteilung

Sortieren - Größtes Element Finde das größte Element der Liste Vertausche das größte Element mit dem letzten Element der Liste Setze das Verfahren mit der Liste ohne das letzte Element fort Endbedingung: Die Liste enthält nur noch ein Element Bezeichnung – "Insertion Sort" Achtung: Andere Versionen existieren!

Sortieren - Finde Größtes Element, Insertion Sort . . . max = list[0]; pos = 0; for (int i = 1; i < list.length; i++) { if (max < list[i]) max = list[i]; pos = i; }

Sortieren - Diskussion Insertion Sort Anzahl Vergleiche: n + (n -1) + . . . + 1 = (n2+n)/2 Zeitaufwand: O(n2) Es werden eine Vielzahl von Vergleichsoperationen bei jedem Durchgang wiederholt! Ein verbesserter Ansatz sollte Ergebnisse mindestens einiger Vergleiche speichern Ansatz hier: Aufbau einer entsprechenden Datenstruktur auf der Basis eines binären Baums

Binärer Baum als so genannter „Heap“ x1 x2 x3 x4 x5 x6 x7

Aufbau des Heap Bottom-Up: Bearbeite Baum von unten nach oben Finde nicht bearbeiteten Knoten dessen Kinder bereits bearbeitet wurden Tausche Element mit dem größten Nachfolger falls nötig Wende Top-Down-Methode auf das betroffen Kind an falls vertauscht wurde Top-Down: Bearbeite Baum von oben nach unten Beende die Methode falls keine Vertauschung nötig ist oder ein Blatt erreicht wurde

Aufbau des Heap - Bottom Up Vertauschen! 1 2 Bis hier bereits fertig! 5 8 4 3

Aufbau des Heap - Top Down 1 8 4 3 2 5 4 2 Evtl. weiter nach unten

Darstellung des Heap - Idee Für den Heap soll keine komplexe Darstellung aufgebaut werden Idee: Darstellung des Heap direkt auf dem Array Position i hat die Nachfolger: 2 * i 2 * i + 1

Darstellung des Heap - Beispiel 12 12 13 6 24 38 41 7 15 3 1 26 42 16 17 49 13 6 24 38 41 7 15 3 1 26 42 16 17 49

1: Baue den Heap auf einem Array der Länge n auf: Heap Sort - Ansatz 1: Baue den Heap auf einem Array der Länge n auf: Bearbeite schrittweise die Positionen n/2 bis 1 Überprüfe die Nachfolger und vertausche ggf. Elemente (Bottom-Up, Top-Down) 2: Vertausche das erste Element (größtes Element) mit dem letzten Element des Arrays 3: „Blockiere“ das letzte Element (Array wird „virtuell“ um eine Position kleiner) 4: Wende den „Top-Down“-Ansatz auf das erste Element an 5: Wiederhole die Schritte 2 - 4 bis das Array sortiert ist

Heap Sort - Diskussion Aufwand im schlechtesten Fall: O(log(n)*n)) Kein zusätzlicher Speicherplatz nötig

Teile und Beherrsche - Beliebige Aufteilung Teile die Liste in zwei (fast) gleich große Teillisten Sortiere die Teilliste Erzeuge die Gesamtliste aus den sortierten Teillisten Vergleiche die beiden kleinsten Elemente der sortierten Teillisten Füge das kleinere Element in die Ergebnisliste Wiederhole diese Schritte, bis die beiden Teillisten leer sind Bezeichnung: Merge Sort

Aufwand im schlechtesten Fall: O(log(n)*n)) Vergleich mit Heap Sort: Diskussion Merge Sort Aufwand im schlechtesten Fall: O(log(n)*n)) Vergleich mit Heap Sort: Zusätzlicher Speicher wird benötigt (mindestens in der Größe der zu sortierenden Liste) insgesamt etwas schneller als der Heap Sort

Teile und Beherrsche - Aufteilung mit Element Wähle ein Element p für die Aufteilung aus (Pivot-Element) Erzeuge zwei Teillisten mit Hilfe von p: Die erste Teilliste enthält alle Elemente kleiner oder gleich p Die zweite Teilliste enthält alle Elemente größer als p Sortiere danach die Teilliste und hänge das Ergebnis zusammen Bezeichnung: Quicksort

Quicksort - Sortieren innerhalb des Array I Gegeben linker Grenze l rechte Grenze r Sortiere Liste zwischen l und r einschließlich Entferne erstes Element aus Liste als Pivotelement Nutze freie Position um kleinere Elemente "links" und größere Elemente "rechts" zu speichern Speichere das Pivotelement zwischen den Teillisten Wende Quicksort rekursiv auf die Teillisten an

Quicksort - Sortieren innerhalb des Array II Parameter Startpunkt: links Endpunkt: rechts 14 25 16 27 41 12 . . . 25 Pivotelement: 12 27 16 25

Aufwand im durchschnittlichen Fall: O(log(n)*n)) Diskussion Quick Sort Aufwand im durchschnittlichen Fall: O(log(n)*n)) Aufwand im schlechtesten Fall: O(n2) bei sortierter Liste Lösung: Wähle nicht das erste Element sondern ein anderes Element mit zufälliger Position aus Vergleich mit Heap Sort und Merge Sort: kein zusätzlicher Speicher wird benötigt im durchschnittlichen Fall deutlich schneller als die beiden anderen Verfahren

Sortierung durch Fachverteilung Sortiere die Elemente direkt in die Felder eines Arrays ein (Für jeden Wert oder Wertbereich ein Feld) Aufwand ist linear! Probleme: Größe des Arrays? Mehrere Werte in einem Feld? Auslesen des Arrays?