Sortierverfahren Susanne Freitag. Vorkenntnisse der Schüler (12. Klasse GK) Begrifflichkeiten:...

27
Sortierverfahren Sortierverfahren Susanne Freitag Susanne Freitag

Transcript of Sortierverfahren Susanne Freitag. Vorkenntnisse der Schüler (12. Klasse GK) Begrifflichkeiten:...

SortierverfahrenSortierverfahren

Susanne FreitagSusanne Freitag

Vorkenntnisse der Schüler Vorkenntnisse der Schüler (12. Klasse GK)(12. Klasse GK)

Begrifflichkeiten: Algorithmus, Begrifflichkeiten: Algorithmus, Rekursion, usw.Rekursion, usw.

Programmiergrundkenntnisse: if-Programmiergrundkenntnisse: if-Konstrukt, Schleifen, Methoden- Konstrukt, Schleifen, Methoden- bzw. Prozeduraufrufe, ….bzw. Prozeduraufrufe, ….

Datentypen: native Datentypen, Datentypen: native Datentypen, Arrays, Listen, u. Ä.Arrays, Listen, u. Ä.

UnterrichtsentwurfUnterrichtsentwurf- - Einführung in Einführung in

Sortieralgorithmen -Sortieralgorithmen - MotivationsaufbauMotivationsaufbau

es werden 4 Kleingruppen gebildet und jeder Gruppe es werden 4 Kleingruppen gebildet und jeder Gruppe wird ein unvollständiger Satz eines Kartenspiels wird ein unvollständiger Satz eines Kartenspiels zugeteiltzugeteilt

jede Gruppe erhält die Beschreibung eines jede Gruppe erhält die Beschreibung eines Sortieralgorithmus demzufolge das Kartenspiel Sortieralgorithmus demzufolge das Kartenspiel sortiert werden soll (von 2 bis As, gleiche Werte in sortiert werden soll (von 2 bis As, gleiche Werte in der Reihenfolge Pik, Kreuz, Herz, Karo)der Reihenfolge Pik, Kreuz, Herz, Karo)

die Aufgabe der Gruppen ist es, die Karten die Aufgabe der Gruppen ist es, die Karten schnellstmöglich zu sortieren, wobei es 4 schnellstmöglich zu sortieren, wobei es 4 verschiedene Anordnungen gibtverschiedene Anordnungen gibt

die zum Lösen der Aufgabe jeweils benötigten Zeiten die zum Lösen der Aufgabe jeweils benötigten Zeiten werden an der Tafel notiertwerden an der Tafel notiert

Die 4 AnordnungenDie 4 Anordnungen

Anordnung 1:Anordnung 1: die Karten liegen gemischt die Karten liegen gemischt vor, Sortieralgorithmus Selection Sortvor, Sortieralgorithmus Selection Sort

Anordnung 2:Anordnung 2: die Karten liegen fast die Karten liegen fast sortiert vor, Sortieralgorithmus Selection sortiert vor, Sortieralgorithmus Selection SortSort

Anordnung 3:Anordnung 3: die Karten liegen gemischt die Karten liegen gemischt vor, Sortieralgorithmus Insertion Sortvor, Sortieralgorithmus Insertion Sort

Anordnung 4:Anordnung 4: die Karten liegen fast die Karten liegen fast sortiert vor, Sortieralgorithmus Insertion sortiert vor, Sortieralgorithmus Insertion SortSort

SortieranweisungenSortieranweisungen

Selection Sort:Selection Sort: Sucht die niedrigste Karte Sucht die niedrigste Karte aus dem Stapel heraus und legt sie vor aus dem Stapel heraus und legt sie vor euch, sucht dann die niedrigste Karte aus euch, sucht dann die niedrigste Karte aus dem restlichen Stapel usw. bis der Stapel dem restlichen Stapel usw. bis der Stapel fertig sortiert auf dem Tisch liegt.fertig sortiert auf dem Tisch liegt.

Insertion Sort:Insertion Sort: Nehmt die oberste Karte Nehmt die oberste Karte vom Stapel weg. Vergleicht dann jeweils die vom Stapel weg. Vergleicht dann jeweils die oberste Karte des noch unsortierten Stapels oberste Karte des noch unsortierten Stapels mit dem bereits sortierten Teilstapel und mit dem bereits sortierten Teilstapel und fügt sie an der richtigen Stelle ein.fügt sie an der richtigen Stelle ein.

