From: Florian Forster Date: Thu, 9 Dec 2010 10:22:28 +0000 (+0100) Subject: Abschnitt "Normalisieren". X-Git-Url: https://git.octo.it/?p=diplomarbeit.git;a=commitdiff_plain;h=4fd9c8479d2030c7bc9c43d850b3f164d6bd6caf Abschnitt "Normalisieren". --- diff --git a/diplomarbeit.tex b/diplomarbeit.tex index 486074e..49905bd 100644 --- a/diplomarbeit.tex +++ b/diplomarbeit.tex @@ -472,10 +472,49 @@ Abbildung~\ref{fig:odd_even_mergesort_08} zeigt das Netzwerk für $8$~Eingänge. \section{Transformation von Sortiernetzwerken} -\begin{itemize} -\item Komprimieren (Alle Komparatoren so früh wie möglich anwenden). -\item Normalisieren (Transformation zu Standard-Sortiernetzwerken). -\end{itemize} +\subsection{Komprimieren} + +\todo{Aus theoretischer Sicht eigentlich eine Trivialität. Rausschmeißen?} + +Komparatoren, die unterschiedliche Leitungen miteinander vergleichen, können +gleichzeitig ausgewertet werden, wie bereits in +Abschnitt~\ref{sect:einleitung_sortiernetzwerke} beschrieben. Unter +\emph{Komprimieren} wird eine (Neu-)Gruppierung in die kleinstmögliche Anzahl +von \emph{Schichten} verstanden. + +Diese Anzahl ist insbesondere beim automatisierten Bewerten von +Komparatornetzwerken interessant. \dots + +\subsection{Normalisieren} + +\begin{figure} + \centering + \subfigure[$S(8)$ (nach Konstruktion)]{\input{images/batcher-8-nonstd.tex}\label{fig:bitonic-nonstd}} + \subfigure[$S(8)$ (normalisiert)]{\input{images/batcher-8-std.tex}\label{fig:bitonic-std}} + \caption{Jedes Sortiernetzwerk kann in ein Standard-Sortiernetzwerk + transformiert werden. Gezeigt ist das bitone Sortiernetzwerk nach der + intuitiven Konstruktion und die normalisierte Variante.} + \label{fig:beispiel_normalisieren} +\end{figure} + +Ein \emph{Standard-Sortiernetzwerk} oder \emph{normalisiertes Sortiernetzwerk} +ist ein Sortiernetzwerk, dessen Komparatoren alle in die selbe Richtung +zeigen. Jedes Sortiernetzwerk kann in eine normaliesierte Variante +transformiert werden. Dazu gibt beispielsweise \emph{Knuth} (\todo{Verweis}) +einen Algorithmus an. + +Abbildung~\ref{fig:beispiel_normalisieren} zeigt das das +bitone Sortiernetzwerk in zwei Varianten. Abbildung~\ref{fig:bitonic-nonstd} +zeigt das Netzwerk nach der Konstruktionsvorschrift, siehe auch +Abbildung~\ref{fig:bitonic-merge-normal}: In den ersten drei Schichten werden +die unter und die obere Hälfte gegenläufig sortiert. Das heißt dass nach drei +Schritten die eine Hälfte auf- und die andere Hälfte absteigend sortiert ist. +In den Schichten~4 bis~6 folgt der bitone Mischer entsprechend der rekursiven +Definition. + +In Abbildung~\ref{fig:bitonic-std} ist die normalisierte Version des bitonen +Mergesort-Netzwerks zu sehen. Alle Komparatoren zeigen hier in die gleiche +Richtung. \subsection{Zwei Netzwerke kombinieren} diff --git a/images/batcher-8-nonstd.tex b/images/batcher-8-nonstd.tex new file mode 100644 index 0000000..79292c1 --- /dev/null +++ b/images/batcher-8-nonstd.tex @@ -0,0 +1,106 @@ +\begin{tikzpicture}[scale=0.50,auto] +\node[vertex] (v0) at (1.50,0) {}; +\node[vertex] (v1) at (1.50,1) {}; +\path[comp,->] (v0) -- (v1); + +\node[vertex] (v2) at (1.50,3) {}; +\node[vertex] (v3) at (1.50,2) {}; +\path[comp,->] (v2) -- (v3); + +\node[vertex] (v4) at (1.50,5) {}; +\node[vertex] (v5) at (1.50,4) {}; +\path[comp,->] (v4) -- (v5); + +\node[vertex] (v6) at (1.50,6) {}; +\node[vertex] (v7) at (1.50,7) {}; +\path[comp,->] (v6) -- (v7); + +\node[vertex] (v8) at (3.00,0) {}; +\node[vertex] (v9) at (3.00,2) {}; +\path[comp,->] (v8) -- (v9); + +\node[vertex] (v10) at (3.35,1) {}; +\node[vertex] (v11) at (3.35,3) {}; +\path[comp,->] (v10) -- (v11); + +\node[vertex] (v12) at (3.00,6) {}; +\node[vertex] (v13) at (3.00,4) {}; +\path[comp,->] (v12) -- (v13); + +\node[vertex] (v14) at (3.35,7) {}; +\node[vertex] (v15) at (3.35,5) {}; +\path[comp,->] (v14) -- (v15); + +\node[vertex] (v16) at (4.85,0) {}; +\node[vertex] (v17) at (4.85,1) {}; +\path[comp,->] (v16) -- (v17); + +\node[vertex] (v18) at (4.85,2) {}; +\node[vertex] (v19) at (4.85,3) {}; +\path[comp,->] (v18) -- (v19); + +\node[vertex] (v20) at (4.85,5) {}; +\node[vertex] (v21) at (4.85,4) {}; +\path[comp,->] (v20) -- (v21); + +\node[vertex] (v22) at (4.85,7) {}; +\node[vertex] (v23) at (4.85,6) {}; +\path[comp,->] (v22) -- (v23); + +\node[vertex] (v24) at (6.35,0) {}; +\node[vertex] (v25) at (6.35,4) {}; +\path[comp,->] (v24) -- (v25); + +\node[vertex] (v26) at (6.70,1) {}; +\node[vertex] (v27) at (6.70,5) {}; +\path[comp,->] (v26) -- (v27); + +\node[vertex] (v28) at (7.05,2) {}; +\node[vertex] (v29) at (7.05,6) {}; +\path[comp,->] (v28) -- (v29); + +\node[vertex] (v30) at (7.40,3) {}; +\node[vertex] (v31) at (7.40,7) {}; +\path[comp,->] (v30) -- (v31); + +\node[vertex] (v32) at (8.90,0) {}; +\node[vertex] (v33) at (8.90,2) {}; +\path[comp,->] (v32) -- (v33); + +\node[vertex] (v34) at (9.25,1) {}; +\node[vertex] (v35) at (9.25,3) {}; +\path[comp,->] (v34) -- (v35); + +\node[vertex] (v36) at (8.90,4) {}; +\node[vertex] (v37) at (8.90,6) {}; +\path[comp,->] (v36) -- (v37); + +\node[vertex] (v38) at (9.25,5) {}; +\node[vertex] (v39) at (9.25,7) {}; +\path[comp,->] (v38) -- (v39); + +\node[vertex] (v40) at (10.75,0) {}; +\node[vertex] (v41) at (10.75,1) {}; +\path[comp,->] (v40) -- (v41); + +\node[vertex] (v42) at (10.75,2) {}; +\node[vertex] (v43) at (10.75,3) {}; +\path[comp,->] (v42) -- (v43); + +\node[vertex] (v44) at (10.75,4) {}; +\node[vertex] (v45) at (10.75,5) {}; +\path[comp,->] (v44) -- (v45); + +\node[vertex] (v46) at (10.75,6) {}; +\node[vertex] (v47) at (10.75,7) {}; +\path[comp,->] (v46) -- (v47); + +\path[edge] (0,0) -- (12.25,0); +\path[edge] (0,1) -- (12.25,1); +\path[edge] (0,2) -- (12.25,2); +\path[edge] (0,3) -- (12.25,3); +\path[edge] (0,4) -- (12.25,4); +\path[edge] (0,5) -- (12.25,5); +\path[edge] (0,6) -- (12.25,6); +\path[edge] (0,7) -- (12.25,7); +\end{tikzpicture} diff --git a/images/batcher-8-std.tex b/images/batcher-8-std.tex new file mode 100644 index 0000000..b1401fc --- /dev/null +++ b/images/batcher-8-std.tex @@ -0,0 +1,106 @@ +\begin{tikzpicture}[scale=0.50,auto] +\node[vertex] (v0) at (1.50,0) {}; +\node[vertex] (v1) at (1.50,1) {}; +\path[comp] (v0) -- (v1); + +\node[vertex] (v2) at (1.50,2) {}; +\node[vertex] (v3) at (1.50,3) {}; +\path[comp] (v2) -- (v3); + +\node[vertex] (v4) at (1.50,4) {}; +\node[vertex] (v5) at (1.50,5) {}; +\path[comp] (v4) -- (v5); + +\node[vertex] (v6) at (1.50,6) {}; +\node[vertex] (v7) at (1.50,7) {}; +\path[comp] (v6) -- (v7); + +\node[vertex] (v8) at (3.00,0) {}; +\node[vertex] (v9) at (3.00,3) {}; +\path[comp] (v8) -- (v9); + +\node[vertex] (v10) at (3.35,1) {}; +\node[vertex] (v11) at (3.35,2) {}; +\path[comp] (v10) -- (v11); + +\node[vertex] (v12) at (3.00,4) {}; +\node[vertex] (v13) at (3.00,7) {}; +\path[comp] (v12) -- (v13); + +\node[vertex] (v14) at (3.35,5) {}; +\node[vertex] (v15) at (3.35,6) {}; +\path[comp] (v14) -- (v15); + +\node[vertex] (v16) at (4.85,0) {}; +\node[vertex] (v17) at (4.85,1) {}; +\path[comp] (v16) -- (v17); + +\node[vertex] (v18) at (4.85,2) {}; +\node[vertex] (v19) at (4.85,3) {}; +\path[comp] (v18) -- (v19); + +\node[vertex] (v20) at (4.85,4) {}; +\node[vertex] (v21) at (4.85,5) {}; +\path[comp] (v20) -- (v21); + +\node[vertex] (v22) at (4.85,6) {}; +\node[vertex] (v23) at (4.85,7) {}; +\path[comp] (v22) -- (v23); + +\node[vertex] (v24) at (6.35,0) {}; +\node[vertex] (v25) at (6.35,7) {}; +\path[comp] (v24) -- (v25); + +\node[vertex] (v26) at (6.70,1) {}; +\node[vertex] (v27) at (6.70,6) {}; +\path[comp] (v26) -- (v27); + +\node[vertex] (v28) at (7.05,2) {}; +\node[vertex] (v29) at (7.05,5) {}; +\path[comp] (v28) -- (v29); + +\node[vertex] (v30) at (7.40,3) {}; +\node[vertex] (v31) at (7.40,4) {}; +\path[comp] (v30) -- (v31); + +\node[vertex] (v32) at (8.90,0) {}; +\node[vertex] (v33) at (8.90,2) {}; +\path[comp] (v32) -- (v33); + +\node[vertex] (v34) at (9.25,1) {}; +\node[vertex] (v35) at (9.25,3) {}; +\path[comp] (v34) -- (v35); + +\node[vertex] (v36) at (8.90,4) {}; +\node[vertex] (v37) at (8.90,6) {}; +\path[comp] (v36) -- (v37); + +\node[vertex] (v38) at (9.25,5) {}; +\node[vertex] (v39) at (9.25,7) {}; +\path[comp] (v38) -- (v39); + +\node[vertex] (v40) at (10.75,0) {}; +\node[vertex] (v41) at (10.75,1) {}; +\path[comp] (v40) -- (v41); + +\node[vertex] (v42) at (10.75,2) {}; +\node[vertex] (v43) at (10.75,3) {}; +\path[comp] (v42) -- (v43); + +\node[vertex] (v44) at (10.75,4) {}; +\node[vertex] (v45) at (10.75,5) {}; +\path[comp] (v44) -- (v45); + +\node[vertex] (v46) at (10.75,6) {}; +\node[vertex] (v47) at (10.75,7) {}; +\path[comp] (v46) -- (v47); + +\path[edge] (0,0) -- (12.25,0); +\path[edge] (0,1) -- (12.25,1); +\path[edge] (0,2) -- (12.25,2); +\path[edge] (0,3) -- (12.25,3); +\path[edge] (0,4) -- (12.25,4); +\path[edge] (0,5) -- (12.25,5); +\path[edge] (0,6) -- (12.25,6); +\path[edge] (0,7) -- (12.25,7); +\end{tikzpicture}