Newer
Older
\section{Eigenschaften von Sortieralgorithmen}
\subsection{Laufzeit}
Wir haben bereits umfangreiche Laufzeitanalysen von Sortieralgorithmen durchgeführt. Die Qualität eines
Sortieralgorithmus anhand seines best/worst/average-case-Verhaltens zu beurteilen, scheint also naheliegend.
\subsection{worst-case-optimal}
Im Zusammenhang von vergleichsbasierten Sortieralgorithmen bedeutet die Eigenschaft worst-case-optimal, dass die
Untergrenze von $Ω(n \log n)$ auch die asymptotische Obergrenze ist, also die worst-case-Laufzeit in i$Θ(n \log n)$
liegt.
\subsection{Stabilität}
Ein Sortieralgorithmus ist stabil, wenn durch das Sortieren die Reihenfolge innerhalb bezüglich der Quasiordnung
gleicher Elemente gewährleistet ist.
Formaler:
\begin{definition}[Stabilität]
Sei $[x_0, x_1, \cdots, x_{n-1}]$ ein Array bzw eine Sequenz von $n$ Elementen aus der Menge $X$. Unterhalte
$X$ eine totale Quasiordnung, unter derer ``Gleichheit'' von $x, x' \in X$ mit $x \equiv x'$ bezeichnet wird. Sei das
Wirken des Sortieralgorithmus $f$ eine Permutation $π \in \text{Perm}(n)$, also $f([x_0, \cdots x_{n-1}]) =
[x_{π(0)}, x_{π(1)}, \cdots, x_{π(n-1)}]$.
Dann ist unser Sortieralgorithmus stabil, wenn gilt:
\[
x_i \equiv x_{i'} \text{ und } i \leq i' \text{ impliziert } π(i) \leq π(i').
\]
\end{definition}
\subsection{in-place}
Als \emph{in-place} bezeichnet man die Eigenschaft eines Sortieralgorithmus, neben dem Speicherverbrauch des Inputarrays
nur einen konstanten zusätzlichen Speicherverbrauch zu haben. Es ist also $S_{\text{alg}} \in \mathcal{O}(1)$.
Gelegentlich wird auch Speicherverbrauch von $\mathcal{O}(\log n)$ noch als \emph{in-place} bezeichnet.
\subsection{Adaptivität}
Als adaptiv bezeichnet man einen Sortieralgorithmus, der kürzere Laufzeiten hat, wenn Teile des Arrays bereits sortiert
sind. Insbesondere muss der best-case also in $\mathcal{O}(n)$ liegen. Diese Definition lässt sich mittels
Fehlstellungen präzisieren:
\begin{definition}[Fehlstände und Fehlstandszahl]
Sei $A$ eine geordnete Menge und sei $[a_1, \dots, a_n] \in A^n$ eine Folge von Elementen in $A$. Die Anzahl der
Fehlstände bezüglich $a_i$ ist
\[
f_i := |\{a_j : j > i, a_j < a_i \}|,
\]
also alle Elemente die rechts von $a_i$ liegen, obwohl sie bei einer geordneten Folge links von $a_i$ liegen sollten.
Die Summe aller Fehlstände einer solchen Folge ist die Fehlstandszahl
\[
F([a_1, \dots, a_n]) := \sum_{i=1}^n f_i.
\]
\end{definition}
Die Fehlstandszahl ist $F([1,2,3, \dots ,n]) = 0$, falls wir eine vollständig sortierte Folge haben, ist bei einer
einzelnen Vertauschung von zwei Nachbarn $1$ und wir bei einem invers sortierten Array maximiert:
$F([n,n-1,\dots,1]) = \sum_{i=1}^{n-1} i = \frac{n^2 - n}{2}$.
Adaptiv im strengeren Sinne bedeutet nun, dass sich die (asymptotische) Laufzeit auch in Abhängigkeit zu den Fehlständen
ausdrücken lässt und geringer wird, wenn weniger Fehlstände vorliegen.
Allerdings wird die Definition von adaptiv landläufig auch etwas lockerer gehandhabt und umfasst auch das Erkennen invers sortierter
Teilsequenzen. Diese stellen in unserer Definition aber gerade den maximal schlimmsten Fall dar.
\subsection{Parallelisierbarkeit}
Sowohl auf dem PC, als auch im Smartphone und inbesondere in einem Rechenzentrum wird zusätzliche Rechenleistung fast
nurnoch durch parallele Architekturen erreicht. Damit gewinnt auch die Frage nach paralleisierbarkt größere Bedeutung.
Aus einer theoretischen Perspektive nimmt man dabei oftmals unbegrenzt viele parallele Prozessoren an.