Mögliche VariationenMögliche Variationen Je nach Kursgröße kann es noch eine weitere Je nach Kursgröße kann es noch eine weitere

Gruppe geben, die einen Quasi-Mergesort Gruppe geben, die einen Quasi-Mergesort durchführtdurchführt- Anweisung hierzu beispielsweise: - Anweisung hierzu beispielsweise:

Teilt den Stapel zunächst in vier Stapel Teilt den Stapel zunächst in vier Stapel (Pik-Kreuz-(Pik-Kreuz- Herz-Karo), sortiert jeden Herz-Karo), sortiert jeden dieser Stapel in sich dieser Stapel in sich aufsteigend und aufsteigend und fügt die vier Stapel dann zu fügt die vier Stapel dann zu einem einem zusammen.zusammen.

Wenn die Kursgröße eine Einteilung in 8 Wenn die Kursgröße eine Einteilung in 8 Kleingruppen zuläßt, kann man zusätzlich Kleingruppen zuläßt, kann man zusätzlich noch die Größe der Kartenstapel variieren.noch die Größe der Kartenstapel variieren.

AllgemeinesAllgemeines Sortieren: der Prozess des Anordnens einer Sortieren: der Prozess des Anordnens einer

gegebenen Menge von Objekten in einer bestimmten gegebenen Menge von Objekten in einer bestimmten Ordnung. Die Ordnung hängt von der Art der Objekte Ordnung. Die Ordnung hängt von der Art der Objekte ab. ab.

Das Sortieren von Daten nach bestimmten Kriterien Das Sortieren von Daten nach bestimmten Kriterien gehört zu den wichtigsten Problemen der Informatik. gehört zu den wichtigsten Problemen der Informatik.

Sortierte Daten erleichtern Suche erheblichSortierte Daten erleichtern Suche erheblich Bei großen Datenmengen ist es wichtig, daß effiziente Bei großen Datenmengen ist es wichtig, daß effiziente

Algorithmen zur Verfügung stehen. Algorithmen zur Verfügung stehen. Die verschiedenen Algorithmen haben alle Vor- und Die verschiedenen Algorithmen haben alle Vor- und

Nachteile, je nachdem auf welche Daten man sie Nachteile, je nachdem auf welche Daten man sie anwendet. So kann je nach Datenbestand der anwendet. So kann je nach Datenbestand der „schlechteste“ Algorithmus am schnellsten fertig sein. „schlechteste“ Algorithmus am schnellsten fertig sein. Stichwort: Effizienz eines Sortieralgorithmus.Stichwort: Effizienz eines Sortieralgorithmus.

Beispiele für sortierte Mengen im Alltag: Telefonbuch, Beispiele für sortierte Mengen im Alltag: Telefonbuch, Lexika, WörterbücherLexika, Wörterbücher

Erläuterung der Erläuterung der SortieralgorithmenSortieralgorithmen

Folgende Sortieralgorithmen sollen Folgende Sortieralgorithmen sollen vorgestellt werden:vorgestellt werden: Selection Sort & Insertion Sort (kurze Selection Sort & Insertion Sort (kurze

Erläuterung anhand der Erläuterung anhand der Vorgehensweise beim Kartenspiel)Vorgehensweise beim Kartenspiel)

Bubble SortBubble Sort Quick SortQuick Sort Merge SortMerge Sort

Selection SortSelection Sort Prinzip: das kleinste Element eines Feldes Prinzip: das kleinste Element eines Feldes

suchen, und dieses dann mit dem ersten suchen, und dieses dann mit dem ersten Element tauschenElement tauschen

Zu Beginn sucht man im ganzen Feld nach dem Zu Beginn sucht man im ganzen Feld nach dem kleinsten Element und tauscht mit dem ersten kleinsten Element und tauscht mit dem ersten Element. Element.

Danach sucht man im Restfeld ohne erstes Danach sucht man im Restfeld ohne erstes Element nach dem kleinsten Element und Element nach dem kleinsten Element und tauscht mit dem ersten Element des Restfeldes.tauscht mit dem ersten Element des Restfeldes.

Dies wiederholt man, bis das zweitgrößte Dies wiederholt man, bis das zweitgrößte Element an den korrekten Platz gebracht wurde. Element an den korrekten Platz gebracht wurde.

Selection Sort (Beispiel)Selection Sort (Beispiel)

