SortierAlgorithmen Flashcards
(25 cards)
Tafelübung
Insertion Sort
vergleichsbasiertes Verfahren
Beim Einfügen jedes Werts wird die Liste durchlaufen und Wert an entsprechender Stelle eingefügt
Tafelübung
Insertion Sort
Komplexität
Worst Case:
Für jeden Wert durch die ganze Liste Laufen
O(n^2)
Average Case:
O(n^2)
best Case:
O(n)
Tafelübung
Selection Sort
vergleichsbasiertes Verfahren
Maximum (Minimum) auswählen und in neue Liste einfügen,
wiederholen.
Tafelübung
Selection Sort
Komplexität
Worst Case:
jedes Mal muss neues Maximum gefunden werden
O(n^2)
Average Case:
O(n^2)
best Case:
O(n^2)
Tafelübung
Vergleichsbasierte Verfahren
Def.
Verfahren, die auf paarweisen Vergleichen von Elementen
basieren
Bestenfalls: O(n log n)
Tafelübung
Heap Sort
Def.
Idee: Ein Heap ist die perfekte Datenstruktur, um ein Maximum
(Minimum) zu finden!
1. Heap aufbauen
- Wiederholen:
- Maximum (Minimum) entnehmen und
- Heap-Eigenschaft wiederherstellen
Tafelübung
Heap Sort
Komplexität
- Heap aufbauen: n mal in den Heap einfügen
O(n log n) - n mal das Maximum entnehmen und jeweils die
Heap-Eigenschaft wiederherstellen
O(n log n)
=> O(n log n)
Tafelübung
Merge Sort
»Easy split, hard join.«
Zeitkomplexität:
O(n log n)
Tafelübung
Quick Sort
Prinzip:
Split:
Ein Pivot-Element p auswählen,
die Liste in zwei Teil-Listen aufteilen (kleiner gleich p und größer gleich p)
rekursiv weitermachen
dann (ist sortiert) zusammenfügen
Tafelübung
Quick Sort
Komplexität
Optimalfall:
Halbierung in jedem Schritt
O(log n) Ebenen à O(n)
=> O(n log n)
Schlechtester Fall:
Liste schrumpft in jedem Schritt um 1-> n Ebenen
=> O(n2)
Durchschnitt:
=> O(n log n)
Tafelübung
Quick Sort: Implementierung Struktur
Quick Sort: Implementierung
Struktur ist aber immer die gleiche:
- Pivot-Element auswählen
Bei manchen Implementierungen muss ein bestimmtes
Pivot-Element (z. B. das in der Mitte) verwendet werden,
andere sind freier. - Liste/Feld aufteilen
Der schwierige Teil.
Implementierungen unterscheiden sich z. T. stark. - Teil-Listen rekursiv sortieren
Tafelübung
Implementierung - QuickSort mit partition
void quicksort(int[] a) { quicksort(a, 0, a.length); } void quicksort(int[] a, int low, int high) { if (high - low <= 1) { return; } int pivot = a[low]; int n = partition(a, low, high, pivot); quicksort(a, low, n); quicksort(a, n+1, high); }
KLAUSURAUFGABE SS18
Was ist der Unterschied zwischen vergleichsbasierten und nicht vergleichsbasierten Sortier- Algorithmen bezüglich ihrer Laufzeit-Komplexität?
eigene Lösung
Vergleichsbasierte Verfahren O(n log n)
nicht-vergleichsbasierte Verfahren O(n+m / n*k)
KLAUSURAUFGABE SS18
Zu welcher Komplexitätsklasse gehören die schnellsten Sortier-Algorithmen, wenn die Daten
in folgenden Datenstrukturen vorliegen, aber sonst nichts über die Daten bekannt ist?
• lineare, unsortierte verkettete Liste:
• unsortierte Reihung (Array):
• Halde:
- QuickSort & MergeSort O(n log n)
- QuickSort & MergeSort O(n log n)
- Fangfrage weil Halde nicht sortiert…
Genauso QuickSort, MergeSort O(n log n)
(HeapSort ?)
KLAUSURAUFGABE WS17
Welche Aussage(n) trifft/treffen auf den Quick-Sort-Algorithmus zu
- Der Index der Pivot-Variablen muss immer in der Mitte des Feldes, das
sortiert werden soll, liegen. - Der Wert der Pivot-Variablen muss immer der Mittelwert der Werte der
Elemente, die sortiert werden sollen, sein. - Der Wert der Pivot-Variablen muss immer der Median der Werte der
Elemente, die sortiert werden sollen, sein. - Eine besonders günstige Aufteilung des zu sortierenden Feldes erhält
man, wenn bei jeder Teilung ein Teilfeld mit nur einem Element entsteht,
das bereits sortiert ist. - Eine besonders günstige Aufteilung des zu sortierenden Feldes erhält
man, wenn etwa gleich große Teilfelder entstehen, die aber nicht bereits
sortiert sein müssen.
eigene Lösung
- falsch
- falsch
- falsch
- falsch
- richtig
KLAUSURAUFGABE WS17
Welche Aussage(n) trifft/treffen auf das sogenannte Radix-Sortieren zu?
- Ein Behälter kann beliebig viele Schlüssel aufnehmen. Dies kann beispielsweise
mit einer verketteten Liste pro Behälter implementiert werden. - Es gibt exakt genau so viele Behälter wie es Schlüssel gibt.
eigene Lösung
- richtig
- falsch
KLAUSURAUFGABE SS17
Welche Aussagen bzgl. Sortierverfahren sind richtig?
Die Haldensortierung (HeapSort) verbessert das einfache Sortieren durch Auswählen (SelectionSort) durch Anordnung der zu sortierenden Elemente in einer Halde (Heap).
HeapSort teilt die zu sortierende Folge in einen Haldenbereich und einen bereits sortierten
Bereich auf und ist damit ein typischer Vertreter der divide & conquer-Verfahren.
Die Wiederherstellung der Heap-Eigenschaft nach der Entnahme des Maximums dauert
O(log n).
- richtig
- falsch
- richtig
KLAUSURAUFGABE WS16
Welche Aussagen bzgl. Sortierverfahren sind richtig?
Die Haldensortierung (HeapSort) verbessert das einfache Sortieren durch Auswählen (SelectionSort) durch Anordnung der zu sortierenden Elemente in einer Halde (Heap).
HeapSort teilt die zu sortierende Folge in einen Haldenbereich und einen bereits sortierten
Bereich auf und ist damit ein typischer Vertreter der divide & conquer-Verfahren.
Die Wiederherstellung der Heap-Eigenschaft nach der Entnahme des Maximums dauert
O(log n).
- richtig
- falsch
- richtig
KLAUSURAUFGABE SS16
Zu welcher Komplexitätsklasse gehören die schnellsten in der Vorlesung behandelten Sortier- Algorithmen, wenn die Daten in folgenden Datenstrukturen vorliegen, aber sonst nichts über
die Daten bekannt ist?
- lineare, unsortierte verkettete Liste:
- unsortierte Reihung (Array):
- Halde:
- QuickSort & MergeSort O(n log n)
- QuickSort & MergeSort O(n log n)
- Fangfrage weil Halde nicht sortiert…
Genauso QuickSort, MergeSort O(n log n)
(HeapSort ?)
KLAUSURAUFGABE SS16
Aus welchen drei Schritten besteht ein Algorithmus nach dem Divide-and-Conquer-Prinzip?
Nennen Sie diese Schritte und beschreiben Sie kurz, was im Quicksort-Algorithmus in jedem
dieser Schritte abläuft. In welchem Schritt wird die eigentliche Arbeit verrichtet?
- split: Aufteilen des Problems
Split:
Ein Pivot-Element p auswählen,
die Liste in zwei Teil-Listen aufteilen: kleiner gleich und größer gleich pivot - Rekursives Lösen der Teilprobleme
Die Liste ist schon ein bisschen »sortierter« als vorher
-> (rekursiv) weitermachen! - join: Zusammenführen der Teillösungen
am Ende zusammenfügen
KLAUSURAUFGABE WS 15
Welche der folgenden Komplexitätsklassen gibt das beste im Mittel (average case) erreichbare
asymptotische Verhalten für nicht vergleichsbasiertes Sortieren an?
eigene Lösung
O(n^2)
KLAUSURAUFGABE WS 15
Welche der folgenden Komplexitätsklassen gibt das beste im Mittel (average case) erreichbare
asymptotische Verhalten für vergleichsbasiertes Sortieren an?
eigene Lösung
O(n log n)
KLAUSURAUFGABE WS 14
Welche Aussage(n) trifft/treffen auf das sogenannte Radix-Sortieren zu?
- Ein Behälter kann beliebig viele Schlüssel aufnehmen. Dies kann beispielsweise
mit einer verketteten Liste pro Behälter implementiert werden. - Wird durch Löschen von Elementen ein Behälter leer, dann genügt es,
diesen als frei zu markieren. - Um aus n Schlüsseln den Richtigen aufzufinden werden im Worst-Case
nicht weniger als O(n log(n)) Operationen benötigt. - Es gibt exakt genau so viele Behälter wie es Schlüssel gibt.
- richtig
- richtig
- falsch
- falsch
KLAUSURAUFGABE SS15 Welche Aussage(n) trifft/treffen auf den Quick-Sort-Algorithmus zu
- Der Index der Pivot-Variablen muss immer in der Mitte des Feldes, das
sortiert werden soll, liegen. - Der Wert der Pivot-Variablen muss immer der Mittelwert der Werte der
Elemente, die sortiert werden sollen, sein. - Der Wert der Pivot-Variablen muss immer der Median der Werte der
Elemente, die sortiert werden sollen, sein. - Eine besonders günstige Aufteilung des zu sortierenden Feldes erhält
man, wenn bei jeder Teilung ein Teilfeld mit nur einem Element entsteht,
das bereits sortiert ist. - Eine besonders günstige Aufteilung des zu sortierenden Feldes erhält
man, wenn etwa gleich große Teilfelder entstehen, die aber nicht bereits
sortiert sein müssen
eigene Lösung
- falsch
- falsch
- falsch
- falsch
- richtig