Sie sind auf Seite 1von 7

Ludwig-Maximilians-Universität München München, 08.06.

2023
Institut für Informatik
Prof. Dr. Thomas Seidl
Sandra Gilhuber, Philipp Jahn

Algorithmen und Datenstrukturen


SoSe 2023

Übungsblatt 7: Sortieren III


Tutorien: 12.06-16.06.2023

Aufgabe 7-1 Vergleich zwischen Sortieralgorithmen


Sortieren Sie das Array A = [42, 17, 12, 15, 4, 11, 31, 14] und vergleichen Sie die angewendeten Sortierverfah-
ren bzgl. der Anzahl der Vergleiche.

(a) Benutzen Sie QuickSort mit folgenden zwei Pivotstrategien: Letztes Arrayelement bzw. Median aus den
Elementen an Positionen 1, ⌊ n2 ⌋ und n (Position 1, falls n ≤ 3). Markieren Sie alle Pivot-Elemente.
Ein-elementige Teillisten enthalten kein Pivot-Element.

(b) Sortieren Sie außerdem mit SelectionSort und InsertionSort.

Lösungsvorschlag:
• QuickSort, Pivot = letztes Element
42,17,12,15,4,11,31,14 (+7)
12,4,11,14,42,17,15,31 (+2)
4,11,12,14,42,17,15,31 (+3)
4,11,12,14,17,15 31,42 (+1)
4,11,12,14,15,17,31,42

• QuickSort, Pivot = Median-of-three


Wir nehmen den Median der Elemente an den Positionen 1, ⌊ n2 ⌋ und n, das heißt den Median von 42,
15 und 14. Dieser Median ist 15. Damit ist 15 im ersten Schritt das Pivotelement.
Das Teilarray, das auf der rechten Seite entsteht, ist von der Länge 3, das heißt das Pivotelement ist
das erste Element des Teilarrays (die 42).
42,17,12,15,4,11,31,14 (+7 +3)
12,4,11,14,15,42,17,31 (+3)
12,4,11,14,15,42,17,31 (+3)
4,11,12,14,15,42,17,31 (+1)
4,11,12,14,15,42,17,31 (+2)
4,11,12,14,15,17,31,42 (+1)
4,11,12,14,15,17,31,42

1
Lösungsvorschlag:
• SelectionSort
42,17,12,15,4,11,31,14 (+7)
4,17,12,15,42,11,31,14 (+6)
4,11,12,15,42,17,31,14 (+5)
4,11,12,15,42,17,31,14 (+4)
4,11,12,14,42,17,31,15 (+3)
4,11,12,14,15,17,31,42 (+2)
4,11,12,14,15,17,31,42 (+1)
4,11,12,14,15,17,31,42

• InsertionSort
42,17,12,15,4,11,31,14 (+0)
42,17,12,15,4,11,31,14 (+1)
17,42,12,15,4,11,31,14 (+2)
12,17,42,15,4,11,31,14 (+3)
12,15,17,42,4,11,31,14 (+4)
4,12,15,17,42,11,31,14 (+5)
4,11,12,15,17,42,31,14 (+2)
4,11,12,15,17,31,42,14 (+5)
4,11,12,14,15,17,31,42

QuickSort, Pivot=last: 13
QuickSort, Pivot=median-of-three: 14 + 6
Selection: 28
InsertionSort: 22

Aufgabe 7-2 Hybride Sortierverfahren


Überlegen sie in allen Aufgabenteilen qualitativ. Sie müssen keine streng mathematisch korrekten Herleitungen
formulieren. Verwenden sie außerdem die aus der Vorlesung bekannten Laufzeiten
Timsort wird in der Python Implementierung CPython benutzt. Dieser Algorithmus setzt sich aus Mergesort
und Insertionsort zusammen. Timsort identifiziert in einem ersten Durchlauf Folgen von aufsteigenden, bzw.
strikt absteigenden Elementen genannt runs. Kleine runs werden dann mit Insertion-Sort gemerged, große mit
Merge-Sort.