55 3737 1313 2121 22 1414

unsortiertunsortiert

22 3737 1313 2121 55 1414

s.s. unsortiertunsortiert

22 55 1313 2121 3737 1414

sortiertsortiert unsortiertunsortiert

Insertion SortInsertion Sort Prinzip: das erste Element eines Prinzip: das erste Element eines

unsortierten Feldes wird an der richtigen unsortierten Feldes wird an der richtigen Stelle in ein sortiertes Feld eingefügtStelle in ein sortiertes Feld eingefügt

Zunächst besteht der sortierte Teil nur Zunächst besteht der sortierte Teil nur aus dem ersten Element.aus dem ersten Element.

Das erste Element der unsortierten Folge Das erste Element der unsortierten Folge wird nun solange mit dem vorherigen wird nun solange mit dem vorherigen getauscht, solange es kleiner als das getauscht, solange es kleiner als das vorherige ist.  vorherige ist. 

Dies wird solange wiederholt, bis das Dies wird solange wiederholt, bis das gesamte Feld sortiert vorliegt. gesamte Feld sortiert vorliegt.

Insertion Sort (Beispiel)Insertion Sort (Beispiel)

55 1313 3737 2121 22 1414

sortiertsortiert unsortiertunsortiert

55 3737 1313 2121 22 1414

s.s. unsortiertunsortiert

55 3737 1313 2121 22 1414

sortiertsortiert unsortiertunsortiert

Bubble SortBubble Sort Prinzip: das Feld wird durchlaufen und dabei Prinzip: das Feld wird durchlaufen und dabei

so getauscht, dass das größte bzw. kleinste so getauscht, dass das größte bzw. kleinste Element an der richtigen Stelle steht. Element an der richtigen Stelle steht.

Beginn am Ende des Feldes. Tausch Beginn am Ende des Feldes. Tausch benachbarter Elemente, wenn ein Element benachbarter Elemente, wenn ein Element kleiner als sein Vorgänger ist. Das kleinste kleiner als sein Vorgänger ist. Das kleinste Element steht nach einem Durchlauf am Element steht nach einem Durchlauf am Anfang des Feldes. Anfang des Feldes.

Wiederholung des Vorgangs ohne Einbezug Wiederholung des Vorgangs ohne Einbezug des bereits sortierten Feldanteils bis das Feld des bereits sortierten Feldanteils bis das Feld vollständig sortiert vorliegt.vollständig sortiert vorliegt.

Die Sortierung wird beendet sobald kein Die Sortierung wird beendet sobald kein Tausch während eines Durchlaufs Tausch während eines Durchlaufs stattgefunden hat.stattgefunden hat.

Bubble Sort (Beispiel)Bubble Sort (Beispiel)

22 55 1313 3737 1414 2121

sortiertsortiert unsortiertunsortiert

22 55 3737 1313 2121 1414

s.s. unsortiertunsortiert

55 3737 1313 2121 22 1414

unsortiertunsortiert

Quick SortQuick Sort Prinzip: „Divide and Conquer“, also Sortieren durch Prinzip: „Divide and Conquer“, also Sortieren durch

Zerlegen in einzelne Teilfolgen. RekursiverZerlegen in einzelne Teilfolgen. Rekursiver Sortieralgorithmus. Sortieralgorithmus.

Zunächst Wahl eines willkürlichen Zunächst Wahl eines willkürlichen Vergleichselementes (Wert in der Mitte der Folge). Vergleichselementes (Wert in der Mitte der Folge). Zwei Zeiger durchlaufen das Feld von links bzw. Zwei Zeiger durchlaufen das Feld von links bzw. rechts. Außerdem muß man aufgrund des rekursiven rechts. Außerdem muß man aufgrund des rekursiven Aufbaus die Anfangs- und Endstelle des Felds Aufbaus die Anfangs- und Endstelle des Felds angeben.angeben.

Der linke Zeiger läuft vom Anfang aus bis ein Der linke Zeiger läuft vom Anfang aus bis ein Element gefunden wird, das größer oder gleich dem Element gefunden wird, das größer oder gleich dem Vergleichselement ist. Der rechte Zeiger läuft vom Vergleichselement ist. Der rechte Zeiger läuft vom Ende aus bis ein Element gefunden wird, das kleiner Ende aus bis ein Element gefunden wird, das kleiner oder gleich dem Vergleichselement ist.oder gleich dem Vergleichselement ist.

