From: Florian Forster Date: Fri, 17 Dec 2010 13:51:04 +0000 (+0100) Subject: Bekannte konstruktive Sortiernetzwerke: Deutlich ausgebaut. X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=0fb5c665a8f4a84835b8683d1992cad94efb3981;p=diplomarbeit.git Bekannte konstruktive Sortiernetzwerke: Deutlich ausgebaut. --- diff --git a/diplomarbeit.tex b/diplomarbeit.tex index eabb3fe..2545a74 100644 --- a/diplomarbeit.tex +++ b/diplomarbeit.tex @@ -213,24 +213,67 @@ Mutation \textit{(vermutlich)} nicht (effizient) möglich. Übersicht über bekannte konstruktive Sortiernetzwerke. -\subsection{Odd-Even-Transpositionsort} +\subsection{Das Odd-Even-Transpositionsort-Netzwerk} \label{sect:odd_even_transpositionsort} Das Sortiernetzwerk {\em Odd-Even-Transpositionsort} (OET) ist eines der einfachsten Sortiernetzwerke. Es besteht aus $n$~{\em Schichten}, die jede "`Leitung"' abwechselnd mit den benachbarten Leitungen verbindet. -Abbildung~\ref{fig:odd_even_transposition_08} zeigt das OET-Netzwerk für +Abbildung~\ref{fig:odd-even-transposition-08} zeigt das OET-Netzwerk für ${n = 8}$ Leitungen. \begin{figure} -\begin{center} -\input{images/oe-transposition-8.tex} -\end{center} -\caption{Das {\em Odd-Even-Transpositionsort-Netzwerk} für acht Eingänge.} -\label{fig:odd_even_transposition_08} + \begin{center} + \input{images/oe-transposition-8.tex} + \end{center} + \caption{Das \emph{Odd-Even-Transpositionsort}-Netzwerk mit acht Eingängen.} + \label{fig:odd-even-transposition-08} \end{figure} -\subsection{Batcher's Mergesort} +Dass das Odd-Even-Transporitionsort-Netzwerk tatsächlich jede beliegibe +Eingabe sortiert ist nicht offensichtlich. Leicht zu sehen ist jedoch, dass +sowohl das Minimum als auch das Maximum durch das im Netzwerk enthaltene +Treppenmuster auf die unterste beziehungsweise oberste Leitung gelangt. Beim +Odd-Even-Transporitionsort-Netzwerk mit drei Eingängen, +$\operatorname{OET}(3)$, ist die Ausgabe folglich sortiert. + +Die Sortiereigenschaft größerer OET-Netzwerke lässt sich rekursiv beweisen, +indem man $\operatorname{OET}(n)$ auf $\operatorname{OET}(n-1)$ durch +Herausschneiden einer Leitung reduziert. In +Abschnitt~\ref{sect:leitungen_entfernen} wird das Vorgehen im Detail +beschrieben, Abbildung~\ref{fig:oe-transposition-cut} zeigt das +Herausschneiden einer Leitung aus $\operatorname{OET}(8)$. + +Das Odd-Even-Transporitionsort-Netzwerk ist weder in Bezug auf die Anzahl der +Komparatoren noch in Bezug auf die Anzahl der Schichten, in denen sich die +Komparatoren anordnen lassen, effizient. Es benötigt +${\frac12 n (n-1)} = \mathcal{O}(n^2)$~Komparatoren, die in $n$~Schichten +angeordnet sind. Andere Sortiernetzwerke benötigen deutlich weniger +Komparatoren, beispielsweise $\mathcal{O}(n (\log n)^2)$, die in weniger +Schichten, zum Beispiel $\mathcal{O}(\log n)$, angeordnet sind. + +Das Interessante am OET-Netzwerk ist seine einfache Konstruktion. Einige der +folgenden Algorithmen benötigen ein (einfaches) Sortiernetzwerk als +Starteingabe, auf dessen Basis sie versuchen optimierte Sortiernetzwerke zu +finden. Häufig dient $\operatorname{OET}(n)$ als Eingabe für diese +Algorithmen. + +\subsection{Das bitone Mergesort-Netzwerk} + +Das \emph{bitone Mergesort}-Netzwerk ($\operatorname{BS}(n)$) ist ein +Sortiernetzwerk, das 1968 von \emph{K.~E.~Batcher} veröffentlicht wurde. Es +ist deutlich effizienter als das Odd-Even-Transporitionsort-Netzwerk -- sowohl +in Bezug auf die Anzahl der Komparatoren als auch bezüglich der benötigten +Zeit, also der Anzahl der Schichten. + +Das Sortiernetzwerk basiert auf einem Komparatornetzwerk, welches zwei +sortierte Listen zusammenfügen (englisch: \textit{to~merge}) kann. Dieser +\emph{„bitoner Mischer“} (englisch: \textit{bitonic merger}) genannte Baustein +verleiht dem Sortiernetzwerk seinen Namen. + +Da das Sortiernetzwerk rekursiv definiert ist, betrachten wir hier nur die +Instanzen des Netzwerks, deren Leitungszahl eine Zweierpotenz ist, +$\operatorname{BS}(n = 2^t)$. Ein Netzwerk von K.~E.~Batcher. Siehe: K.E. Batcher: Sorting Networks and their Applications. Proc. AFIPS Spring @@ -239,17 +282,18 @@ Joint Comput. Conf., Vol. 32, 307-314 (1968) \subsubsection{Der bitone Mischer}\label{sect:der_bitone_mischer} -Das Netzwerk basiert auf dem {\em bitonen Mischer}, einem Komparator-Netzwerk, -das eine beliebige bitone Folge in eine sortierte Listen umordnen kann. Eine -{\em bitone Folge} ist eine monoton steigende Folge gefolgt von einer monoton -fallenden Folge, oder ein zyklischer Shift davon. -Abbildung~\ref{fig:beispiel-biton} zeigt die vier prinipiellen Möglichkeiten -die durch zyklische Shifts entstehen können. Die wichtigsten Varianten für -Batcher's Mergesort-Netzwerk zeigen die Abbildungen~\ref{fig:beispiel-biton-0} +Das \emph{bitone Mergesort-Netzwerk} basiert auf dem sogenannten \emph{bitonen +Mischer} $\operatorname{BM}(n)$, einem Kom\-parator-Netzwerk, das eine beliebige +\emph{bitone Folge} in eine sortierte Listen umordnen kann. Eine \emph{bitone +Folge} ist eine monoton steigende Folge gefolgt von einer monoton absteigenden +Folge, oder ein zyklischer Shift davon. Abbildung~\ref{fig:beispiel-biton} +zeigt die vier prinzipiellen Möglichkeiten die durch zyklische Shifts +entstehen können. Die wichtigsten Varianten für das \emph{bitone +Mergesort-Netzwerk} zeigen die Abbildungen~\ref{fig:beispiel-biton-0} und~\ref{fig:beispiel-biton-1}. Sie erhält man, wenn man eine aufsteigend und -eine absteigend sortierte Liste aneinanderhängt. Bei den -anderen beiden Formen ist wichtig zu beachten, dass das letzte Element nicht -größer (Abbildung~\ref{fig:beispiel-biton-2}) bzw. kleiner +eine absteigend sortierte Liste aneinanderhängt. Bei den anderen beiden Formen +ist wichtig zu beachten, dass das letzte Element nicht größer +(Abbildung~\ref{fig:beispiel-biton-2}) bzw. kleiner (Abbildung~\ref{fig:beispiel-biton-3}) als das erste Element der Folge sein darf. @@ -295,29 +339,72 @@ gelten. Mit $u_j \leqq u_{j+1}$ und $v_j \geqq v_{j+1}$ folgt daraus $u_{j+1} > v_{j+1}$. Es werden also alle Elemente $u_k$ und $v_k$ mit $k \geqq j$ vertauscht. $j = m$ bezeichnet den Fall, in dem das größte Element der "`linken"' Folge, $u_{m-1}$, kleiner ist als das kleinste Element der -"`rechten"' Folge, $v_{m-1}$. Daraus folgt, dass die entstehende Folge aus -zwei bitonen Folgen besteht, die rekursiv zusammengeführt werden können. -Abbildung~\ref{fig:bitonic-merge-normal} zeigt die Situationen vor und nach -diesem Schritt des Mischers. +"`rechten"' Folge, $v_{m-1}$. Daraus folgt, dass das Resultat in zwei bitone +Folgen aufteilen lässt: Eine aufsteigende~/ absteigende Folge und eine +absteigende~/ aufsteigende Folge. Abbildung~\ref{fig:bitonic-merge-normal} +zeigt die Situationen vor und nach diesem Schritt des Mischers. + +Um die Folge vollständig zu sortieren, müssen anschließend die beiden +resultierenden bitonen Folgen sortiert werden. Die geschieht ebenfalls +mithilfe des bitonen Mischers, mit zwei Instanzen von +$\operatorname{BM}(\frac{n}{2})$. Diese rekursive Definition endet mit dem +bitonen Mischer mit zwei Leitungen, $\operatorname{BM}(2)$, der als +Komparator-Netzwerk mit einem Komparator zwischen den beiden Leitungen +definiert ist. + +Der bitonen Mischer kann auch zwei aufsteigende Folgen sortieren. Dazu ist +lediglich eine etwas modifizierte Vergleichs-Kaskade im ersten Schritt +notwendig. Die folgenden, kleineren Mischer erhalten als Eingabe wieder eine +„echte“ bitone Folge. Abbildung~\ref{fig:bitonic-merge-tricheter} zeigt das +Schema des bitonen Mischers für zwei aufsteigend sortierte Foglen. Durch das +Umdrehen einer Folge verändert sich das Muster der Komparatoren ein wenig: +Statt an eine Treppe erinnert das Muster nun an einen Trichter. + +Da sich die Anzahl der Leitungen in jedem Rekursionsschritt halbiert, endet +die Rekursion nach $\log(n)$~Schritten. In jedem Rekursionsschritt werden +$\frac{n}{2}$~Komparatoren eingefügt, so dass der gesamte Mischer aus +$\frac{1}{2} n \log(n) = \mathcal{O}\left(n \log(n)\right)$~Komparatoren +besteht, die in $\log(n)$~Schichten angeordnet werden können. + +\subsubsection{Das bitone Mergesort-Netzwerk} + +Ebenso wie der bitone Mischer $\operatorname{BM}(n)$ ist auch das \emph{bitone +Mergesort-Netzwerk} $\operatorname{BS}(n)$ rekursiv definiert. Es setzt sich +zusammen aus zwei Instanzen des bitonen Mergesort-Netzwerks halber Größe, +$\operatorname{BS}(\frac{n}{2})$, für je die Hälfte der Eingänge, sowie dem +bitonen Mischer für $n$~Leitungen, $\operatorname{BM}(n)$. Das Rekursionsende +ist das bitone Mergesort-Netzwerk mit nur einer Leitung, +$\operatorname{BS}(1)$, welches als leeres Komparatornetzwerk definiert ist. +Entsprechend sind die Komparatornetzwerke $\operatorname{BM}(2)$ und +$\operatorname{BS}(2)$ identisch. + +Bei der Konstruktion kommt die trichterförmige Anordnung der Komparatoren +(Abbildung~\ref{fig:bitonic-merge-tricheter}) gelegen, weil so die beiden +rekursiven Sortiernetzwerke in die gleiche Richtung sortieren können und so +alle Komparatoren in die gleiche Richtung zeigen. -Mit dem bitonen Mischer auch zwei aufsteigend sortierte Folgen sortiert -werden. Dazu ist lediglich das "`Umbenennen"' der Leitungen notwendig. -Abbildung~\ref{fig:bitonic-merge-tricheter} zeigt das Schema des bitonen -Mischers für zwei aufsteigend sortierte Foglen. Durch das Umbenennen verändert -sich das Muster der Komparatoren ein wenig: Statt an eine Treppe erinnert das -Muster nun an einen Trichter. - -\subsubsection{Batcher's Bitonic-Mergesort-Netzwerk} - -Das Sortiernetzwerk $S(n)$ mit $n$~Eingängen besteht aus zwei Instanzen von -$S(\frac{n}{2})$, dem Netzwerk mit $\frac{n}{2}$~Eingängen und dem bitonen -Mischer~$M(n)$. Die Rekursion bricht bei ${n = 1}$~ab --~eine einelementige -Liste ist immer sortiert. -Das konkrete Netzwerk~$S(8)$ ist in Abbildung~\ref{fig:batcher_08} zu sehen. -Eingezeichnet sind ebenfalls die beiden Instanzen des Netzwerks~$S(4)$ (rot) -sowie der bitone Mischer~$M(8)$ (blau). +\begin{figure} + \begin{center} + \input{images/batcher-8.tex} + \end{center} + \caption{$S(8)$, Batcher's {\em bitone Mergesort-Netzwerk} für acht + Eingänge. Markiert sind die beiden Instanzen von $S(4)$ (rot), die beiden + bitonen Mischer~$M(4)$ (blau) und die Komparatoren, die im letzten rekursiven + Schritt hinzugefügt wurden (grün).} + \label{fig:batcher_08} +\end{figure} +Das konkrete Netzwerk~$\operatorname{BS}(8)$ ist in +Abbildung~\ref{fig:batcher_08} zu sehen. Eingezeichnet sind ebenfalls die +beiden Instanzen des Netzwerks~$\operatorname{BS}(4)$ (rot) sowie der bitone +Mischer~$\operatorname{BM}(8)$ (blau). Die trichterförmige Komparator-Kaskade, +die die bitone Eingabefolge in zwei bitone Ausgabefolgen transformiert, ist +grün hinterlegt. +Das \emph{bitone Mergesort-Netzwerk} $\operatorname{BS}(8)$ besteht aus +$\frac{1}{4} n \log(n) \log(n+1) = \mathcal{O}\left(n (log (n))^2\right)$ +Komparatoren, die in $\frac{1}{2} \log(n) \log(n+1) = \mathcal{O}(\log(n))$ +Schichten angeordnet sind. %\begin{figure} %\begin{center} @@ -328,33 +415,28 @@ sowie der bitone Mischer~$M(8)$ (blau). %\label{fig:bms_rekursiver_aufbau} %\end{figure} -\begin{figure} - \begin{center} - \input{images/batcher-8.tex} - \end{center} - \caption{$S(8)$, Batcher's {\em bitone Mergesort-Netzwerk} für acht - Eingänge. Markiert sind die beiden Instanzen von $S(4)$ (rot), die beiden - bitonen Mischer~$M(4)$ (blau) und die Komparatoren, die im letzten rekursiven - Schritt hinzugefügt wurden (grün).} - \label{fig:batcher_08} -\end{figure} - -\subsection{Odd-Even-Mergesort} +\subsection{Das Odd-Even-Mergesort-Netzwerk} -Obwohl der Name ähnlich klingt, haben \emph{Odd-Even-Mergesort} (OEM) und -\emph{Odd-Even-Transposition\-sort} (OET, siehe -Abschnitt~\ref{sect:odd_even_transpositionsort}) wenig gemein. Auch dieses -Netzwerk ist von K.~Batcher gefunden worden und wird rekursiv durch einen -"`Mischer"' definiert. +Obwohl der Name ähnlich klingt, haben das \emph{Odd-Even-Mergesort-Netzwerk} +(OES) und das \emph{Odd-Even-Transpositionsort-Netzwerk} (siehe +Abschnitt~\ref{sect:odd_even_transpositionsort}) wenig gemein. Vielmehr ist +OES dem \emph{bitonen Mergesort-Netzwerk}, das im vorherigen Abschnitt +vorgestellt wurde, ähnlich: Auch dieses Sortiernetzwerk ist von +\textit{K.~Batcher} gefunden worden und wird rekursiv durch einen Mischer +definiert. \subsubsection{Der Odd-Even-Mischer}\label{sect:der_odd_even_mischer} -Der {\em Odd-Even-Mischer} ist ein Komperatornetzwerk, dass zwei sortierte -Folgen zu einer sortierten Ausgabe zusammenfügen kann. Dabei kommt es mit -weniger Vergleichen aus als der {\em bitone Mischer}, der im -Abschnitt~\ref{sect:der_bitone_mischer} vorgestellt wurde, aus. +Der \emph{Odd-Even-Mischer} $\operatorname{OEM}(n,m)$ ist ein +Komperatornetzwerk, dass zwei sortierte Folgen mit $n$ beziehungsweise $m$ +Elementen zu einer sortierten Ausgabefolge mit $N = n+m$~Elementen +zusammenfügen kann. Dabei kommt es mit weniger Vergleichen aus als der +\emph{bitone Mischer}, der im Abschnitt~\ref{sect:der_bitone_mischer} +vorgestellt wurde. Allerdings benötigt der \emph{Odd-Even-Mischer} unter +Umständen mehr Schichten als der \emph{bitone Mischer}.\footnote{Knuth, +“Bitonic Sorting”, Seite~230} -Der {\em Odd-Even-Mischer} selbst ist ebenfalls rekursiv aufgebaut: Die +Der \emph{Odd-Even-Mischer} selbst ist ebenfalls rekursiv aufgebaut: Die Eingabe für den Mischer mit $N = n + m$ Leitungen besteht aus den beiden sortierten Folgen $U = \left(u_0, u_1, \ldots, u_{n-1}\right)$ und $V = \left(v_0, v_1, \ldots, v_{m-1}\right)$. Die gesamte Eingabe sei @@ -377,8 +459,8 @@ w_i = \left\{ \begin{array}{ll} \label{fig:oe-merge} \end{figure} -Diese werden jetzt in insgesamt vier sortierte Folgen aufgeteilt, je eine -Liste der geraden Indizes und je eine Liste der ungeraden Indizes. +Diese werden in insgesamt vier sortierte Folgen aufgeteilt, je eine Liste der +geraden Indizes und je eine Liste der ungeraden Indizes. \begin{eqnarray} U_{\textrm{gerade}} &=& \left(u_0, u_2, u_4, \ldots\right) \\ U_{\textrm{ungerade}} &=& \left(u_1, u_3, u_5, \ldots\right) \\ @@ -416,7 +498,7 @@ Aufbau lauten: \end{itemize} Dass die resultierende Folge sortiert ist, lässt sich mit dem -{\em 0-1-Prinzip} leicht zeigen: +{\em 0-1-Prinzip} zeigen: Da $U$ und $V$ sortiert sind, ist die Anzahl der Nullen in den geraden Teilfolgen, $U_{\textrm{gerade}}$ bzw. $V_{\textrm{gerade}}$, größer oder gleich der Anzahl der Nullen in den ungeraden Teilfolgen @@ -438,10 +520,11 @@ $W_{\textrm{gerade}}$ und $W_{\textrm{ungerade}}$ entsprechend zu: Daraus folgt, dass $W_{\textrm{gerade}}$ $0$, $1$ oder $2$ Nullen mehr enthält als $W_{\textrm{ungerade}}$. In den ersten beiden Fällen ist die "`verzahnte"' Ausgabe der beiden kleineren Mischer bereits sortiert. Nur im letzten Fall, -wenn $W_{\textrm{gerade}}$ $2$~Nullen mehr enthählt als -$W_{\textrm{ungerade}}$, muss eine Vertauschung stattfinden, um die Ausgabe zu -sortieren. Die jeweiligen Situationen sind in -Abbildung~\ref{fig:oe-post-recursive} dargestellt. +wenn $W_{\textrm{gerade}}$ zwei Nullen mehr enthählt als +$W_{\textrm{ungerade}}$, muss genau eine Vertauschung stattfinden, um die +Ausgabe zu sortieren. Diese wird von den Komparatoren, die benachbarte +Leitungen miteinander vergleichen, ausgeführt. Die jeweiligen Situationen sind +in Abbildung~\ref{fig:oe-post-recursive} dargestellt. \begin{figure} \centering @@ -458,32 +541,108 @@ Abbildung~\ref{fig:oe-post-recursive} dargestellt. \label{fig:oe-post-recursive} \end{figure} +Da die Teilfolgen $U$ und $V$ in jedem Rekursionsschritt etwa halbiert werden, +bricht die Rekursion nach $\mathcal{O}\left(\log (n) + \log (m)\right)$ +Schritten ab. Die exakte Anzahl der benötigten Rekursionsschritte (und damit +Schichten im Mischer-Netzwerk), hängt von der Längeren der beiden +Eingabefolgen ab und beträgt $1 + \lceil \log\left(\max(n, m)\right) \rceil$. + +Die Anzahl der Komparatoren $K(n,m)$, die $\operatorname{OEM}(n,m)$ im +allgemeinen Fall verwendet, ist Gemäß der rekursiven Definition in +Abhängigkeit der Länge der Eingabefolgen, $n$ und $m$: +\begin{displaymath} + K(n,m) = \left\{ \begin{array}{ll} + nm, & \mathrm{falls} \quad nm \leqq 1 \\ + K\left(\left\lceil \frac{n}{2} \right\rceil, \left\lceil \frac{m}{2} \right\rceil\right) + + K\left(\left\lfloor \frac{n}{2} \right\rfloor, \left\lfloor \frac{m}{2} \right\rfloor\right) + + \left\lfloor \frac{1}{2} (m + n - 1) \right\rfloor & \mathrm{falls} \quad nm > 1 + \end{array} \right. +\end{displaymath} +Leider ist es schwierig, diese allgemeine Formel in einer geschlossenen Form +anzugeben. Aus der Anzahl der Rekursionsschritte ist jedoch leicht erkennbar, +dass $K(n,m)$ in $\mathcal{O}(N \log (N))$ enthalten ist. + +Für den wichtigen Spezialfall, dass $n = m = 2^{t-1}$, lässt sich die Anzahl +der Komparatoren im Vergleich zum \emph{bitonen Mischer} angeben: Der erste +Rekursionsschritt der OEM-Konstruktion fügt +$\left\lfloor \frac{1}{2} (m + n - 1) \right\rfloor = \frac{N}{2} - 1$ +Komparatoren ein -- einen Komparator weniger als der \emph{bitone Mischer} in +diesem Schritt. Das selbe gilt für die rekursiv verwendeten kleineren Mischer, +$\operatorname{OEM}(\frac{n}{2}, \frac{n}{2})$ und so weiter bis +einschließlich $\operatorname{OEM}(2, 2)$, von denen es $2, 4, \dots, +\frac{N}{4} = 2^{\log(N)-2}$ Instanzen gibt. Insgesamt werden +\begin{displaymath} + \sum_{i=0}^{\log(N)-2} 2^i = 2^{\log(N) - 1} - 1 = \frac{N}{2} - 1 = n - 1 +\end{displaymath} +Komparatoren eingespart. Damit ergibt sich +\begin{displaymath} + K\left(n = 2^{t-1}, n = 2^{t-1}\right) = \frac{1}{2} N \log(N) - \frac{N}{2} + 1 +\end{displaymath} +für die Anzahl der Komparatoren, die von $\operatorname{OEM}(N = 2^t)$ +benötigt werden. + \subsubsection{Das Odd-Even-Mergesort-Netzwerk} -Auch beim \emph{Odd-Even-Mergesort-Netzwerk} --~wie beim \emph{bitonen -Mergesort-Netzwerk}~-- entsteht das Sortiernetzwerk aus dem {\em -Odd-Even-Mischer} durch rekursives Anwenden auf einen Teil der Eingabe -(üblicherweise die Hälfte der Leitungen) und anschließendes zusammenfügen. -Abbildung~\ref{fig:odd_even_mergesort_08} zeigt das Netzwerk für $8$~Eingänge. +Das \emph{Odd-Even-Mergesort-Netzwerk} $\operatorname{OES}(n)$ besteht, --~wie +das \emph{bitonen Mergesort-Netzwerk}~-- rekursiv aus kleineren Varianten von +sich selbst und einem abschließenden \emph{Odd-Even-Mischer}. Die +effizientesten Sortiernetzwerke in Bezuf auf Komparator- und Schichtzahl +entstehen, wenn die Anzahl der Leitungen jeweils halbiert wird. Somit besteht +$\operatorname{OES}(n)$ aus +$\operatorname{OES}\left(\left\lceil\frac{n}{2}\right\rceil\right)$, +$\operatorname{OES}\left(\left\lfloor\frac{n}{2}\right\rfloor\right)$ +und $\operatorname{OEM}\left(\left\lceil\frac{n}{2}\right\rceil, +\left\lfloor\frac{n}{2}\right\rfloor\right)$. Die Rekursion endet mit +$\operatorname{OES}(1)$ und $\operatorname{OES}(0)$, die als leere +Komparatornetzwerke definiert sind. \begin{figure} -\begin{center} -\input{images/oe-mergesort-8.tex} -\end{center} -\caption{Das {\em Odd-Even-Mergesort-Netzwerk} für acht Eingänge. Markiert -sind die Instanzen von $S(4)$ (rot), die beiden \emph{Odd-Even-Mischer} -$\mathit{OEM}(4)$ für gerade und ungerade Leitungen (blau) und die im letzten -Rekursionsschritt hinzugefügten Komparatoren zwischen benachbarten Leitungen -(grün).} -\label{fig:odd_even_mergesort_08} + \begin{center} + \input{images/oe-mergesort-8.tex} + \end{center} + \caption{Das {\em Odd-Even-Mergesort-Netzwerk} für acht Eingänge. Markiert + sind die Instanzen von $\operatorname{OES}(4)$ (rot), die beiden + \emph{Odd-Even-Mischer} $\operatorname{OEM}(4)$ für gerade und ungerade + Leitungen (blau) und die im ersten Rekursionsschritt hinzugefügten + Komparatoren zwischen benachbarten Leitungen (grün).} + \label{fig:odd-even-mergesort-08} \end{figure} -\begin{itemize} -\item Odd-Even-Transpositionsort -\item Bitonic-Mergesort -\item Odd-Even-Mergesort -\item Pairwise sorting-network -\end{itemize} +In Abbildung~\ref{fig:odd-even-mergesort-08} ist das konkrete Sortiernetzwerk +$\operatorname{OES}(8)$ zu sehen. Rot markiert sind die beiden rekursiven +Instanzen $\operatorname{OES}(4)$. Die blauen und der grüne Block stellen den +\emph{Odd-Even-Mischer} für acht Leitungen dar: Die beiden blauen Blöcke sind +die rekursiven Instanzen von $\operatorname{OEM}(4)$, der grüne Block markiert +die Komparatoren, die in ersten Rekursionsschritt hinzugefügt werden. + +Im Allgemeinen ist die Anzahl der Komparatoren, die vom +\emph{Odd-Even-Mergesort-Netzwerk} verwendet wird, $k(n)$, direkt aus der +Definition beziehungsweise der Konstruktionsanleitung abzulesen: +\begin{displaymath} + k(n) = k\left(\left\lceil\frac{n}{2}\right\rceil\right) + + k\left(\left\lfloor\frac{n}{2}\right\rfloor\right) + + K\left(\left\lceil\frac{n}{2}\right\rceil, \left\lfloor\frac{n}{2}\right\rfloor\right) +\end{displaymath} +Eine geschlossene Form dieser Formel ist schon alleine deshalb schwierig, weil +sie für $K(n,m)$ schwierig anzugeben ist. Es ist allerdings bekannt, dass +$k(n)$ in $\mathcal{O}\left(n \left(\log (n)\right)^2\right)$ enthalten ist. + +Für den wichtigen Spezialfall, dass $n = 2^t$ eine Zweierpotenz ist, kann die +Anzahl der Komparatoren wieder explizit angegeben werden. \textit{K.~Batcher} +zeigt in seiner Arbeit\footnote{\todo{Referenz!}}, dass in diesem Fall +\begin{displaymath} + k(n = 2^t) = \frac{1}{4} n \left(\log (n)\right)^2 - \frac{1}{4}n\log(n) + n - 1 +\end{displaymath} +gilt. + +% gnuplot: +% oem(n,m) = ((n*m) <= 1) ? (n*m) : oem(ceil(.5*n), ceil(.5*m)) + oem(floor(.5*n), floor(.5*m)) + floor(.5*(n+m-1.0)) +% oem1(n) = oem(ceil(.5*n),floor(.5*n)) +% oes(n) = (n <= 1.0) ? 0 : oes(ceil(0.5*n)) + oes(floor(0.5*n)) + oem1(n) + +%\begin{itemize} +%\item Pairwise sorting-network +%\end{itemize} \section{Transformation von Sortiernetzwerken}