\section{Algorithmen}

\subsection{Teilsummenproblem}

Ist ein NP-vollständiges Problem.

Jede Zahl darf nur einmal verwendet werden.
In der Summe muss eine bestimmte Zahl erreicht werden.

\subsection{3-SAT Problem}

Ist ein NP-vollständiges Problem.

Finden einer Belegung an Variablen, sodass eine Formel erfüllt wird.

Die Formel hat die Form:

\[
  (x_1 \lor x_2 \lor x_3) \land (x_4 \lor x_5 \lor x_6) \land \ldots
\]

\subsubsection{Umwandlung in Teilsummenproblem}

Zielzahl:
\[
  1 \dots 1 \ 4 \dots 4
\]
mit $1$ für jede Variable und $4$ für jede Klausel (Klammer).

Zahlen aus denen die Summe gebildet wird:

\textbf{1. Teil}: 1 an der Stelle der Variable, 0 ansonsten

\textbf{2. Teil}: 1 an der Stelle an der Die Variable in der Klausen positiv/negativ vorkommt, 0 ansonsten

\begin{tabular}{c | l | l}
  Variable & positive Belegung                 & negative Belegung                 \\
           & (1er wenn positiv)                & (1er wenn negativ)                \\
  \hline
  $x_1$    & $0 \dots 001 \ pos_1 \dots pos_n$ & $0 \dots 001 \ neg_1 \dots neg_n$ \\
  $x_2$    & $0 \dots 010 \ pos_1 \dots pos_n$ & $0 \dots 010 \ neg_1 \dots neg_n$ \\
  $x_3$    & $0 \dots 100 \ pos_1 \dots pos_n$ & $0 \dots 100 \ neg_1 \dots neg_n$ \\
  \dots    & \dots                             & \dots
\end{tabular}

\subsection{Programmablaufplan}

\subsubsection{Allgemeinheit}
Löst eine Klasse von Problemen.

\subsubsection{Ausführbarkeit}
Jeder Schritt ist ausführbar.

\subsubsection{Determinismus}
Jeder Schritt ist eindeutig, unabängig von Ein und Ausgaben.

\subsubsection{Determiniertheit}
Bei gleichen Eingaben, gleiche Ausgaben.

\subsubsection{Finitheit}
Beschreibung besitzt endliche Länge.

\subsubsection{Terminierung}
Die Ausführung endet bei einer endlichen Eingabe

\subsubsection{Dynamische Finitheit}
Beschränkter Resourcenverbrauch bei endlicher Eingabe.

\subsubsection{Komplexität}
Die Laufzeit / Resourcenverbrauch ist abschätzbar.

\subsection{Hoare-Kalkül}

\subsubsection{Vorbedingung}
Bedingung die vor der Ausführung der Zeile gelten muss.

\subsubsection{Nachbedingung}
Bedingung die nach der Ausführung der Zeile gelten muss.

\subsubsection{Schleifenbedingung}
Bedingung die vor jedem Schleifendurchlauf gelten muss.

\subsubsection{Schleifeninvariante}
Bedingung die vor und nach jedem Schleifendurchlauf gelten muss.