Quick Sort (Fortsetzung)Quick Sort (Fortsetzung) Zeigt der linke Zeiger auf ein größeres Element als Zeigt der linke Zeiger auf ein größeres Element als

der rechte, so werden beide Elemente getauscht. Dies der rechte, so werden beide Elemente getauscht. Dies wiederholt man, bis die beiden Zeiger aneinander wiederholt man, bis die beiden Zeiger aneinander vorbeigelaufen sind. Man erhält zwei Folgen, eine vorbeigelaufen sind. Man erhält zwei Folgen, eine kleiner und eine größer als das Vergleichselement. kleiner und eine größer als das Vergleichselement.

Nun ruft man Quick Sort mit den Teilfolgen rekursiv Nun ruft man Quick Sort mit den Teilfolgen rekursiv wieder auf. Als Grenzen übergibt man den Feldanfang wieder auf. Als Grenzen übergibt man den Feldanfang und den rechten Zeiger sowie den linken Zeiger und und den rechten Zeiger sowie den linken Zeiger und das Feldende. Die Teilfolgen werden wie beschrieben das Feldende. Die Teilfolgen werden wie beschrieben zu neuen Teilfolgen sortiert und wieder geteilt.zu neuen Teilfolgen sortiert und wieder geteilt.

Die Abbruchbedingung ist erreicht, wenn die Teilfolge Die Abbruchbedingung ist erreicht, wenn die Teilfolge nur noch aus einem Element besteht. Das Feld wird nur noch aus einem Element besteht. Das Feld wird nun sortiert wieder zusammengesetzt.nun sortiert wieder zusammengesetzt.

Quick Sort (Beispiel)Quick Sort (Beispiel)

55 3737 1313 2121 22 1313

ll vv rr

55 3737 1313 2121 22 1313

ll vv rr

55 1313 1313 2121 22 3737

l, vl, v rr

55 1313 22 2121 1313 3737

rr ll vv

Merge SortMerge Sort Prinzip: Das Feld wird zu Beginn rekursiv in Prinzip: Das Feld wird zu Beginn rekursiv in

einzelne Teilfelder zerlegt, bis jedes Feld nur einzelne Teilfelder zerlegt, bis jedes Feld nur noch die Größe von einem Element hat. noch die Größe von einem Element hat. Rekursiver Sortieralgorithmus.Rekursiver Sortieralgorithmus.

Einelementige Teilfelder sind stets sortiert.Einelementige Teilfelder sind stets sortiert. Nun werden je zwei Teilfolgen zusammen in Nun werden je zwei Teilfolgen zusammen in

ein Hilfsfeld sortiert, indem beide Teilfolgen ein Hilfsfeld sortiert, indem beide Teilfolgen von vorne nach hinten durchlaufen werden von vorne nach hinten durchlaufen werden und das jeweils kleinere Element in das und das jeweils kleinere Element in das Hilfsfeld übertragen wird.Hilfsfeld übertragen wird.

Dieser Vorgang wird solange wiederholt bis Dieser Vorgang wird solange wiederholt bis alle Teilfolgen (Hilfsfolgen) alle Teilfolgen (Hilfsfolgen) zusammengemischt vorliegen. Das Feld ist zusammengemischt vorliegen. Das Feld ist nun sortiert.nun sortiert.

Merge Sort (Beispiel)Merge Sort (Beispiel)

s. Tafels. Tafel

Diskussion: Welche Variablen haben Diskussion: Welche Variablen haben Einfluß auf die Sortiergeschwindigkeit?Einfluß auf die Sortiergeschwindigkeit?

Anzahl der VergleicheAnzahl der Vergleiche Anzahl der TauschvorgängeAnzahl der Tauschvorgänge Sortierte vs. unsortierte vs. umgekehrt Sortierte vs. unsortierte vs. umgekehrt

sortierte Feldersortierte FelderBsp.: Vorsortierung beim Insertion Sort sehr Bsp.: Vorsortierung beim Insertion Sort sehr hilfreich, beim Selection Sort aber egal hilfreich, beim Selection Sort aber egal

Größe des zu sortierenden FeldesGröße des zu sortierenden Feldes Parallelisierbarkeit, Bsp.: Geschwindigkeit des Parallelisierbarkeit, Bsp.: Geschwindigkeit des

