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
GIN2 – 2. Vorlesung, SS04 Prof. Dr. Wolfram Conen
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
Sortierverfahren Richard Göbel.
Java: Dynamische Datentypen
Listen Richard Göbel.
FH-Hof Verwaltung von Zeichenketten 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.
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
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 (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
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 12 Claudio Moraga, Gisbert Dittrich FBI Unido
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.
Externe Datenstruktur lineare Liste
Vortrag: Ingo Gensch, Mathias Reich am:
Rekursion Richard Göbel.
FH-Hof Algorithmen und Datenstrukturen - Einführung Richard Göbel.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Computational Thinking Suchen und Sortieren [Ordnung muss sein…]
Sortieralgorithmen Sortieren von Arrays.
Diskrete Mathematik II
Effiziente Algorithmen
Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger Institut für Wirtschaftsinformatik- Software Engineering JKU Linz.
Sortieralgorithmen Greedy Sortieren: Sortieren durch Auswahl, Einfügen und Austauschen Divide-and-Conquer-Sortieren: Quicksort und merge sort Foliensatz.
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.
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen
 Präsentation transkript:

Sortierverfahren Richard Göbel

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

Sortierverfahren - Comparator in Java public MyComparator implements Comparator { public int compare(Object o1, Object o2) . . . } public boolean equals(Object obj)

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

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 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: Tausche Element mit dem größten Nachfolger falls nötig Top-Down: Vertausche das eingefügte kleinere Element mit dem größten Nachfolger falls nötig (soweit wie nötig) Setze dieses Verfahren schrittweise bis zur Wurzel des Baumes fort

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: Quick Sort

Quicksort - Sortieren innerhalb des Array 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) 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?