(a) Wie bewerten Sie die Entscheidung zunächst die runs zu identifizieren?

(b) Geben Sie die Laufzeit für den Best- und Worst-Case an.

Lösungsvorschlag:
TimSort)
a) Dies erscheint sinnvoll, da in der Praxis komplett ungeordnete Daten selten vorkommen. Auch kann
das Merging beschleunigt werden, wenn bekannt ist, das ein run absteigend ist.
b) Best-Case: Bereits sortiert: Dies wird im ersten Durchlauf zur Identifizierung der runs erkannt ⇒
O(N ). Worst Case: Wie Mergesort O(N · log(N )). Insertion-Sort kann vernachlässigt werden, da er stets
für eine konstant lange Teilliste aufgerufen wird und dann in O(1) läuft.

2
Aufgabe 7-3 Multiple Choice zum Thema Sortieralgorithmen

(a) Die folgende Liste (41, 12, 43, 1, 8, 6, 44, 17, 82, 50, 42) wird anhand von QuickSort sortiert.
Nach der 1. Iteration des Algorithmus schaut die Liste wie folgt aus:
(12, 1, 8, 6, 17, 41, 43, 44, 82, 50, 42)
Welche Regeln können in dieser Iteration das Pivot-Element bestimmt haben?

Das Pivot-Element ist...


1 ...das erste Element der Liste

2 ...das mittlere Element der Liste

3 ...das letzte Element der Liste

4 ...der Median der Liste

5 ...der Median des ersten, mittleren und letzten Elements

6 ...ein zufällig ausgewähltes Element

(b) Welche der folgenden Sortieralgorithmen gelten als stabil?

1 BubbleSort

2 SelectionSort

3 InsertionSort

4 MergeSort

5 QuickSort

(c) Was ist die richtige Reihenfolge der Algorithmen bezüglich ihrer best-case Komplexität?

1 QuickSort >BubbleSort >SelectionSort >InsertionSort

2 InsertionSort = BubbleSort <SelectionSort = QuickSort

3 BubbleSort <SelectionSort <QuickSort <InsertionSort

4 SelectionSort >QuickSort >BubbleSort >InsertionSort

5 QuickSort = BubbleSort <InsertionSort = SelectionSort

6 InsertionSort <QuickSort <SelectionSort = BubbleSort

3
(d) Welcher Sortieralgorithmus hat die kleinste worst-case Komplexität?

1 HeapSort

2 InsertionSort

3 QuickSort

4 BubbleSort

(e) Die Liste (42, 2, 14, 21, 46, 1, 19, 66) wird mithilfe von MergeSort sortiert. Wie schaut die Liste nach
der zweite Iteration der Merge-Phase aus?

1 1, 2, 19, 14, 66, 46, 42, 21

2 2, 14, 21, 42, 1, 19, 46, 66

3 2, 42, 14, 21, 1, 46, 19, 66

4 19, 14, 2, 1, 66, 42, 46, 21

5 1, 2, 42, 14, 21, 46, 19, 66

6 2, 14, 21, 1, 19, 42, 46, 66

(f) Die sortierte Liste: (1, 2, 6, 12, 17, 22, 26, 90, 99, 100, 112) wird um die Zahlen 3 und 10 ergänzt:
(1, 2, 6, 12, 17, 22, 26, 90, 99, 100, 112, 3, 10)
Welcher Algorithmus sortiert die Liste am effizientesten?

1 QuickSort mit dem ersten Element als Pivot

2 InsertionSort

3 SelectionSort

4 BubbleSort

(g) Welche Aussagen über HeapSort sind richtig?

1 Eine Heap-Struktur ist ein vollständig balancierter Binärbaum.

2 HeapSort basiert auf SelectionSort.