Merge Sort hängt ab von der Anzahl der Merge Sort hängt ab von der Anzahl der Mitsortierer Mitsortierer

Fazit: Oft liefern verschiedene Algorithmen Fazit: Oft liefern verschiedene Algorithmen das gleiche Ergebnis, benötigen dafür aber das gleiche Ergebnis, benötigen dafür aber unterschiedlich lange Zeit.unterschiedlich lange Zeit.

Simulation durch Simulation durch ProgrammProgramm

Programm, das den Ablauf der Programm, das den Ablauf der Sortierung verdeutlicht und dabei Sortierung verdeutlicht und dabei die Anzahl der Vergleiche sowie die die Anzahl der Vergleiche sowie die Anzahl der Tauschoperationen zähltAnzahl der Tauschoperationen zählt

Geschwindigkeitsunterschiede gut Geschwindigkeitsunterschiede gut sichtbarsichtbar

Menge und Art der Daten Menge und Art der Daten einstellbareinstellbar

Zeitwertetabelle Zeitwertetabelle (beispielhaft)(beispielhaft)

Fall 1: zufällig sortierte FelderFall 1: zufällig sortierte Felder

10001000 50005000 1000010000 100000100000

BubbleBubble 2020 210210 10411041 241557241557

QuickQuick 00 00 1010 8080

MergeMerge 1010 1010 2020 130130

Zeitwertetabelle Zeitwertetabelle FortsetzungFortsetzung

Fall 2: fast sortierte FelderFall 2: fast sortierte Felder

10001000 50005000 1000010000 100001000000

BubbleBubble 2020 200200 811811 --

QuickQuick 00 00 1010 3535

MergeMerge 00 1010 2020 120120

Zeitwertetabelle Zeitwertetabelle FortsetzungFortsetzung

Fall 3: umgekehrt sortierte FelderFall 3: umgekehrt sortierte Felder

10001000 50005000 1000010000 100001000000

BubbleBubble 3030 610610 24602460 --

QuickQuick 00 1010 1010 5050

MergeMerge 00 1010 2020 120120

LaufzeitverhaltenLaufzeitverhalten

Da Speicher und Rechenzeit begrenzt sind, ist Da Speicher und Rechenzeit begrenzt sind, ist die Effizienz eines Algorithmus wichtig.die Effizienz eines Algorithmus wichtig.

Die sog. O-Notation ermöglicht eine Abschätzung Die sog. O-Notation ermöglicht eine Abschätzung des Verhaltens eines Algorithmus gegenüber des Verhaltens eines Algorithmus gegenüber einer variablen Problemgröße (hier: Menge der einer variablen Problemgröße (hier: Menge der zu sortierenden Daten) und damit einen zu sortierenden Daten) und damit einen Vergleich der verschiedenen Sortierverfahren Vergleich der verschiedenen Sortierverfahren bei einer konkreten Problemgröße. bei einer konkreten Problemgröße.

So kann ein Algorithmus ggf. für die Lösung So kann ein Algorithmus ggf. für die Lösung eines Problems verworfen werden.eines Problems verworfen werden.Bsp.: Liegt ein Algorithmus in O(n²), dann ist bei Bsp.: Liegt ein Algorithmus in O(n²), dann ist bei einem doppelt so großen Problem mit einer einem doppelt so großen Problem mit einer vierfachen Laufzeit zu rechnen.vierfachen Laufzeit zu rechnen.

AlternativenAlternativen Den von den Schülern erstellten Code in Den von den Schülern erstellten Code in

ein Benchmark-Programm einbinden und ein Benchmark-Programm einbinden und die Laufzeit für vorgefertigte Datensätze die Laufzeit für vorgefertigte Datensätze messen.messen.

Möglicherweise in Form eines Möglicherweise in Form eines Wettbewerbs, welcher Schüler den Wettbewerbs, welcher Schüler den schnellsten Sortieralgorithmus schnellsten Sortieralgorithmus programmiert hat.programmiert hat.

HausaufgabenHausaufgaben

Erstellen von Code für einen beliebig Erstellen von Code für einen beliebig wählbaren Sortieralgorithmuswählbaren Sortieralgorithmus

Überlege welches Best- und Überlege welches Best- und Worstcase-Szenarien für die Worstcase-Szenarien für die vorgestellten Sortierverfahren sind.vorgestellten Sortierverfahren sind.