\section{Karnaugh-Diagramme}

\subsection{Einführung und Regeln}

Karnaugh Diagramme werden zur Vereinfachung von logischen Gleichungen verwendet. Wir haben zwar in Kapitel \ref{sec:verein} und \ref{sec:morgan} eine Methode gelernt, logische Gleichungen zu vereinfachen. Die Karnaugh Diagramme sind eine andere Methode, welche in manchen Fällen schneller ist.

\begin{center}
	\begin{tikzpicture}
		\matrix (kv) [
			matrix of nodes,
			nodes in empty cells,
			column sep=-\pgflinewidth, row sep=-\pgflinewidth,
			nodes = {
					rectangle,
					draw = black,
					text width = 5mm,
					text height = 5mm,
					align = center
				}
		]{
			$0$ & $1$                   & $X$ & \\
			    &                       &     & \\
			    & $\textcolor{blue}{1}$ &     & \\
			    &                       &     & \\
		};

		\path[draw, decorate, decoration=brace] (kv-1-1.north west) -- (kv-1-2.north east) node [midway, above] {$\bar{A}$};
		\path[draw, decorate, decoration=brace] (kv-1-3.north west) -- (kv-1-4.north east) node [midway, above] {$A$};
		\path[draw, decorate, decoration=brace] (kv-2-1.south west) -- (kv-1-1.north west) node [midway, left] {$\bar{C}$};
		\path[draw, decorate, decoration=brace] (kv-4-1.south west) -- (kv-3-1.north west) node [midway, left] {$C$};
		\path[draw, decorate, decoration=brace] (kv-2-4.north east) -- (kv-3-4.south east) node [midway, right] {$D$};
		\path[draw, decorate, decoration=brace] (kv-1-4.north east) -- (kv-1-4.south east) node [midway, right] {$\bar{D}$};
		\path[draw, decorate, decoration=brace] (kv-4-4.north east) -- (kv-4-4.south east) node [midway, right] {$\bar{D}$};
		\path[draw, decorate, decoration=brace] (kv-4-3.south east) -- (kv-4-2.south west) node [midway, below] {$B$};
		\path[draw, decorate, decoration=brace] (kv-4-1.south east) -- (kv-4-1.south west) node [midway, below] {$\bar{B}$};
		\path[draw, decorate, decoration=brace] (kv-4-4.south east) -- (kv-4-4.south west) node [midway, below] {$\bar{B}$};
	\end{tikzpicture}
\end{center}

Karnaugh Diagramme können für logische Gleichungen mit mehreren Eingangsvariablen gebildet werden. Grundsätzlich gilt für $n$ Eingangsvariablen hat das Karnaugh Diagram $2 ^n$ Felder. Jedes Feld im Karnaugh Diagramm ist für ein Minterm oder ein Maxterm gedacht. Dabei gilt wie bei der Wahrheitstablle wenn die Ausgangsvariable 1 ist handelt es sich um ein Minterm. Ist die Ausgangsvariable 0, so ist es ein Maxterm.
\\
Das interessante an Karnaugh Diagrammen ist, dass man mit den Min- bzw. Maxtermen "Päckchen" bilden kann. Päckchen können wie folgt gebildet werden.

\begin{enumerate}
	\item Päckchen haben eine Grösse von $2 ^{n}$
	\item Die Päckchen bestehen entweder nur aus Min- bzw. Maxtermen.
	\item Es soll immer das grösstmögliche Päckchen gebildet werden.
	\item Päckchen können sich schneiden.
\end{enumerate}

Durch das Bilden von Päckchen können neue Min- bzw. Maxterme gebildet werden, da in Päckchen Variablen in ihrer negierten und nicht negierten Form vorkommen. Diese gleichen sich aus und verschwinden.

\nt{
	Karnaugh Diagramme bestehend aus mehreren Eingangsvariablen können "eigenartige" Päckchen haben.

	\begin{minipage}{0.5\linewidth}
		\includegraphics[width=\textwidth]{fig/Fig_6.png} \cite{Luisier2024}
	\end{minipage}
	\begin{minipage}{0.5\linewidth}
		\includegraphics[width=\textwidth]{fig/Fig_7.png} \cite{Luisier2024}
	\end{minipage}
}

\nt{
	Karnaugh Diagramme können unendlich viele Eingangsvariablen haben, jedoch beschränken wir uns auf maximal fünf Eingangsvariablen, da Karnaugh Diagramme mit mehr als fünf Eingangsvariablen unübersichtlich wird.
}

Um das Karnaugh Diagramm mit einer Wahrheitstablle auszufüllen, gibt es eine bestimmte Vorgehensweise.