3 Der benötigte Speicherplatz für HeapSort erhöht sich nach jeder Iteration des Algorithmus

4 Bezüglich der Zeitkomplexität, ist HeapSort in jeder Hinsicht (best-, avg- und worst-case)
besser als SelectionSort.
5 HeapSort ist stabil.

6 Bezüglich der Zeitkomplexität, ist HeapSort in jeder Hinsicht (best-, avg- und worst-case)
besser als BubbleSort.

4
(h) BONUS FRAGE
In der Vorlesung haben wir sechs Sortieralgorithmen genauer betrachtet. Recherchiere nun selbstständig
im Internet und informiere dich über den Algorithmus BogoSort.
Welche Aussagen sind richtig?

1 Die best-case Laufzeit von BogoSort ist besser als die best-case Laufzeit der besprochenen
Algorithmen
2 Die sort() Methode in Python basiert auf BogoSort.

3 Die worst-case Laufzeit von BogoSort ist schlechter als die worst-case Laufzeit von Bubble-
Sort.
4 Mit BogoSort können unsortierte Listen in besonderen Fällen in nur einer Iteration sortiert
werden.
5 BogoSort ist nicht stabil.

6 BogoSort ist sehr geeignet, um Listen zu sortieren, die vorsortierte Teillisten enthalten.

(i) Bewertung Multiple Choice Aufgaben:


Bei diesen obigen Multiple Choice-Aufgaben können mehrere Aussagen pro Block richtig sein. Überlegen
Sie, wie viele Punkte Sie für die obigen Aufgaben bekommen hätten. Jeder Fragenblock ist hier jeweils
so viele Punkte wert wie es Fragen gibt. Pro richtiger Antwort gibt es einen Punkt und pro falscher Ant-
wort gibt es einen Punktabzug. Das heißt z.B. bei sechs Fragen im Block gibt es die folgende Anzahl an
Punkte für richtige Antworten:

Anzahl richtige Antworten 1 2 3 4 5 6


Punkte 0 0 0 1 2 3

5
Lösungsvorschlag:
(a) Richtig sind 1, 4, 5, 6.
Abkürzung Median von erstes, mittleres und letztes Element“: EML Meidan

Man merkt, dass hier 41 als Pivot gewählt wurde. Er gilt als erstes Element der Liste, Median der Liste
(Sortierte Liste: 1, 6, 8, 12, 17, 41, 43, 44, 50, 82, 84) und EML Median (Erstes: 41; Mittleres: 6; Letztes:
42; sortiert: 6, 41, 42). Außerdem könnte man immer davon ausgehen, dass ein Element zufällig gewählt
wurde.

(b) Richtig sind 1, 3, 4.


Gegenbeispiel für SelectionSort: (2a, 2b, 1a) wird zu (1a, 2b, 2a) sortiert.
Für QuickSort, siehe aufgabe 6-2.

(c) Richtig ist 6.


Best-Case für InsertionSort = O(N ), QuickSort = O(N · log(N )), SelectionSort = O(N 2 ) und BubbleSort
= O(N 2 )
Es gibt eine Verbessserung von BubbleSort bei der die äußere Schleife abgebrochen wird, wenn kein Swap
innerhalb der inneren Schleife stattfindet. Dieser ’verbesserte BubbleSort’ hätte eine best-case Komplexität
von O(n). Mit dieser Modifikation wäre dies die Reihenfolge: verbesserter BubbleSort = InsertionSort
<QuickSort <SelectionSort = BubbleSort

(d) Richtig ist 1.


Worst-Case für BubbleSort = InsertionSort = QuickSort = O(N 2 ), HeapSort = O(N · log(N ))

(e) Richtig ist 2.


