\documentclass{bschlangaul-aufgabe}

\begin{document}
\bAufgabenMetadaten{
  Titel = {Aufgabe 1},
  Thematik = {k-kleinste Elemente},
  Referenz = 66115-2019-F.T2-A1,
  RelativerPfad = Examen/66115/2019/03/Thema-2/Aufgabe-1.tex,
  ZitatSchluessel = examen:66115:2019:03,
  BearbeitungsStand = mit Lösung,
  Korrektheit = unbekannt,
  Ueberprueft = {unbekannt},
  Stichwoerter = {Halde (Heap)},
  EinzelpruefungsNr = 66115,
  Jahr = 2019,
  Monat = 03,
  ThemaNr = 2,
  AufgabeNr = 1,
}

Gegeben sei eine unsortierte Liste von $n$ verschiedenen natürlichen
Zahlen. Das $k$-kleinste Element ist das Element, das größer als genau
$k - 1$ Elemente der Liste ist.
\index{Halde (Heap)}
\footcite{examen:66115:2019:03}

\begin{enumerate}

%%
% (a)
%%

\item Geben Sie einen Algorithmus mit Laufzeit $\mathcal{O}(n \cdot \log
n)$ an, um das $k$-kleinste Element zu berechnen.

\begin{bAntwort}
\bFussnoteUrl{https://en.wikipedia.org/wiki/Quickselect}
\end{bAntwort}

%%
% (b)
%%

\item Gegeben sei nun ein Algorithmus $A$, der den Median einer
unsortierten Liste von $n$ Zahlen in $\mathcal{O}(n)$ Schritten
berechnet. Nutzen Sie Algorithmus $A$ um einen Algorithmus $B$
anzugeben, welcher das $k$-kleinste Element in $\mathcal{O}(n)$
Schritten berechnet.

Argumentieren Sie auch, dass der Algorithmus die gewünschte Laufzeit
besitzt.

\begin{bAntwort}
\bFussnoteUrl{https://en.wikipedia.org/wiki/Median_of_medians}
\end{bAntwort}

%%
% (c)
%%

\item  Geben Sie einen Algorithmus an, der für alle $i = 1 \dots,
\lfloor n/k \rfloor$ das $i \cdot k$-kleinste Element berechnet. Die
Laufzeit Ihres Algorithmus sollte $\mathcal{O}(n \cdot log(n/k))$ sein.
Sie dürfen weiterhin Algorithmus $A$, wie in Teilaufgabe (b)
beschrieben, nutzen.

\end{enumerate}
\end{document}