\begin{minipage}{0.5\linewidth}
	\begin{center}
		\begin{tikzpicture}
			\matrix (kv) [
				matrix of nodes,
				nodes in empty cells,
				column sep=-\pgflinewidth, row sep=-\pgflinewidth,
				nodes = {
						rectangle,
						draw = black,
						text width = 5mm,
						text height = 5mm,
						align = center,
						text = gray
					}
			]{
				\node[kvbinhead] {};   & \node[kvbinhead] {00}; & \node[kvbinhead] {01}; & \node[kvbinhead] {11}; & \node[kvbinhead] {10}; \\
				\node[kvbinhead] {00}; &                        &                        &                        &                        \\
				\node[kvbinhead] {01}; &                        &                        &                        &                        \\
				\node[kvbinhead] {11}; &                        &                        &                        &                        \\
				\node[kvbinhead] {10}; &                        &                        &                        &                        \\
			};

			\node[] at ($(kv-1-1.north east) + (-6mm, +2mm)$) {AB};
			\node[] at ($(kv-1-1.south west) + (-1mm, +5mm)$) {CD};
			\draw[] ($(kv-1-1.north west) + (-3mm, 3mm)$) -- ($(kv-1-1.south east) + (-3.5mm, 3.5mm)$);

			\begin{pgfonlayer}{tl3}
				\draw[thick, blue, ->, > = stealth] (kv-2-2.center) -- (kv-3-2.center) to[out = 180, in = 180] (kv-5-2.center) -- (kv-4-2.center);
				\draw[thick, blue, ->, > = stealth] (kv-2-3.center) -- (kv-3-3.center) to[out = 180, in = 180] (kv-5-3.center) -- (kv-4-3.center);
				\draw[thick, blue, ->, > = stealth] (kv-2-5.center) -- (kv-3-5.center) to[out = 180, in = 180] (kv-5-5.center) -- (kv-4-5.center);
				\draw[thick, blue, ->, > = stealth] (kv-2-4.center) -- (kv-3-4.center) to[out = 180, in = 180] (kv-5-4.center) -- (kv-4-4.center);
			\end{pgfonlayer}
			\begin{pgfonlayer}{tl2}
				\draw[thick, darkgreen, ->, > = stealth] (kv-4-2.center) -- (kv-2-3.center);
				\draw[thick, red, ->, > = stealth] (kv-4-3.center) -- (kv-2-5.center);
				\draw[thick, darkgreen, ->, > = stealth] (kv-4-5.center) -- (kv-2-4.center);
			\end{pgfonlayer}
		\end{tikzpicture}
	\end{center}
\end{minipage}
\begin{minipage}{0.5\linewidth}
	\begin{center}
		\begin{tikzpicture}
			\matrix (kv) [
				matrix of nodes,
				nodes in empty cells,
				column sep=-\pgflinewidth, row sep=-\pgflinewidth,
				nodes = {
						rectangle,
						draw = black,
						text width = 5mm,
						text height = 5mm,
						align = center,
						text = gray
					}
			]{
				\node[kvbinhead] {};   & \node[kvbinhead] {00}; & \node[kvbinhead] {01}; & \node[kvbinhead] {11}; & \node[kvbinhead] {10}; \\
				\node[kvbinhead] {00}; &                        &                        &                        &                        \\
				\node[kvbinhead] {01}; &                        &                        &                        &                        \\
				\node[kvbinhead] {11}; &                        &                        &                        &                        \\
				\node[kvbinhead] {10}; &                        &                        &                        &                        \\
			};

			\node[] at ($(kv-1-1.north east) + (-6mm, +2mm)$) {CD};
			\node[] at ($(kv-1-1.south west) + (-1mm, +5mm)$) {AB};
			\draw[] ($(kv-1-1.north west) + (-3mm, 3mm)$) -- ($(kv-1-1.south east) + (-3.5mm, 3.5mm)$);

			\begin{pgfonlayer}{tl3}
				\draw[thick, blue, ->, > = stealth] (kv-2-2.center) -- (kv-2-3.center) to[out = 90, in = 90] (kv-2-5.center) -- (kv-2-4.center);
				\draw[thick, blue, ->, > = stealth] (kv-3-2.center) -- (kv-3-3.center) to[out = 90, in = 90] (kv-3-5.center) -- (kv-3-4.center);
				\draw[thick, blue, ->, > = stealth] (kv-5-2.center) -- (kv-5-3.center) to[out = 90, in = 90] (kv-5-5.center) -- (kv-5-4.center);
				\draw[thick, blue, ->, > = stealth] (kv-4-2.center) -- (kv-4-3.center) to[out = 90, in = 90] (kv-4-5.center) -- (kv-4-4.center);
			\end{pgfonlayer}
			\begin{pgfonlayer}{tl2}
				\draw[thick, darkgreen, ->, > = stealth] (kv-2-4.center) -- (kv-3-2.center);
				\draw[thick, red, ->, > = stealth] (kv-3-4.center) -- (kv-5-2.center);
				\draw[thick, darkgreen, ->, > = stealth] (kv-5-4.center) -- (kv-4-2.center);
			\end{pgfonlayer}
		\end{tikzpicture}
	\end{center}
\end{minipage}