Die Permutationen 1 und 4 haben kaum mit unsere Algorithmen zu tun.
Nummer 5 stellt die zweite Iteration von SelectionSort dar, während 6 die von BubbleSort darstellt.
Bei der ersten Iteration der Merge-Phase, sollten alle Paare von Zahlen sortiert sein. Somit würde die erste
Iteration wie in 3 aussehen.
Nach der zweiten Iteration sind jeweils Gruppen a vier Zahlen sortiert, also (2, 14, 21, 42, 1, 19, 46, 66).

(f) Richtig ist 2.


Für eine Liste, die meistens vorsortiert ist, befinden sich BubbleSort und SelectionSort in O(N 2 ).
QuickSort mit erstem Element als Pivot würde hier nicht viel Sinn ergeben, da der Pivot fast immer für den
Worst-Case zuständig wäre.
InsertionSort braucht dagegen O(N ), da eine vorsortierte Liste den Best-Case entspricht.

(g) Richtig sind 2, 4, 6.


Eine Heap-Struktur ist kein vollständig balancierter Binärbaum, sondern nur links-vollständig.
Der benötigte Speicherplatz für HeapSort inkrementiert nicht. Im Gegenteil, durch eine Einbettung der
Heap in die ursprüngliche Liste, wird gar keine zusätzliche Speicherplatz benötigt.
Verbesserter BubbleSort hat einen besseren Best-Case als HeapSort, aber normaler Bubblesort ist stets
schlechter in Hinsicht auf die Zeitkomplexität.
Heapsort ist nicht stabil. Gegenbeispiel mit MaxHeap: (5, 4a, 4b, 1, 2) wird zu (1, 2, 4b, 4a, 5).

(h) Richtig sind 3, 4, 5.


Bogosort ist ein sehr ineffizienter Algorithmus, der zufällige Permutationen der Elemente einer Liste bildet.
Falls diese Permutation eine sortierte Liste ist, dann passt, ansonsten wiederholt er diesen Prozess.
Die Wikipedia-Seite beinhaltet ausreichende Informationen, um diese Aufgabe zu lösen: htt-
ps://de.wikipedia.org/wiki/Bogosort .

6
Aufgabe 7-4 Alternatives Sortieren
Gegeben sind Namen von A-Z und eine Hashingfunktion f, welche die Namen anhand ihres ersten Buchstabes
in ein Array mit 26 verketteten Listen an das Ende der dazugehörigen Liste hängt.

(a) diskutieren sie die Vorteile dieser Vorgehensweise

(b) diskutieren sie die Nachteile dieser Vorgehensweise

Lösungsvorschlag:
Vorteile: einfach, intuitiv, simple zu implementieren
Nachteile: Häufungen an einzelnen Namen, möglicherweise lange Suchzeiten bei hohem Füllgrad

Nun ist statt verketteten Listen jeweils noch ein Array mit 26 Feldern in jedem Feld dieses ersten Arrays. Die
Funktion g hängt dort die eingehenden Namen anhand des 2. Buchstabens in die jeweiligen Namens an.

(a) diskutieren sie die Vorteile dieser Variante

(b) diskutieren sie die Nachteile dieser Variante

(c) wäre die Verteilung auf die einzelnen Felder besser, wenn statt des 2. Buchstabens der 3. genommen
würde?

(d) versuchen sie bessere Vorgehensweisen für eine Einordnung von Namen zu finden. Bewerten sie diese
anhand von Verteilung und vorrausichtlicher Suchdauer.

Lösungsvorschlag:
Vorteil: schnellere Suchzeit als 1. Variante durch mehr Verzweigungen.
Nachteile: mehr Grundaufwand, phonetische bedingte Häufungen von 2. Buchstaben
3. Buchstabe: eventuell bessere Verteilung, da phonetische Zusammenhänge teils umgangen werden können.
Unklar was bei sehr kurzen Namen passiert (zB To)
mögliche Alternativen: Namen an Baumstruktur einordnen, Aus Buchstabensumme (1-26 aufsummieren)
modulu 26 rechnen...

Das könnte Ihnen auch gefallen