Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

FH-Hof Sortierverfahren Richard Göbel. FH-Hof Sortierte Ausgabe von Studentennamen public class Vorlesung { String bezeichnung; Dozent dozent; intsws;

Ähnliche Präsentationen


Präsentation zum Thema: "FH-Hof Sortierverfahren Richard Göbel. FH-Hof Sortierte Ausgabe von Studentennamen public class Vorlesung { String bezeichnung; Dozent dozent; intsws;"—  Präsentation transkript:

1 FH-Hof Sortierverfahren Richard Göbel

2 FH-Hof Sortierte Ausgabe von Studentennamen public class Vorlesung { String bezeichnung; Dozent dozent; intsws; intects; Student[]teilnehmer; int anzTeilnehmer; } public abstract class Person { String name; } public class Student extends Person {... }

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

4 FH-Hof Sortierverfahren - Voraussetzung Elemente müssen vergleichbar sein Zahlen Zeichenketten Allgemein: Totale Ordnung Eine Liste [x 1, x 2,..., x n ] ist sortiert g.d.w.:

5 FH-Hof 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!

6 FH-Hof 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

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

8 FH-Hof 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!

9 FH-Hof 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; }...

10 FH-Hof Sortieren - Diskussion Insertion Sort Anzahl Vergleiche: n + (n -1) = (n 2 +n)/2 Zeitaufwand: O(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

11 FH-Hof Binärer Baum als so genannter Heap x1x1 x2x2 x 3 x4x4 x5x5 x6x6 x7x7

12 FH-Hof 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 Tausche Element mit dem größten Nachfolger falls nötig Wende Top-Down-Methode auf das betroffen Kind an falls vertauscht wurde Beende die Methode falls keine Vertauschung nötig ist oder ein Blatt erreicht wurde

13 FH-Hof Aufbau des Heap - Bottom Up Bis hier bereits fertig! Vertauschen!

14 FH-Hof Aufbau des Heap - Top Down Evtl. weiter nach unten

15 FH-Hof 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

16 FH-Hof Darstellung des Heap - Beispiel

17 FH-Hof 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 bis das Array sortiert ist

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

19 FH-Hof 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

20 FH-Hof 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

21 FH-Hof 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

22 FH-Hof 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

23 FH-Hof Quicksort - Sortieren innerhalb des Array II Parameter Startpunkt: links Endpunkt: rechts Pivotelement:

24 FH-Hof Diskussion Quick Sort Aufwand im durchschnittlichen Fall: O(log(n)*n)) Aufwand im schlechtesten Fall: O(n 2 ) 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

25 FH-Hof 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?


Herunterladen ppt "FH-Hof Sortierverfahren Richard Göbel. FH-Hof Sortierte Ausgabe von Studentennamen public class Vorlesung { String bezeichnung; Dozent dozent; intsws;"

Ähnliche Präsentationen


Google-Anzeigen