\documentclass[11pt]{article}
\input{style_guide.tex}

\setlength{\parskip}{0.4em}
\setlength{\parindent}{0pt}

% Aufgabenkopf: #1 Nummer, #2 Titel, #3 Quelle+Punkte
\newcounter{aufg}
\newcommand{\katkopf}[2]{%
  \stepcounter{aufg}%
  \phantomsection\addcontentsline{toc}{subsection}{A\theaufg\ \ #1}%
  \noindent{\setlength{\fboxsep}{6pt}\colorbox{aufgabeink}{\parbox{\dimexpr\linewidth-12pt\relax}{%
    \color{white}\textbf{A\theaufg\quad #1}\hspace{1em}\hfill\mbox{\small #2}}}}\par\medskip}
\newcommand{\lsg}{\par\medskip\noindent{\color{loesgreen}\rule{\linewidth}{0.8pt}}\par\smallskip\noindent\textbf{Lösung.}\par\smallskip}

% Beispiel-Seite (eigene Seite, Teal-Kopf zur Abgrenzung vom Aufgabenkopf)
\newcommand{\bspkopf}[1]{\par\bigskip%
  \noindent{\setlength{\fboxsep}{6pt}\colorbox{bspink}{\parbox{\dimexpr\linewidth-12pt\relax}{%
  \color{white}\textbf{Beispiel\quad #1}}}}\par\medskip}

% Beispielgraph aus HA-Blatt 9 (A2/A3); #1 = Hervorhebungen obendrauf
\newcommand{\hanetz}[1]{%
\begin{tikzpicture}[scale=0.9]
  \node[knoten] (k1) at (0,3)     {1};
  \node[knoten] (k6) at (2,3)     {6};
  \node[knoten] (k2) at (4,3)     {2};
  \node[knoten] (k5) at (1.3,1.5) {5};
  \node[knoten] (k7) at (3,1.5)   {7};
  \node[knoten] (k8) at (0,0)     {8};
  \node[knoten] (k4) at (2,0)     {4};
  \node[knoten] (k3) at (4,0)     {3};
  \foreach \a/\b in {1/6,6/2,2/3,1/5,6/5,7/5,5/8,8/4,4/5,3/4,3/7,4/7}
    \draw[->,thick] (k\a) -- (k\b);
  #1
\end{tikzpicture}}

% ungerichtete Variante desselben Graphen (fuer VertexCover)
\newcommand{\hanetzu}[1]{%
\begin{tikzpicture}[scale=0.9]
  \node[knoten] (k1) at (0,3)     {1};
  \node[knoten] (k6) at (2,3)     {6};
  \node[knoten] (k2) at (4,3)     {2};
  \node[knoten] (k5) at (1.3,1.5) {5};
  \node[knoten] (k7) at (3,1.5)   {7};
  \node[knoten] (k8) at (0,0)     {8};
  \node[knoten] (k4) at (2,0)     {4};
  \node[knoten] (k3) at (4,0)     {3};
  \foreach \a/\b in {1/6,6/2,2/3,1/5,6/5,7/5,5/8,8/4,4/5,3/4,3/7,4/7}
    \draw[thick] (k\a) -- (k\b);
  #1
\end{tikzpicture}}

\title{\textbf{\Huge Aufgabenkatalog}\\[0.4em]
\large Alle Klausur-, Haus- und Präsenzaufgaben mit minimalen Lösungen\\
\normalsize \textit{Analyse von Algorithmen und Komplexität} -- CAU Kiel}
\author{}
\date{}

\begin{document}
\maketitle
\thispagestyle{empty}
\tableofcontents
\newpage

% ##################################################################
\section{NP-Zugehörigkeit}
% ##################################################################

% ==================================================================
\katkopf{Knapsack $\in$ NP}{Präsenz 9.1}
\textbf{Gegeben:} $n$ Gegenstände mit Gewichten $w_1,\dots,w_n$ und Profiten
$p_1,\dots,p_n$, Kapazität $K$, Zielprofit $P$.
\textbf{Entscheide:} Gibt es $S \subseteq [n]$ mit $\sum_{i\in S} w_i \le K$ und
$\sum_{i\in S} p_i \ge P$?

Zeigen Sie $\problem{Knapsack} \in \NP$ auf zwei Wege: (1) nichtdeterministischer
Polynomialzeit-Algorithmus, (2) polynomieller Verifizierer. Wie hängen beide
zusammen?

\bspkopf{Knapsack $\in$ NP}
\textbf{Instanz.} Drei Gegenstände als $(w_i, p_i)$:
\[
(2,3),\quad (3,4),\quad (5,6); \qquad K = 5,\ P = 7.
\]

\textbf{Kern.} Zertifikat $S = \{1,2\}$: Gewicht $2+3 = 5 \le K$ und
Profit $3+4 = 7 \ge P$ -- der Verifizierer akzeptiert. Der Rechenweg der NTM
mit den Entscheidungen $(\text{ja}, \text{ja}, \text{nein})$ wählt genau $S$
und akzeptiert.


\lsg
\textbf{(1) NTM.} Eingabe: Gewichte $w_1,\dots,w_n$, Profite
$p_1,\dots,p_n$, Kapazität $K$ und Zielprofit $P$.

Die NTM arbeitet wie folgt:
\begin{itemize}
\item Entscheide für jeden Gegenstand $i \in [n]$ nichtdeterministisch, ob er
in die Menge $S$ aufgenommen wird.
\item Prüfe $\sum_{i\in S} w_i \le K$; lehne sonst ab.
\item Prüfe $\sum_{i\in S} p_i \ge P$; lehne sonst ab.
\item Sonst akzeptiere.
\end{itemize}
\textbf{Korrektheit:} Existiert eine Füllung mit Gewicht $\le K$ und Profit
$\ge P$, dann gibt es eine Folge von Entscheidungen, die genau sie auswählt.
Dieser Rechenweg akzeptiert. Existiert keine, dann scheitert auf jedem
Rechenweg eine Prüfung -- die NTM lehnt ab.

\textbf{Laufzeit:} $n$ Rateschritte plus Summation und Vergleiche in $O(n)$ --
also eine polynomielle NTM.

\textbf{(2) Verifizierer.} Eingabe: Gewichte $w_1,\dots,w_n$, Profite
$p_1,\dots,p_n$, Kapazität $K$, Zielprofit $P$ und Zertifikat
$S \subseteq [n]$.

Der Verifizierer arbeitet wie folgt:
\begin{itemize}
\item Prüfe $\sum_{i\in S} w_i \le K$; lehne sonst ab.
\item Prüfe $\sum_{i\in S} p_i \ge P$; lehne sonst ab.
\item Sonst akzeptiere.
\end{itemize}
\textbf{Korrektheit:} Existiert eine Füllung mit Gewicht $\le K$ und Profit
$\ge P$, dann ist genau diese Menge $S$ ein Zertifikat, das akzeptiert wird.
Existiert keine, dann verletzt jedes Zertifikat eine der beiden Prüfungen --
der Verifizierer lehnt ab.

\textbf{Laufzeit:} Summen bilden und vergleichen -- $O(n)$, also ein
polynomieller Verifizierer.

\textbf{Zusammenhang:} Die Folge der Rateschritte der NTM \emph{ist} das
Zertifikat. Beide Wege bestimmen mit der Extra-Ressource einen Kandidaten und
prüfen ihn dann deterministisch.

Also gilt $\problem{Knapsack} \in \NP$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{VertexCover $\in$ NP (mit Beispielgraph)}{Hausaufgabe 9.1, 5 P.}
\textbf{Problem \problem{VertexCover}:} Gegeben ein Graph $G = (V,E)$ und eine
Zahl $k \in \mathbb{N}_0$. Ein Vertex Cover ist eine Knotenmenge
$C \subseteq V$, die von jeder Kante mindestens einen Endpunkt enthält. Gibt es
ein Vertex Cover mit $|C| \le k$?

\textbf{Gegeben} der folgende ungerichtete Graph:
\begin{center}
\hanetzu{}
\end{center}
\begin{enumerate}
\item Finden Sie ein minimales Vertex Cover.
\item Zeigen Sie $\problem{VertexCover} \in \NP$ durch einen
nichtdeterministischen Polynomialzeit-Algorithmus (Korrektheit + Laufzeit).
\end{enumerate}

\bspkopf{VertexCover $\in$ NP}
\textbf{Instanz.} Das folgende Viereck mit Schranke $k=2$.
\begin{center}
\begin{tikzpicture}[scale=1]
  \node[kndick] (v1) at (0,2) {1};
  \node[knoten] (v2) at (2,2) {2};
  \node[kndick] (v3) at (2,0) {3};
  \node[knoten] (v4) at (0,0) {4};
  \draw[thick] (v1)--(v2) (v2)--(v3) (v3)--(v4) (v4)--(v1);
\end{tikzpicture}
\end{center}
\textbf{Kern.} Die Knotenmenge $C=\{1,3\}$ (grau markiert) ist ein Vertex
Cover: $|C|=2\le k$ und jede Kante hat einen Endpunkt in $C$. Der Rechenweg,
der genau diese Menge wählt, akzeptiert.


\lsg
\textbf{1.} Ein minimales Vertex Cover ist $C = \{3,4,5,6\}$ (Größe 4).
\begin{center}
\hanetzu{\node[kndick] at (4,0) {3};\node[kndick] at (2,0) {4};%
\node[kndick] at (1.3,1.5) {5};\node[kndick] at (2,3) {6};}
\end{center}

\textbf{2.} Der Algorithmus arbeitet wie folgt:
\begin{itemize}
\item Entscheide für jeden Knoten $v \in V$ nichtdeterministisch, ob er in $C$
aufgenommen wird.
\item Prüfe $|C| \le k$; lehne sonst ab.
\item Prüfe für jede Kante $\{u,v\} \in E$, ob $u \in C$ oder $v \in C$.
\item Lehne ab, falls für eine Kante keiner der beiden Endpunkte in $C$ liegt.
\item Sonst akzeptiere.
\end{itemize}
\textbf{Korrektheit:} Existiert ein Vertex Cover der Größe $\le k$, gibt es eine
Folge von Entscheidungen, die genau diese Menge wählt -- sie wird akzeptiert.
Existiert keines, lehnt jeder Rechenweg ab.

\textbf{Laufzeit:} Auswahl der Knoten und Prüfung aller Kanten laufen in
$O(|V| + |E|)$, also polynomiell. Damit $\problem{VertexCover} \in \NP$.
\hfill$\square$

\newpage
% ==================================================================
\katkopf{FeedbackVertexSet $\in$ NP (mit Beispielgraph)}{Hausaufgabe 9.2, 5 P.}
\textbf{Problem \problem{FeedbackVertexSet}:} Gegeben ein gerichteter Graph
$G = (V,E)$ und eine Zahl $k \in \mathbb{N}_0$. Gibt es eine Knotenmenge
$X \subseteq V$ mit $|X| \le k$, sodass $G \setminus X$ (der Graph nach
Entfernen von $X$ samt anliegender Kanten) kreisfrei ist?

\textbf{Gegeben} der folgende gerichtete Graph:
\begin{center}
\hanetz{}
\end{center}
\begin{enumerate}
\item Finden Sie ein minimales Feedback Vertex Set im gegebenen Graphen.
\item Zeigen Sie $\problem{FeedbackVertexSet} \in \NP$ durch einen polynomiellen
Verifizierer (Korrektheit + Laufzeit).
\end{enumerate}

\bspkopf{FeedbackVertexSet $\in$ NP}
\textbf{Instanz.} Der folgende gerichtete Graph mit Schranke $k=1$. Sein
einziger Kreis ist $1{\to}2{\to}3{\to}1$.
\begin{center}
\begin{tikzpicture}[scale=1]
  \node[knoten] (v1) at (1,2)    {1};
  \node[kndick] (v2) at (2.2,0.4){2};
  \node[knoten] (v3) at (0,0.4)  {3};
  \node[knoten] (v4) at (-1.7,1.3){4};
  \draw[->,thick] (v1)--(v2);
  \draw[->,thick] (v2)--(v3);
  \draw[->,thick] (v3)--(v1);
  \draw[->,thick] (v3)--(v4);
\end{tikzpicture}
\end{center}
\textbf{Kern.} Zertifikat $X=\{2\}$ (grau markiert): $|X|=1\le k$, und in
$G\setminus X$ gelingt die topologische Sortierung $(3,1,4)$ -- kreisfrei,
der Verifizierer akzeptiert.


\lsg
\textbf{1.} Ein minimales FVS ist $X = \{5\}$ (Größe 1): ohne Knoten 5
bleibt kein Kreis übrig.
\begin{center}
\hanetz{\draw[->,line width=1.6pt] (k5) -- (k8);%
\draw[->,line width=1.6pt] (k8) -- (k4);%
\draw[->,line width=1.6pt] (k4) -- (k5);%
\node[kndick] at (1.3,1.5) {5};}
\end{center}

\textbf{2.} Eingabe: Graph $G = (V,E)$, Zahl $k$ und Zertifikat
$X \subseteq V$.

Der Verifizierer arbeitet wie folgt:
\begin{itemize}
\item Prüfe $|X| \le k$; lehne sonst ab.
\item Konstruiere $G' = G \setminus X$.
\item Prüfe mit topologischer Sortierung, ob $G'$ kreisfrei ist: Sie
existiert genau dann, wenn kein Kreis existiert. Akzeptiere entsprechend.
\end{itemize}
\textbf{Korrektheit:} Existiert ein FVS der Größe $\le k$, dann gibt es ein
Zertifikat, das genau dieses beschreibt. $G'$ ist dann kreisfrei und der
Verifizierer akzeptiert. Existiert keines, dann verletzt jedes Zertifikat
eine der beiden Prüfungen -- der Verifizierer lehnt ab.

\textbf{Laufzeit:} Größentest $O(|V|)$, Konstruktion und topologische
Sortierung $O(|V|+|E|)$ -- polynomiell. Damit
$\problem{FeedbackVertexSet} \in \NP$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{Longest Path $\in$ NP (Dreischritt)}{Klausur SS23-H, A2, 3+3+4 P.}
\textbf{Problem \problem{Longest Path}:} Gegeben ein ungerichteter Graph
$G = (V,E)$ und eine Zahl $k$. Gibt es einen \emph{einfachen} Pfad in $G$
(kein Knoten wird doppelt besucht) mit Länge $\ge k$?

Zeigen Sie auf verschiedene Weisen, dass das Problem in NP liegt:
\begin{enumerate}
\item[a)] Geben Sie ein Zertifikat für \problem{Longest Path} an.
\item[b)] Beschreiben Sie einen Verifizierer für \problem{Longest Path} und
geben Sie dessen Laufzeit konkret an.
\item[c)] Beschreiben Sie eine nichtdeterministische Turing-Maschine (in
Worten), die \problem{Longest Path} löst. Geben Sie auch hier die Laufzeit
konkret an.
\end{enumerate}

\bspkopf{Longest Path $\in$ NP}
\textbf{Instanz.} Das folgende Viereck mit Schranke $k=3$ (gesucht: ein
einfacher Pfad mit $k{+}1=4$ Knoten).
\begin{center}
\begin{tikzpicture}[scale=1]
  \node[knoten] (v1) at (0,2) {1};
  \node[knoten] (v2) at (2,2) {2};
  \node[knoten] (v3) at (2,0) {3};
  \node[knoten] (v4) at (0,0) {4};
  \draw[line width=1.6pt] (v1)--(v2) (v2)--(v3) (v3)--(v4);
  \draw[thick] (v4)--(v1);
\end{tikzpicture}
\end{center}
\textbf{Kern.} Zertifikat $(1,2,3,4)$ (fetter Pfad): alle vier Knoten sind
paarweise verschieden und jede der drei Pfadkanten existiert -- der
Verifizierer akzeptiert diesen einfachen Pfad der Länge $3 \ge k$. Der
Rechenweg der NTM, der genau diese Folge rät, akzeptiert.


\lsg
\textbf{a)} Eine Folge von $k+1$ paarweise verschiedenen Knoten
$(v_0, \dots, v_k)$ -- der behauptete Pfad.

\textbf{b)} Eingabe: Graph $G = (V,E)$, Zahl $k$ und Zertifikat
$(v_0, \dots, v_k)$.

Der Verifizierer arbeitet wie folgt:
\begin{itemize}
\item Prüfe, ob alle $v_i$ paarweise verschieden sind; lehne sonst ab.
\item Prüfe für jedes $i < k$, ob $\{v_i, v_{i+1}\} \in E$ gilt; lehne sonst
ab.
\item Sonst akzeptiere.
\end{itemize}
\textbf{Korrektheit:} Hat $G$ einen einfachen Pfad der Länge $\ge k$, dann
bilden dessen erste $k+1$ Knoten ein Zertifikat. Dieses besteht beide
Prüfungen und wird akzeptiert. Wird umgekehrt ein Zertifikat akzeptiert, dann
beschreibt es einen einfachen Pfad der Länge $k$. Also hat $G$ einen einfachen
Pfad der Länge $\ge k$.

\textbf{Laufzeit:} Die Verschiedenheit kostet $O(k^2)$ paarweise Vergleiche.
Jede der $k$ Kanten wird mit einem Adjazenzmatrix-Lookup in $O(1)$ geprüft.
Gesamt $O(k^2) \subseteq O(|V|^2)$, polynomiell.

\textbf{c)} Die NTM arbeitet wie folgt:
\begin{itemize}
\item Rate nacheinander $k+1$ Knoten $v_0, \dots, v_k$ auf ein Arbeitsband.
\item Prüfe, ob alle geratenen Knoten paarweise verschieden sind; lehne sonst
ab.
\item Prüfe für jedes $i < k$, ob $\{v_i, v_{i+1}\} \in E$ gilt; lehne sonst
ab.
\item Sonst akzeptiere.
\end{itemize}
\textbf{Korrektheit:} Hat $G$ einen einfachen Pfad der Länge $\ge k$, dann rät
ein Rechenweg genau dessen erste $k+1$ Knoten und akzeptiert. Sonst scheitert
auf jedem Rechenweg eine Prüfung -- die NTM lehnt ab.

\textbf{Laufzeit:} $k+1$ Rateschritte plus $O(|V|^2)$ für die Prüfungen --
insgesamt polynomiell.

Also gilt $\problem{Longest Path} \in \NP$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{Dominating Set $\in$ NP (Dreischritt)}{Klausur SS23-N, A2, 3+3+4 P.}
\textbf{Problem \problem{Dominating Set}:} Gegeben ein ungerichteter Graph
$G = (V,E)$ und $k \in \mathbb{N}_0$. Gibt es $D \subseteq V$ mit $|D| \le k$,
sodass jeder Knoten in $D$ liegt oder zu einem Knoten in $D$ benachbart ist?

Zeigen Sie auf verschiedene Weisen, dass das Problem in NP liegt:
\begin{enumerate}
\item[a)] Geben Sie ein Zertifikat für \problem{Dominating Set} an.
\item[b)] Beschreiben Sie einen polynomiellen Verifizierer für
\problem{Dominating Set} und schätzen Sie die Laufzeit in $O$-Notation konkret
ab.
\item[c)] Beschreiben Sie (in Worten) eine polynomielle, nichtdeterministische
Turing-Maschine, die \problem{Dominating Set} löst. Schätzen Sie auch hier die
Laufzeit in $O$-Notation konkret ab.
\end{enumerate}

\bspkopf{Dominating Set $\in$ NP}
\textbf{Instanz.} Der folgende Stern mit Zentrum 1 und Schranke $k=1$.
\begin{center}
\begin{tikzpicture}[scale=1]
  \node[kndick] (v1) at (0,0)     {1};
  \node[knoten] (v2) at (0,1.7)   {2};
  \node[knoten] (v3) at (-1.6,-1) {3};
  \node[knoten] (v4) at (1.6,-1)  {4};
  \draw[thick] (v1)--(v2) (v1)--(v3) (v1)--(v4);
\end{tikzpicture}
\end{center}
\textbf{Kern.} Zertifikat $D=\{1\}$ (grau markiert): $|D|=1\le k$, das
Zentrum liegt in $D$ und jedes Blatt ist zu ihm benachbart -- der Verifizierer
akzeptiert. Der Rechenweg der NTM, der genau diese Menge wählt, akzeptiert.


\lsg
\textbf{a)} Die Knotenmenge $D \subseteq V$.

\textbf{b)} Eingabe: Graph $G = (V,E)$, Zahl $k$ und Zertifikat
$D \subseteq V$.

Der Verifizierer arbeitet wie folgt:
\begin{itemize}
\item Prüfe $|D| \le k$; lehne sonst ab.
\item Prüfe für jeden Knoten $v \in V$, ob $v \in D$ gilt oder ein Nachbar von
$v$ in $D$ liegt. Durchlaufe dazu die Zeile von $v$ in der Adjazenzmatrix.
\item Lehne ab, falls ein Knoten weder in $D$ liegt noch einen Nachbarn in $D$
hat.
\item Sonst akzeptiere.
\end{itemize}
\textbf{Korrektheit:} Existiert ein Dominating Set der Größe $\le k$, dann
ist genau dieses ein Zertifikat, das akzeptiert wird. Existiert keines, dann
verletzt jedes Zertifikat eine der beiden Prüfungen -- der Verifizierer lehnt
ab.

\textbf{Laufzeit:} Der Größentest läuft in $O(|V|)$, der Dominanztest in
$O(|V|)$ pro Knoten. Gesamt $O(|V|^2)$, polynomiell.

\textbf{c)} Die NTM arbeitet wie folgt:
\begin{itemize}
\item Entscheide für jeden Knoten $v \in V$ nichtdeterministisch, ob er in $D$
aufgenommen wird.
\item Prüfe $|D| \le k$; lehne sonst ab.
\item Prüfe für jeden Knoten $v \in V$, ob $v \in D$ gilt oder ein Nachbar von
$v$ in $D$ liegt; lehne sonst ab.
\item Sonst akzeptiere.
\end{itemize}
\textbf{Korrektheit:} Existiert ein Dominating Set der Größe $\le k$, dann
wählt eine Folge von Entscheidungen genau dieses aus. Dieser Rechenweg
akzeptiert. Existiert keines, dann lehnt jeder Rechenweg ab.

\textbf{Laufzeit:} $O(|V|)$ Rateschritte plus $O(|V|^2)$ für die Prüfungen,
also $O(|V|^2)$, polynomiell.

Also gilt $\problem{Dominating Set} \in \NP$. \hfill$\square$

\newpage
% ##################################################################
\section{Vorlesungsbeweise}
% ##################################################################

% ==================================================================
\katkopf{$P \subseteq NP$}{Vorlesung (Skript)}
Zeigen Sie: $\Pclass \subseteq \NP$.

\bspkopf{$P \subseteq NP$: ein P-Problem als NP-Problem}
\textbf{Instanz.} $L = \problem{Erreichbarkeit}$: Gegeben ein Graph $G$ und
Knoten $s, t$ -- gibt es einen Weg von $s$ nach $t$? Das liegt in $\Pclass$
(Breitensuche, $O(|V| + |E|)$). Konkret $s = 1$, $t = 4$:
\begin{center}
\begin{tikzpicture}
  \node[knoten] (1) at (0,0)   {1};
  \node[knoten] (2) at (1.5,0) {2};
  \node[knoten] (4) at (3,0)   {4};
  \node[knoten] (3) at (4.8,0) {3};
  \draw (1)--(2) (2)--(4);
\end{tikzpicture}
\end{center}

\textbf{Kern.} Der Verifizierer $V(x, c)$ startet die Breitensuche auf
$x = (G,s,t)$ und ignoriert $c$ komplett. Sie findet $1 \to 2 \to 4$, also
akzeptiert $V$ für jedes Zertifikat -- etwa das leere Wort
$c = \varepsilon$. Ein akzeptiertes Zertifikat existiert.


\lsg
Sei $L \in \Pclass$. Dann gibt es einen polynomiellen Algorithmus $A$, der
$L$ entscheidet.

\textbf{Konstruktion:} Fasse $A$ als Verifizierer $V$ auf: $V(x, c) := A(x)$
-- $V$ ignoriert das Zertifikat $c$ und berechnet die Antwort selbst.

\textbf{Korrektheit:} Ist $x \in L$, akzeptiert $V(x,c)$ für jedes $c$ (etwa
das leere Wort) -- ein akzeptiertes Zertifikat existiert. Ist $x \notin L$,
verwirft $V(x,c)$ für jedes $c$ -- kein Zertifikat wird akzeptiert. Also
$L = \{x \mid \exists c:\ V(x,c) = 1\}$.

\textbf{Laufzeit:} Dieselbe wie die von $A$, also polynomiell. Damit ist
$V$ ein polynomieller Verifizierer und $L \in \NP$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{NDTM-Definition $\subseteq$ Verifizierer-Definition}{Klausur SS25-H, A2, 2+8 P.}
Sei $L \subseteq \Sigma^*$ eine Sprache, für die eine NDTM $M$ über einem
Alphabet $\Gamma \supset \Sigma$ und ein Polynom $T$ existieren, sodass $L$
von $M$ in nicht-deterministischer Zeit $T$ entschieden wird. Beweisen Sie:
Es existiert ein polynomieller Verifizierer für $L$.
\begin{enumerate}
\item[a)] Geben Sie dafür zunächst für die Sprache $L$, die durch die
folgende NDTM $M$ akzeptiert wird, einen polynomiellen Verifizierer an, der
in analoger Weise arbeitet. Die NDTM $M$ erhält als Eingabe einen
ungerichteten Graphen $G = (V,E)$ und eine Zahl $k \in \mathbb{N}_0$.

\smallskip
$M(G = (V,E),\ k)$
\begin{itemize}
\item[1.] Rate nicht-deterministisch eine Menge von Knoten $C \subseteq V$.
\item[2.] Für alle $\{u,v\} \in E$: Falls $u \notin C$ und $v \notin C$,
verwerfe.
\item[3.] Falls $|C| > k$, verwerfe.
\item[4.] Akzeptiere.
\end{itemize}
\item[b)] Führen Sie nun einen allgemeingültigen Beweis.
\end{enumerate}

\bspkopf{NDTM $\subseteq$ Verifizierer: VC am Dreieck, $k=2$}
\textbf{Instanz.} Das folgende Dreieck $G$ mit $k=2$:
\begin{center}
\begin{tikzpicture}
  \node[kndick] (n1) at (90:1)  {$1$};
  \node[kndick] (n2) at (210:1) {$2$};
  \node[knoten] (n3) at (330:1) {$3$};
  \draw[very thick] (n1)--(n2);
  \draw[thick] (n1)--(n3) (n2)--(n3);
  \node[font=\footnotesize,align=center] at (0,-1.8)
    {Zertifikat: Knotenmenge $C=\{1,2\}$\\ (Knoten $1,2$ hervorgehoben)};
\end{tikzpicture}
\end{center}
\textbf{Kern.} Die NDTM rät die Knotenmenge $C \subseteq V$; der
Verifizierer erhält $C$ als Zertifikat und prüft mit denselben Schritten
2--4 -- das Raten ist durch das Zertifikat ersetzt. Für $C=\{1,2\}$ ist
jede Kante durch $1$ oder $2$ gedeckt und $|C|=2\le k$ -- er akzeptiert.


\lsg
\textbf{a)} Eingabe: Graph $G = (V,E)$, Zahl $k$ und Zertifikat $c$.

Der Verifizierer $V(G, k;\ c)$ arbeitet wie folgt:
\begin{itemize}
\item[1.] Interpretiere das Zertifikat $c$ als Knotenmenge $C \subseteq V$.
\item[2.] Für alle $\{u,v\} \in E$: Falls $u \notin C$ und $v \notin C$,
verwerfe.
\item[3.] Falls $|C| > k$, verwerfe.
\item[4.] Akzeptiere.
\end{itemize}
Das Raten ist durch das Zertifikat ersetzt. Die Prüfschritte 2--4 sind
identisch zur NDTM. \textbf{Laufzeit:} Jede Kante prüfen und $|C|$ zählen --
$O(|V| + |E|)$, polynomiell.

\textbf{b)} Sei $L$ von der NDTM $M$ in nicht-deterministischer Zeit $T$
akzeptiert.

Eingabe: Wort $x$ und als Zertifikat eine Folge $c$ von höchstens $T(|x|)$
nichtdeterministischen Entscheidungen.

Der Verifizierer $V(x, c)$ arbeitet wie folgt:
\begin{itemize}
\item Simuliere $M$ auf $x$ deterministisch, höchstens $T(|x|)$ Schritte.
\item Bei jedem Schritt mit mehreren möglichen Übergängen wähle den Übergang,
den die Entscheidungsfolge $c$ vorgibt.
\item Falls die Simulation akzeptierend endet, akzeptiere.
\item Sonst lehne ab.
\end{itemize}

\textbf{Korrektheit:} Ist $x \in L$, dann hat $M$ einen akzeptierenden
Rechenweg mit höchstens $T(|x|)$ Schritten. Seine Entscheidungsfolge ist ein
Zertifikat, das $V$ akzeptiert.

Ist $x \notin L$, dann akzeptiert kein Rechenweg von $M$. Jede
Entscheidungsfolge steuert die Simulation einen Rechenweg von $M$ entlang --
$V$ lehnt jedes Zertifikat ab.

\textbf{Laufzeit:} Höchstens $T(|x|)$ Simulationsschritte mit konstantem
Aufwand pro Schritt -- $O(T(|x|))$, polynomiell. Das Zertifikat umfasst
höchstens $T(|x|)$ Entscheidungen -- polynomiell viele. Somit ist $V$ ein
polynomieller Verifizierer für $L$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{Verifizierer-Definition $\subseteq$ NDTM-Definition}{Vorlesung (Skript)}
Sei $L$ eine Sprache mit einem polynomiellen Verifizierer $M$: Für jedes
$x \in L$ existiert ein Zertifikat $c$ mit $M(x,c) = 1$ und Laufzeit
$O(|x|^d)$; für $x \notin L$ akzeptiert $M$ kein Zertifikat.

Zeigen Sie: Es gibt eine NDTM $N$, die $L$ in Polynomialzeit entscheidet.

\bspkopf{Verifizierer $\subseteq$ NDTM: VC am Dreieck}
\textbf{Instanz.} \problem{VertexCover} am folgenden Dreieck $G$ mit
$k=2$. Gegeben ist der Verifizierer: prüfe $|C| \le k$ und jede Kante
gedeckt.
\begin{center}
\begin{tikzpicture}
  \node[kndick] (n1) at (90:1)  {$1$};
  \node[kndick] (n2) at (210:1) {$2$};
  \node[knoten] (n3) at (330:1) {$3$};
  \draw[very thick] (n1)--(n2);
  \draw[thick] (n1)--(n3) (n2)--(n3);
  \node[font=\footnotesize,align=center] at (0,-1.8)
    {geratene Knotenmenge $C=\{1,2\}$\\ (Knoten $1,2$ hervorgehoben)};
\end{tikzpicture}
\end{center}

\textbf{Kern.} Die NDTM rät einen String $u$ und simuliert den Verifizierer.
Der Rechenweg mit $C = \{1,2\}$ akzeptiert -- also akzeptiert die NDTM.


\lsg
\textbf{Konstruktion:} Wähle $p$ als das Laufzeitpolynom von $M$, also
$p(|x|) = O(|x|^d)$. In $p(|x|)$ Schritten liest $M$ höchstens $p(|x|)$
Zeichen des Zertifikats. Die NDTM $N$ arbeitet bei Eingabe $x$ in zwei
Phasen:
\begin{itemize}
\item[(1)] \emph{Raten:} Schreibe mit nichtdeterministischen Entscheidungen
einen beliebigen String $u$ mit $|u| \le p(|x|)$ auf ein Arbeitsband.
\item[(2)] \emph{Verifizieren:} Simuliere $M$ auf $(x, u)$ deterministisch
und übernimm dessen Antwort.
\end{itemize}

\textbf{Korrektheit:} Ist $x \in L$, dann existiert ein Zertifikat $c$ mit
$M(x,c) = 1$. $M$ liest davon höchstens die ersten $p(|x|)$ Zeichen. Der
Rechenweg, der genau diesen Anfang als $u$ rät, akzeptiert -- also
akzeptiert $N$. Ist $x \notin L$, dann verwirft $M$ jedes geratene $u$.
Alle Rechenwege verwerfen -- also verwirft $N$.

\textbf{Laufzeit:} Phase (1) braucht $p(|x|)$ Rateschritte, Phase (2) läuft
in $O(|x|^d)$. Insgesamt polynomiell -- $N$ entscheidet $L$ in
nichtdeterministischer Polynomialzeit. \hfill$\square$

\newpage
% ==================================================================
\katkopf{Transitivität von Polynomialzeitreduktionen}{Präsenz 9.2}
Zeigen Sie: Für alle Entscheidungsprobleme $L_1, L_2, L_3$ gilt
$L_1 \redp L_2 \wedge L_2 \redp L_3 \implies L_1 \redp L_3$.

\bspkopf{Transitivität an einer Reduktionskette}
\textbf{Instanz.} Die Kette
$\problem{Clique}\redp\problem{VC}\redp\problem{FVS}$ an der Ja-Instanz
$x=(K_3,\,3)$ (Standardreduktionen $f_1(G,k)=(\overline{G},\,|V|-k)$, dann
$f_2$ für $\problem{VC}\redp\problem{FVS}$):
\begin{center}
\begin{tikzpicture}[lab/.style={font=\footnotesize,align=center}]
  \begin{scope}
    \node[kndick] (a1) at (90:0.9)  {$1$};
    \node[kndick] (a2) at (210:0.9) {$2$};
    \node[kndick] (a3) at (330:0.9) {$3$};
    \draw[very thick] (a1)--(a2)--(a3)--(a1);
    \node[lab] at (0,-1.6) {\problem{Clique}: $(K_3,\,k{=}3)$\\ \emph{ja}, $3$-Clique $\{1,2,3\}$};
  \end{scope}
  \draw[->,thick] (1.4,0)-- node[above,lab]{$f_1$: Komplement,\\ $k'{=}3{-}3{=}0$} (3.0,0);
  \begin{scope}[xshift=4.4cm]
    \node[knoten] (b1) at (90:0.9)  {$1$};
    \node[knoten] (b2) at (210:0.9) {$2$};
    \node[knoten] (b3) at (330:0.9) {$3$};
    \node[lab] at (0,-1.6) {\problem{VC}: $(\overline{K_3},\,0)$\\ \emph{ja}, keine Kanten, $C=\emptyset$};
  \end{scope}
  \draw[->,thick] (5.8,0)-- node[above,lab]{$f_2$} (7.0,0);
  \begin{scope}[xshift=8.4cm]
    \node[knoten] (c1) at (90:0.9)  {$1$};
    \node[knoten] (c2) at (210:0.9) {$2$};
    \node[knoten] (c3) at (330:0.9) {$3$};
    \node[lab] at (0,-1.6) {\problem{FVS}: Größe $0$\\ \emph{ja}, keine Kreise, $S=\emptyset$};
  \end{scope}
\end{tikzpicture}
\end{center}
\textbf{Kern.} Die Verkettung $f_2\circ f_1$ ist eine Reduktion
$\problem{Clique}\redp\problem{FVS}$: $x\in\problem{Clique}\iff
x'\in\problem{VC}\iff x''\in\problem{FVS}$ -- hier dreimal Ja. Laufen
$f_1$ in $O(n^a)$ und $f_2$ in $O(n^b)$, dann hat $x'$ höchstens Größe
$O(n^a)$, und die Verkettung läuft in $O(n^{ab})$ -- polynomiell.


\lsg
Sei $R_1$ eine Reduktion von $L_1$ auf $L_2$ mit Laufzeit $O(n^a)$ und $R_2$
eine Reduktion von $L_2$ auf $L_3$ mit Laufzeit $O(n^b)$.

\textbf{Korrektheit:} Mit $x'' = R_2(R_1(x))$ gilt
\[
x \in L_1 \iff x' \in L_2 \quad\text{und}\quad x' \in L_2 \iff x'' \in L_3,
\]
also $x \in L_1 \iff x'' \in L_3$. Damit ist $R_2 \circ R_1$ eine Reduktion
von $L_1$ auf $L_3$.

\textbf{Laufzeit:} Sei $x$ eine $L_1$-Instanz der Größe $n$.
\begin{itemize}
\item $R_1(x)$ braucht $O(n^a)$ Zeit; die Ausgabe $x'$ hat damit Größe
$O(n^a)$ (mehr kann in der Zeit nicht geschrieben werden).
\item $R_2(x')$ braucht dann $O((n^a)^b) = O(n^{ab})$ Zeit.
\end{itemize}
Die Verkettung ist also polynomiell. \hfill$\square$

\newpage
% ==================================================================
\katkopf{Vererbung der NP-Vollständigkeit}{Vorlesung (Skript)}
Zeigen Sie: Ist $L_0$ NP-vollständig, gilt $L_0 \redp L_1$ und ist
$L_1 \in \NP$, so ist auch $L_1$ NP-vollständig.

\emph{Hinweis:} Die Relation $\redp$ ist transitiv.

\bspkopf{Vererbung: von VertexCover zu FeedbackVertexSet}
\textbf{Instanz.} $L_0 = \problem{VertexCover}$ (NP-vollständig),
$L_1 = \problem{FeedbackVertexSet} \in \NP$; die Reduktion
$\problem{VertexCover} \redp \problem{FeedbackVertexSet}$ macht jede Kante
zu zwei antiparallelen Bögen:
\begin{center}
\begin{tikzpicture}
  \begin{scope}
    \node[knoten] (a1) at (0,0)   {1};
    \node[kndick] (a2) at (1.5,0) {2};
    \node[knoten] (a3) at (3,0)   {3};
    \draw (a1)--(a2) (a2)--(a3);
    \node[font=\footnotesize] at (1.5,-1.0) {VC-Instanz, $k=1$};
  \end{scope}
  \draw[->,thick] (3.9,0) -- (5.3,0);
  \begin{scope}[xshift=6.2cm]
    \node[knoten] (b1) at (0,0)   {1};
    \node[kndick] (b2) at (1.5,0) {2};
    \node[knoten] (b3) at (3,0)   {3};
    \draw[->] (b1) to[bend left=35] (b2);
    \draw[->] (b2) to[bend left=35] (b1);
    \draw[->] (b2) to[bend left=35] (b3);
    \draw[->] (b3) to[bend left=35] (b2);
    \node[font=\footnotesize] at (1.5,-1.0) {FVS-Instanz, $k=1$};
  \end{scope}
\end{tikzpicture}
\end{center}
\textbf{Kern.} Jedes $L \in \NP$ reduziert auf \problem{VertexCover},
und mit $\problem{VertexCover} \redp \problem{FeedbackVertexSet}$ folgt per
Transitivität $L \redp \problem{FeedbackVertexSet}$. Also ist
\problem{FeedbackVertexSet} NP-schwer und wegen
$\problem{FeedbackVertexSet} \in \NP$ NP-vollständig.


\lsg
Zu zeigen sind die beiden Teile der NP-Vollständigkeit: $L_1 \in \NP$ (gilt
nach Voraussetzung) und $L \redp L_1$ für \emph{jedes} $L \in \NP$.

\textbf{Beweis der NP-Schwere:} Sei $L \in \NP$ beliebig.
\begin{itemize}
\item Da $L_0$ NP-vollständig ist, reduziert jedes NP-Problem auf $L_0$ --
insbesondere $L \redp L_0$.
\item Nach Voraussetzung gilt $L_0 \redp L_1$.
\item Da $\redp$ transitiv ist, folgt $L \redp L_1$.
\end{itemize}
Da $L$ beliebig gewählt war, reduziert jedes NP-Problem auf $L_1$ -- $L_1$
ist NP-schwer. Zusammen mit $L_1 \in \NP$ ist $L_1$ NP-vollständig.
\hfill$\square$

\newpage
% ==================================================================
\katkopf{$L_0$ NP-vollständig und $L_0 \in P$ $\Rightarrow$ $P = NP$}{Klausur SS25-N, A2, 10 P.}
Beweisen Sie: Sei $L_0$ eine NP-vollständige Sprache. Falls $L_0 \in P$, dann
gilt $P = NP$.

\bspkopf{$L_0$ NP-vollständig $\wedge\ L_0\in P \Rightarrow P=NP$ konkret}
\textbf{Instanz.} $L_0=\problem{3-SAT}$ ist NP-vollständig, und ein
Algorithmus $A$ entscheide $\problem{3-SAT}$ in $O(n^3)$.

\textbf{Kern.} Nimm ein beliebiges $L\in\NP$, etwa $\problem{Clique}$: Da
$L_0$ NP-vollständig ist, existiert eine Reduktion
$f:\problem{Clique}\redp\problem{3-SAT}$, etwa mit Laufzeit $O(n^2)$.
Berechne zur Eingabe $x$ erst $f(x)$ und wende dann $A$ an -- das
entscheidet \problem{Clique} korrekt
($x\in\problem{Clique}\iff f(x)\in\problem{3-SAT}$) in
$O(n^2)+O((n^2)^3)=O(n^6)$, polynomiell. So liegt jedes $L\in\NP$ in $P$,
also $P=NP$.


\lsg
$P \subseteq NP$ gilt stets. Zu zeigen bleibt $NP \subseteq P$.

Sei $L \in NP$ beliebig. Da $L_0$ NP-vollständig ist, gibt es eine Reduktion
$f$ von $L$ auf $L_0$ mit Laufzeit $O(n^a)$. Sei $A$ ein Algorithmus, der
$L_0$ in Zeit $O(n^c)$ entscheidet.

So entscheidet man $L$: Berechne $f(x)$ und wende $A$ darauf an. Das ist
korrekt, denn $x \in L \iff f(x) \in L_0$. Und polynomiell: $f(x)$ hat
Größe $O(n^a)$, also braucht $A$ darauf $O((n^a)^c) = O(n^{ac})$.

Also gilt $L \in P$ für jedes $L \in NP$. Zusammen mit $P \subseteq NP$
folgt $P = NP$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{SAT $\redp$ 3-SAT}{Klausur SS24-N, A2, 10 P.}
Beweisen Sie: \problem{3-SAT} ist NP-vollständig. Zeigen Sie dafür
$\problem{SAT} \redp \problem{3-SAT}$; $\problem{3-SAT} \in \NP$ dürfen Sie
annehmen.

\bspkopf{SAT $\redp$ 3-SAT: eine 5er-Klausel zerlegt}
\textbf{Instanz.} Die Klausel $C=(y_1\vee y_2\vee y_3\vee y_4\vee y_5)$,
also $\ell=5$ mit neuen Variablen $x_1,x_2$.

\textbf{Kern.} $C$ wird ersetzt durch die Kette
\[
\underbrace{(y_1\vee y_2\vee x_1)}_{K_1}\wedge
\underbrace{(\neg x_1\vee y_3\vee x_2)}_{K_2}\wedge
\underbrace{(\neg x_2\vee y_4\vee y_5)}_{K_3}.
\]
Ist $C$ erfüllt, etwa durch $y_3$, dann erfüllt $x_1=\true$, $x_2=\false$
die Kette: $K_1$ durch $x_1$, $K_2$ durch $y_3$, $K_3$ durch $\neg x_2$.


\lsg
\textbf{Konstruktion:} Ersetze jede Klausel $(y_1 \vee \dots \vee y_\ell)$ mit
$\ell > 3$ durch die Kette
\[
(y_1 \vee y_2 \vee x_1) \wedge (\neg x_1 \vee y_3 \vee x_2) \wedge \dots
\wedge (\neg x_{\ell-3} \vee y_{\ell-1} \vee y_\ell)
\]
mit neuen Hilfsvariablen $x_1, \dots, x_{\ell-3}$ (pro Klausel eigene). Kurze
Klauseln bleiben unverändert.
\begin{center}
\begin{tikzpicture}
  \node[draw,rounded corners,inner sep=5pt] (orig) at (0,2.0)
    {$(y_1 \vee y_2 \vee y_3 \vee y_4 \vee y_5)$};
  \draw[->,thick] (0,1.5) -- (0,0.7)
    node[midway,right,font=\footnotesize] {$\ell=5$: neue Variablen $x_1,x_2$};
  \node[draw,rounded corners,inner sep=5pt] (b1) at (-3.7,0)
    {$(y_1 \vee y_2 \vee x_1)$};
  \node at (-1.9,0) {$\wedge$};
  \node[draw,rounded corners,inner sep=5pt] (b2) at (0,0)
    {$(\neg x_1 \vee y_3 \vee x_2)$};
  \node at (1.95,0) {$\wedge$};
  \node[draw,rounded corners,inner sep=5pt] (b3) at (3.85,0)
    {$(\neg x_2 \vee y_4 \vee y_5)$};
  \draw[black!60] (b1.south) to[bend right=40]
    node[below,font=\footnotesize] {$x_1$ geteilt} (b2.south);
  \draw[black!60] (b2.south) to[bend right=40]
    node[below,font=\footnotesize] {$x_2$ geteilt} (b3.south);
  \node[font=\footnotesize] at (0,-1.9)
    {Nachbarklauseln teilen die Hilfsvariable: links positiv ($x_i$), rechts negiert ($\neg x_i$)};
\end{tikzpicture}
\end{center}

\textbf{Beweis hin:}
\begin{itemize}
\item Sei die Originalklausel erfüllt, etwa $y_i$ wahr.
\item Setze $x_1 = \dots = x_{i-2} = \true$ und
$x_{i-1} = \dots = x_{\ell-3} = \false$.
\item Dann sind die Kettenklauseln vor der Klausel mit $y_i$ durch ihr
$x$-Literal erfüllt.
\item Die Klausel mit $y_i$ ist durch $y_i$ erfüllt.
\item Die restlichen Kettenklauseln sind durch ihr $\neg x$-Literal erfüllt.
\item Also ist jede Kettenklausel erfüllt.
\end{itemize}

\textbf{Beweis zurück:}
\begin{itemize}
\item Sei die Kette erfüllt.
\item Angenommen, alle $y_i$ wären falsch.
\item Dann erzwingt die erste Klausel $x_1 = \true$.
\item Damit erzwingt die zweite Klausel $x_2 = \true$, induktiv folgt
$x_{\ell-3} = \true$.
\item Dann ist die letzte Klausel
$(\neg x_{\ell-3} \vee y_{\ell-1} \vee y_\ell)$ falsch -- Widerspruch.
\item Also ist ein $y_i$ wahr und die Originalklausel erfüllt.
\end{itemize}

\textbf{Laufzeit:} Jede Klausel wird nur linear vergrößert
($|\bar\alpha| \le c\,|\alpha|$), die Transformation ist polynomiell.

Da \problem{SAT} NP-vollständig ist, $\problem{SAT} \redp \problem{3-SAT}$
gilt und $\problem{3-SAT} \in \NP$, ist \problem{3-SAT} NP-vollständig.
\hfill$\square$

\newpage
% ==================================================================
\katkopf{SAT $\redp$ $k$-Clique}{Klausur SS24-H, A2, 10 P.}
Beweisen Sie: $\problem{SAT} \le k\text{-}\problem{Clique}$.
\emph{Hinweis: NICHT 3-SAT, sondern allgemeines SAT!}

\bspkopf{SAT $\redp$ $k$-Clique: eine Belegung wird zur Clique}
\textbf{Instanz.} $F_1=(x\vee y),\ F_2=(\neg x\vee z),
\ F_3=(\neg y\vee\neg z)$, $k=m=3$.

\begin{center}
\begin{tikzpicture}
  \node[kndick,font=\small] (x)  at (-0.9,1.6)  {$x$};
  \node[knoten,font=\small] (y)  at (0.9,1.6)   {$y$};
  \node[knoten,font=\small] (nx) at (-2.4,-0.2) {$\neg x$};
  \node[kndick,font=\small] (z)  at (-2.4,-1.6) {$z$};
  \node[kndick,font=\small] (ny) at (2.4,-1.6)  {$\neg y$};
  \node[knoten,font=\small] (nz) at (2.4,-0.2)  {$\neg z$};
  \draw[black!50] (x)--(nz) (y)--(nx) (y)--(z) (y)--(nz) (nx)--(ny) (nx)--(nz);
  \draw[very thick] (x)--(z) (x)--(ny) (z)--(ny);
  \draw[dashed,black!60,rounded corners] (-1.55,1.05) rectangle (1.55,2.15);
  \draw[dashed,black!60,rounded corners] (-3.05,-2.25) rectangle (-1.75,0.45);
  \draw[dashed,black!60,rounded corners] (1.75,-2.25) rectangle (3.05,0.45);
  \node[font=\footnotesize,black!60] at (0,2.4)     {$F_1$};
  \node[font=\footnotesize,black!60] at (-2.4,0.75) {$F_2$};
  \node[font=\footnotesize,black!60] at (2.4,0.75)  {$F_3$};
\end{tikzpicture}
\end{center}
\textbf{Kern.} Je Literalvorkommen ein Knoten. Kanten verbinden Literale
verschiedener Klauseln, die sich nicht widersprechen. Die Belegung
$x=z=\true$, $y=\false$ macht pro Klausel ein Literal wahr -- deren
Knoten bilden die fette $3$-Clique $\{x,z,\neg y\}$.


\lsg
\textbf{Idee:} Ein Knoten pro Literalvorkommen; Kanten nur zwischen
verträglichen Literalen verschiedener Klauseln -- eine $m$-Clique wählt dann
pro Klausel ein wahres Literal.

\textbf{Konstruktion:} Sei $F = F_1 \wedge \dots \wedge F_m$ eine KNF mit
Klauseln $F_i = (y_{i1} \vee \dots \vee y_{i\ell_i})$. Baue $G = (V,E)$:
\begin{align*}
V &= \{\, [i,j] \mid 1 \le i \le m,\ 1 \le j \le \ell_i \,\}
&& \text{(ein Knoten pro Literalvorkommen)}\\
E &= \{\, \{[i,j],[i',j']\} \mid i \ne i',\ y_{ij} \ne \neg y_{i'j'} \,\}
&& \text{(verschiedene Klausel, kein Widerspruch)}
\end{align*}
Setze $k = m$.

\textbf{Beweis hin:}
\begin{itemize}
\item Sei $\psi$ eine erfüllende Belegung von $F$.
\item Dann ist in jeder Klausel mindestens ein Literal wahr. Wähle pro
Klausel eines.
\item $C$ sei die Menge der $m$ zugehörigen Knoten.
\item Angenommen, zwei Knoten aus $C$ wären nicht verbunden.
\item Dann müssten sich ihre Literale widersprechen (die Klauseln sind
verschieden).
\item Das wäre ein Widerspruch, denn beide Literale sind unter $\psi$ wahr.
\item Also ist $C$ eine $m$-Clique in $G$.
\end{itemize}

\textbf{Beweis zurück:}
\begin{itemize}
\item Sei $C$ eine $m$-Clique in $G$.
\item Knoten derselben Klausel sind nie verbunden. Also enthält $C$ aus
jeder Klausel genau einen Knoten.
\item Die zugehörigen Literale widersprechen sich paarweise nicht (sonst
fehlte eine Kante).
\item Setze alle diese Literale wahr -- eine widerspruchsfreie Belegung.
\item Sie erfüllt in jeder Klausel ein Literal.
\item Also ist $F$ erfüllbar.
\end{itemize}

\textbf{Laufzeit:} Graph aufbauen -- je Literalvorkommen ein Knoten, je
Paar aus verschiedenen Klauseln eine Verträglichkeitskante prüfen:
$O(L^2)$ für $L$ Literalvorkommen, polynomiell.

Damit ist die Konstruktion eine polynomielle Reduktion und es gilt
$\problem{SAT} \redp k\text{-}\problem{Clique}$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{$k$-Clique ist NP-vollständig}{Klausur SS23-H, A4, 10 P.}
\textbf{Problem $k$-\problem{Clique}:}\\
\textbf{Eingabe:} Ein ungerichteter Graph $G = (V,E)$ und eine Zahl
$k \ge 1$. Eine Clique ist eine Teilmenge $C \subseteq V$ mit
$\{u,v\} \in E$ für alle $u,v \in C$ mit $u \ne v$.\\
\textbf{Entscheide:} Hat der gegebene Graph $G$ eine Clique $C \subseteq V$
mit mindestens $k$ Knoten (d.\,h.\ mit $|C| \ge k$)?

Beweisen Sie: Das Problem $k$-\problem{Clique} ist NP-vollständig.

\bspkopf{$k$-Clique: Reduktionsgraph und Zertifikat}
\textbf{Instanz.} $F_1=(x\vee y),\ F_2=(\neg x\vee z),
\ F_3=(\neg y\vee\neg z)$, $k=m=3$.
\begin{center}
\begin{tikzpicture}[scale=0.85]
  \node[kndick,font=\small] (x)  at (-0.9,1.6)  {$x$};
  \node[knoten,font=\small] (y)  at (0.9,1.6)   {$y$};
  \node[knoten,font=\small] (nx) at (-2.4,-0.2) {$\neg x$};
  \node[kndick,font=\small] (z)  at (-2.4,-1.6) {$z$};
  \node[kndick,font=\small] (ny) at (2.4,-1.6)  {$\neg y$};
  \node[knoten,font=\small] (nz) at (2.4,-0.2)  {$\neg z$};
  \draw[black!50] (x)--(nz) (y)--(nx) (y)--(z) (y)--(nz) (nx)--(ny) (nx)--(nz);
  \draw[very thick] (x)--(z) (x)--(ny) (z)--(ny);
  \draw[dashed,black!60,rounded corners] (-1.55,1.05) rectangle (1.55,2.15);
  \draw[dashed,black!60,rounded corners] (-3.05,-2.25) rectangle (-1.75,0.45);
  \draw[dashed,black!60,rounded corners] (1.75,-2.25) rectangle (3.05,0.45);
  \node[font=\footnotesize,black!60] at (0,2.4)     {$F_1$};
  \node[font=\footnotesize,black!60] at (-2.4,0.75) {$F_2$};
  \node[font=\footnotesize,black!60] at (2.4,0.75)  {$F_3$};
\end{tikzpicture}
\end{center}
\textbf{Kern.} Je Literalvorkommen ein Knoten. Kanten verbinden Literale
verschiedener Klauseln, die sich nicht widersprechen. Die Belegung
$x=z=\true$, $y=\false$ macht pro Klausel ein Literal wahr -- deren
Knoten $\{x,z,\neg y\}$ sind die fette $3$-Clique und das akzeptierte
Zertifikat.


\lsg
\textbf{$\in$ NP:} Eingabe: Graph $G = (V,E)$, Zahl $k$ und Zertifikat
$C \subseteq V$.

Der Verifizierer arbeitet wie folgt:
\begin{itemize}
\item Prüfe für jedes Paar $\{u,v\} \subseteq C$, ob $\{u,v\} \in E$ gilt;
lehne sonst ab.
\item Falls $|C| < k$, lehne ab.
\item Sonst akzeptiere.
\end{itemize}
Existiert eine $k$-Clique, dann gibt es ein Zertifikat dafür. Dieses wird
akzeptiert. Sonst verletzt jedes Zertifikat eine Prüfung -- abgelehnt.

\textbf{Laufzeit:} Alle Paare testen $O(|V|^2)$, Größe zählen $O(|V|)$ --
polynomiell. Also gilt $k$-\problem{Clique} $\in$ NP.

\textbf{NP-schwer} durch
$\problem{SAT} \redp k\text{-}\problem{Clique}$:

\textbf{Idee:} Ein Knoten pro Literalvorkommen; Kanten nur zwischen
verträglichen Literalen verschiedener Klauseln -- eine $m$-Clique wählt dann
pro Klausel ein wahres Literal.

\textbf{Konstruktion:} Sei $F = F_1 \wedge \dots \wedge F_m$ eine
KNF-Formel. Wir konstruieren daraus eine $k$-\problem{Clique}-Instanz durch:
\begin{itemize}
\item $V = \{[i,j] \mid \text{$j$-tes Literal in Klausel } i\}$
\item $E = \{\{[i,j],[i',j']\} \mid i \ne i',\ y_{ij} \ne \neg y_{i'j'}\}$
\item $k = m$
\end{itemize}

\textbf{Beweis hin:}
\begin{itemize}
\item Sei $\psi$ eine erfüllende Belegung von $F$.
\item Dann ist in jeder Klausel mindestens ein Literal wahr. Wähle pro
Klausel eines.
\item $C$ sei die Menge der $m$ zugehörigen Knoten.
\item Je zwei Knoten aus $C$ stammen aus verschiedenen Klauseln.
\item Ihre Literale widersprechen sich nicht, denn beide sind unter
$\psi$ wahr.
\item Nach Definition von $E$ sind sie also verbunden.
\item Also ist $C$ eine $m$-Clique und $(G, m)$ eine Ja-Instanz.
\end{itemize}

\textbf{Beweis zurück:}
\begin{itemize}
\item Sei $C$ eine $m$-Clique in $G$.
\item Knoten derselben Klausel sind nie verbunden. Also enthält $C$ aus
jeder der $m$ Klauseln genau einen Knoten.
\item Die zugehörigen Literale widersprechen sich paarweise nicht (sonst
fehlte eine Kante).
\item Setze alle diese Literale wahr -- eine widerspruchsfreie Belegung.
\item Sie erfüllt in jeder Klausel ein Literal.
\item Also ist $F$ erfüllbar.
\end{itemize}

\textbf{Laufzeit:} Graph aufbauen -- je Literalvorkommen ein Knoten, je
Paar aus verschiedenen Klauseln eine Verträglichkeitskante prüfen:
$O(L^2)$ für $L$ Literalvorkommen, polynomiell.

Da \problem{SAT} NP-vollständig ist, $\problem{SAT} \redp
k\text{-}\problem{Clique}$ gilt und $k\text{-}\problem{Clique} \in \NP$, ist
$k$-\problem{Clique} NP-vollständig. \hfill$\square$

\newpage
% ==================================================================
\katkopf{SubsetSum $\redp$ Knapsack}{Vorlesung (Skript)}
\textbf{Problem \problem{Knapsack}:} Gegeben $n$ Gegenstände mit Gewichten
$w_i$ und Profiten $p_i$, Kapazität $B$, Zielprofit $P$. Gibt es
$S \subseteq [n]$ mit $\sum_{i\in S} w_i \le B$ und $\sum_{i\in S} p_i \ge P$?

\textbf{Problem \problem{SubsetSum}:} Gegeben Zahlen $c_1, \dots, c_n$ und
$K$. Gibt es $S$ mit $\sum_{i\in S} c_i = K$?

Zeigen Sie, dass \problem{Knapsack} NP-vollständig ist.
\emph{Hinweis:} Reduzieren Sie \problem{SubsetSum} auf \problem{Knapsack}.

\bspkopf{SubsetSum $\redp$ Knapsack: Zahlen einsetzen}
\textbf{Instanz.} $c = (2,3,5)$, $K = 5$ mit Lösung $\{1,2\}$:
$2+3 = 5$.

\textbf{Kern.} Die Reduktion setzt $w_i = p_i = c_i$ und $B = P = K$ -- die
beiden Knapsack-Schranken zwingen die gemeinsame Summe auf exakt $K$.
Bildinstanz: Gewichte $=$ Profite $= (2,3,5)$, $B = P = 5$; die Auswahl
$\{1,2\}$ hat Gewicht $5 \le B$ und Profit $5 \ge P$ -- die Ja-Instanz
bleibt Ja.


\lsg
\textbf{$\in$ NP:} Eingabe: Gewichte $w_i$, Profite $p_i$, Schranken
$B, P$ und Zertifikat $S \subseteq [n]$.

Der Verifizierer arbeitet wie folgt:
\begin{itemize}
\item Prüfe $\sum_{i\in S} w_i \le B$; lehne sonst ab.
\item Prüfe $\sum_{i\in S} p_i \ge P$; lehne sonst ab.
\item Sonst akzeptiere.
\end{itemize}
Existiert eine gültige Auswahl, dann ist sie ein Zertifikat, das akzeptiert
wird. Sonst wird jedes Zertifikat abgelehnt. Zwei Summen bilden und
vergleichen -- $O(n)$, polynomiell. Also gilt $\problem{Knapsack} \in \NP$.

\textbf{Konstruktion:} Sei $(c_1, \dots, c_n, K)$ eine
\problem{SubsetSum}-Instanz. Setze $w_i := c_i$, $p_i := c_i$ für alle $i$
sowie $B := K$ und $P := K$.

\textbf{Beweis hin:}
\begin{itemize}
\item Sei $S$ eine Menge mit $\sum_{i\in S} c_i = K$.
\item Dann ist das Gewicht von $S$ gleich $K \le B$.
\item Ebenso ist der Profit von $S$ gleich $K \ge P$.
\item Also ist $S$ eine Knapsack-Lösung.
\end{itemize}

\textbf{Beweis zurück:}
\begin{itemize}
\item Sei $S$ eine Knapsack-Lösung.
\item Gewicht und Profit von $S$ sind dieselbe Zahl $\sum_{i\in S} c_i$.
\item Da $S$ die Kapazität einhält, gilt $\sum_{i\in S} c_i \le B = K$.
\item Da $S$ den Zielprofit erreicht, gilt $\sum_{i\in S} c_i \ge P = K$.
\item Somit ist $\sum_{i\in S} c_i = K$ -- eine SubsetSum-Lösung.
\end{itemize}

\textbf{Laufzeit:} Werte kopieren, $O(n)$, polynomiell.

Da \problem{SubsetSum} NP-vollständig ist und $\problem{Knapsack} \in \NP$,
ist \problem{Knapsack} NP-vollständig. \hfill$\square$

\newpage
% ==================================================================
\katkopf{SubsetSum $\redp$ Partition}{Vorlesung (Skript)}
\textbf{Problem \problem{Partition}:} Gegeben Zahlen $c_1, \dots, c_n$. Gibt
es $S$ mit $\sum_{j\in S} c_j = \frac12 \sum_{j=1}^{n} c_j$?

\textbf{Problem \problem{SubsetSum}:} Gegeben Zahlen $c_1, \dots, c_n$ und
$K$. Gibt es $S$ mit $\sum_{j\in S} c_j = K$?

Zeigen Sie, dass \problem{Partition} NP-vollständig ist.
\emph{Hinweis:} Reduzieren Sie \problem{SubsetSum} auf \problem{Partition}.

\bspkopf{SubsetSum $\redp$ Partition: Zahlen einsetzen}
\textbf{Instanz.} $c = (3,5,8,4)$, $K = 12$ mit Lösung $\{3,5,4\}$:
$3+5+4 = 12$.

\textbf{Kern.} Die Reduktion hängt mit $N = \sum c_j + 1 = 21$ die
Zusatzzahlen $a = N-K = 9$ und $b = K+1 = 13$ an; wegen $a+b = N+1 > N$
trennen sich $a$ und $b$ in jeder Lösung. Neue Zahlen $(3,5,8,4,9,13)$ mit
Hälfte $N = 21$: Die Seite $\{3,5,4\} \cup \{a\}$ summiert $3+5+4+9 = 21$
-- die Ja-Instanz bleibt Ja.


\lsg
\textbf{$\in$ NP:} Eingabe: Zahlen $c_1, \dots, c_n$ und Zertifikat
$S \subseteq [n]$.

Der Verifizierer arbeitet wie folgt:
\begin{itemize}
\item Berechne die Gesamtsumme $\Sigma = \sum_{j=1}^{n} c_j$.
\item Prüfe $\sum_{j\in S} c_j = \Sigma/2$; lehne sonst ab.
\item Sonst akzeptiere.
\end{itemize}
Existiert eine Partitionslösung, dann ist eine ihrer Seiten ein Zertifikat,
das akzeptiert wird. Sonst wird jedes Zertifikat abgelehnt. Zwei Summen
bilden und vergleichen -- $O(n)$, polynomiell. Also gilt
$\problem{Partition} \in \NP$.

\textbf{Konstruktion:} Sei $(c_1, \dots, c_n, K)$ eine
\problem{SubsetSum}-Instanz. Setze $N := \sum_{j=1}^{n} c_j + 1$ und hänge
zwei Zahlen als Items $n{+}1$ und $n{+}2$ an:
\[
c_{n+1} := N - K, \qquad c_{n+2} := K + 1.
\]
Die neue Gesamtsumme ist $(N-1) + (N-K) + (K+1) = 2N$, die Hälfte also $N$.

\textbf{Schlüsselbeobachtung:} $c_{n+1} + c_{n+2} = N + 1 > N$ -- in jeder
Partitionslösung liegen die beiden Zusatzzahlen auf \emph{verschiedenen}
Seiten.

\textbf{Beweis hin:}
\begin{itemize}
\item Sei $S \subseteq [n]$ eine Menge mit $\sum_{j\in S} c_j = K$.
\item Setze $S' = S \cup \{n{+}1\}$.
\item Dann gilt $\sum_{j\in S'} c_j = K + (N-K) = N$.
\item Also ist $S'$ eine Seite mit halber Gesamtsumme -- eine
Partitionslösung.
\end{itemize}

\textbf{Beweis zurück:}
\begin{itemize}
\item Sei $S' \subseteq [n{+}2]$ eine Seite mit $\sum_{j \in S'} c_j = N$.
\item Nach der Schlüsselbeobachtung liegen $n{+}1$ und $n{+}2$ auf
verschiedenen Seiten.
\item O.B.d.A.\ gilt $n{+}1 \in S'$ und $n{+}2 \notin S'$.
\item Setze $S = S' \setminus \{n{+}1\}$, also $S \subseteq [n]$.
\item Dann gilt $\sum_{j \in S} c_j = N - (N-K) = K$ -- also ist $S$ eine
SubsetSum-Lösung.
\end{itemize}

\textbf{Laufzeit:} Gesamtsumme berechnen und zwei Zahlen anhängen, $O(n)$,
polynomiell.

Da \problem{SubsetSum} NP-vollständig ist und $\problem{Partition} \in \NP$,
ist \problem{Partition} NP-vollständig. \hfill$\square$

\newpage
% ==================================================================
\katkopf{ListScheduling hat Güte $2 - \frac{1}{m}$}{Klausur SS23-N, A4, 10 P.}
$P\,\|\,C_{\max}$: $n$ Jobs mit Zeiten $p_1, \dots, p_n$, $m$ Maschinen;
minimiere $\Cmax$. ListScheduling legt jeden Job der Reihe nach auf die
Maschine mit minimaler Last. Zeigen Sie: Für alle $I$ gilt
$\mathrm{LS}(I)/\mathrm{OPT}(I) \le 2 - 1/m$.

\bspkopf{ListScheduling-Güte $2-\frac1m$ scharf: $m=2$, Jobs $(1,1,2)$}
\textbf{Instanz.} $m=2$ Maschinen, Jobs $(1,1,2)$. ListScheduling legt
jeden Job auf die Maschine kleinster Last: $J_1\!\to\!M_1$,
$J_2\!\to\!M_2$, $J_3\!\to\!M_1$ $\Rightarrow \mathrm{LS}=3$.
\begin{center}
\begin{tikzpicture}[x=1.1cm,y=0.7cm]
  \node[font=\small] at (-1.5,1) {\textbf{LS}};
  \node[left,font=\small] at (-0.15,1.5) {$M_1$};
  \draw[fill=black!10] (0,1.25) rectangle (1,1.75); \node at (0.5,1.5) {\small$J_1$};
  \draw[fill=black!25] (1,1.25) rectangle (3,1.75); \node at (2,1.5) {\small$J_3$};
  \node[left,font=\small] at (-0.15,0.5) {$M_2$};
  \draw[fill=black!10] (0,0.25) rectangle (1,0.75); \node at (0.5,0.5) {\small$J_2$};
  \draw[->] (0,-0.15) -- (3.7,-0.15) node[below,font=\small]{$t$};
  \foreach \t in {0,1,2,3} {\draw (\t,-0.22)--(\t,-0.08); \node[below,font=\scriptsize] at (\t,-0.18){\t};}
  \draw[dashed] (3,-0.15)--(3,2.05); \node[above,font=\footnotesize] at (3,2.0){$\mathrm{LS}=3$};
\end{tikzpicture}
\end{center}
\textbf{Kern.} Das Optimum legt $J_1, J_2$ auf eine Maschine und $J_3$
auf die andere: $\OPT=2$. Also $\mathrm{LS}/\OPT=\tfrac32=2-\tfrac1m$ --
die Schranke ist \emph{scharf}:
\begin{center}
\begin{tikzpicture}[x=1.1cm,y=0.7cm]
  \node[font=\small] at (-1.5,1) {\textbf{OPT}};
  \node[left,font=\small] at (-0.15,1.5) {$M_1$};
  \draw[fill=black!10] (0,1.25) rectangle (1,1.75); \node at (0.5,1.5) {\small$J_1$};
  \draw[fill=black!10] (1,1.25) rectangle (2,1.75); \node at (1.5,1.5) {\small$J_2$};
  \node[left,font=\small] at (-0.15,0.5) {$M_2$};
  \draw[fill=black!25] (0,0.25) rectangle (2,0.75); \node at (1,0.5) {\small$J_3$};
  \draw[->] (0,-0.15) -- (3.7,-0.15) node[below,font=\small]{$t$};
  \foreach \t in {0,1,2,3} {\draw (\t,-0.22)--(\t,-0.08); \node[below,font=\scriptsize] at (\t,-0.18){\t};}
  \draw[dashed] (2,-0.15)--(2,2.05); \node[above,font=\footnotesize] at (2,2.0){$\OPT=2$};
\end{tikzpicture}
\end{center}


\lsg
O.B.d.A.\ habe Maschine $M_1$ am Ende die höchste Last
$L = \mathrm{LS}(I)$. Sei $J_k$ der letzte Job, der $M_1$ zugeordnet wurde.

\textbf{Kernbeobachtung:} Bei der Zuordnung von $J_k$ hatte $M_1$ die
\emph{kleinste} Last $L - p_k$ -- also hatten alle $m$ Maschinen mindestens
Last $L - p_k$. Daraus folgt
\[
\sum_{i=1}^{n} p_i \;\ge\; m\,(L - p_k) + p_k.
\]
\begin{center}
\begin{tikzpicture}[x=1.1cm,y=1cm]
  \node[left] at (-0.15,2.975) {\small $M_1$};
  \draw[fill=black!10] (0,2.7) rectangle (7,3.25);
  \draw[fill=black!25] (7,2.7) rectangle (10,3.25);
  \node at (8.5,2.975) {\small $J_k$};
  \node[left] at (-0.15,2.275) {\small $M_2$};
  \draw[fill=black!10] (0,2.0) rectangle (8.2,2.55);
  \node[left] at (-0.15,1.575) {\small $M_3$};
  \draw[fill=black!10] (0,1.3) rectangle (7.6,1.85);
  \node at (-0.45,0.95) {\small $\vdots$};
  \node[left] at (-0.15,0.275) {\small $M_m$};
  \draw[fill=black!10] (0,0.0) rectangle (7.3,0.55);
  \draw[thin] (7,3.45) -- (7,3.6) -- node[above] {\small $p_k$} (10,3.6) -- (10,3.45);
  \draw[dashed,thin] (7,-0.35) -- (7,3.25);
  \draw[dashed,thin] (10,-0.35) -- (10,3.25);
  \draw[->,thin] (0,-0.35) -- (10.9,-0.35) node[below] {\small $t$};
  \draw[thin] (0,-0.42) -- (0,-0.28);
  \node[below] at (0,-0.45) {\small $0$};
  \node[below] at (7,-0.45) {\small $s = L - p_k$};
  \node[below] at (10,-0.45) {\small $L = \mathrm{LS}(I)$};
  \node at (5,-1.35) {\small $s \;\ge\; \tfrac1m\bigl(\textstyle\sum_i p_i - p_k\bigr)$,
    denn alle Maschinen sind bis mindestens $s$ gef\"ullt};
\end{tikzpicture}
\end{center}

\textbf{Zwei Schranken für das Optimum:}
$\mathrm{OPT}(I) \ge \frac{1}{m}\sum_i p_i$ (Gesamtlast auf $m$ Maschinen) und
$\mathrm{OPT}(I) \ge p_k$ (jeder Job muss irgendwo laufen).

\textbf{Kombination:}
\[
\mathrm{OPT}(I) \;\ge\; \frac{1}{m}\sum_i p_i
\;\ge\; \frac{m(L - p_k) + p_k}{m}
\;=\; L - \Bigl(1 - \frac1m\Bigr) p_k .
\]
Mit $p_k \le \mathrm{OPT}(I)$:
$\mathrm{OPT}(I) \ge \mathrm{LS}(I) - (1 - \frac1m)\,\mathrm{OPT}(I)$, also
$\mathrm{LS}(I) \le \bigl(2 - \frac1m\bigr)\,\mathrm{OPT}(I)$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{ModifiedGreedy hat Güte 2}{Vorlesung (Skript)}
\problem{Knapsack}: Gegenstände mit Gewichten $w_i$, Profiten $p_i$,
Kapazität $B$; maximiere den Profit. Greedy sortiert absteigend nach
Profitdichte $p_i/w_i$ und packt in dieser Reihenfolge jeden Gegenstand ein,
der noch passt. ModifiedGreedy (MGA) gibt das Bessere aus Greedy-Lösung und
profitreichstem Einzel-Gegenstand aus.

Zeigen Sie: $\mathrm{OPT}(I) \le 2 \cdot \mathrm{MGA}(I)$ für alle Eingaben
$I$.

\bspkopf{MGA-Güte 2: an einer konkreten Instanz}
\textbf{Instanz.} Kapazität $B = 16$, Items als $(p_i, w_i)$, nach Dichte
sortiert: $(1,1), (3,3), (11,13), (5,6), (1,3), (1,4), (1,5)$.

\textbf{Kern.} Greedy geht die Liste nach Dichte durch und packt jeweils,
was noch passt: erst $(1,1)$ und $(3,3)$, dann ist $(11,13)$ zu schwer und
wird übersprungen, danach noch $(5,6)$ und $(1,3)$. Greedy-Wert
$\mathrm{GA} = 10$. Das übersprungene $(11,13)$ ist zugleich der beste
Einzel-Gegenstand, Profit $p_{\max} = 11$; genau diesen Rückstand fängt
$\mathrm{MGA} = \max\{\mathrm{GA}, p_{\max}\} = 11$ ab. Das Optimum
$\{(11,13), (3,3)\}$ liefert $\mathrm{OPT} = 14$, und es gilt
\[
\mathrm{OPT} = 14 \;\le\; \mathrm{GA} + p_{\max} = 21 \;\le\;
2\,\mathrm{MGA} = 22.
\]


\lsg
\textbf{Idee:} Greedy geht die Items nach Dichte durch und packt jedes,
das noch passt; passt eines nicht, überspringt es und macht weiter. Sein
Rückstand zum Optimum ist höchstens der Profit \emph{eines} Items -- des
ersten übersprungenen. Genau dieses fängt der beste Einzel-Gegenstand ab.

Nummeriere nach Dichte: $p_1/w_1 \ge \dots \ge p_n/w_n$. Sei $k+1$ der erste
Gegenstand, den Greedy nicht einpacken kann.

\textbf{Schritt 1 (Relaxierung):} Erlaubt man, Gegenstände anteilig
einzupacken (fraktionales Knapsack mit Optimum $\mathrm{OPT}_f$), wird der
Lösungsraum größer -- bei einem Maximierungsproblem gilt
$\mathrm{OPT}(I) \le \mathrm{OPT}_f(I)$.

\textbf{Schritt 2 (fraktionales Optimum):} Die beste fraktionale Lösung
füllt den Rucksack in Dichte-Reihenfolge: die Gegenstände $1, \dots, k$
vollständig, vom Gegenstand $k+1$ einen Bruchteil. (Jede andere Lösung ließe
sich verbessern, indem man Anteile geringerer Dichte durch Anteile höherer
Dichte ersetzt.) Der Bruchteil ist höchstens $1$, also
$\mathrm{OPT}_f(I) \le p_1 + \dots + p_k + p_{k+1}$. Und Greedy packt die
Gegenstände $1, \dots, k$ ebenfalls ein, somit
$p_1 + \dots + p_k \le \mathrm{GA}(I)$. Zusammen:
\[
\mathrm{OPT}_f(I) \;\le\; p_1 + \dots + p_k + p_{k+1}
\;\le\; \mathrm{GA}(I) + p_{k+1}.
\]

\textbf{Schritt 3 (Kombination):} Mit $p_{k+1} \le p_{\max}$ und
$\mathrm{MGA}(I) = \max\{\mathrm{GA}(I),\, p_{\max}\}$ folgt
\[
\mathrm{OPT}(I) \;\le\; \mathrm{GA}(I) + p_{\max}
\;\le\; 2\,\max\{\mathrm{GA}(I),\, p_{\max}\}
\;=\; 2 \cdot \mathrm{MGA}(I). \qquad\square
\]

\newpage
% ##################################################################
\section{Reduktionen: NP-Schwere und NP-Vollständigkeit}
% ##################################################################

% ==================================================================
\katkopf{VertexCover ist NP-vollständig}{Präsenz 10.2}
Zeigen Sie, dass \problem{VertexCover} NP-vollständig ist.
\emph{Hinweis:} Reduzieren Sie \problem{Clique} auf \problem{VertexCover}.

\bspkopf{VertexCover NP-vollständig}
\textbf{Instanz.} \problem{Clique} am folgenden Graphen $G$ mit $n=4$
Knoten.
\begin{center}
\begin{tikzpicture}
  \begin{scope}
    \node[kndick] (a1) at (0,1.4)    {1};
    \node[kndick] (a2) at (-1.2,0)   {2};
    \node[kndick] (a3) at (1.2,0)    {3};
    \node[knoten] (a4) at (0,-1.4)   {4};
    \draw[thick] (a1)--(a2) (a1)--(a3) (a2)--(a3);
    \draw (a1)--(a4);
    \node[font=\footnotesize] at (0,-2.2) {$G$: Clique $\{1,2,3\}$, $k=3$};
  \end{scope}
  \draw[->,thick] (2.1,0) -- (3.7,0)
    node[midway,above,font=\footnotesize] {komplement.};
  \begin{scope}[xshift=5.8cm]
    \node[knoten] (b1) at (0,1.4)    {1};
    \node[knoten] (b2) at (-1.2,0)   {2};
    \node[knoten] (b3) at (1.2,0)    {3};
    \node[kndick] (b4) at (0,-1.4)   {4};
    \draw (b2)--(b4) (b3)--(b4);
    \node[font=\footnotesize] at (0,-2.2) {$G'$: VC $\{4\}$, $k'=1$};
  \end{scope}
\end{tikzpicture}
\end{center}

\textbf{Kern.} Komplementieren liefert $G'$ mit genau den Nicht-Kanten
von $G$ und $k' = n-k = 1$. Die Clique $\{1,2,3\}$ wird zum Vertex Cover
$V\setminus C=\{4\}$: Knoten $4$ deckt beide Kanten von $G'$.


\lsg
\textbf{$\in$ NP:} Eingabe: Graph $G = (V,E)$, Zahl $k$ und Zertifikat
$C \subseteq V$. Der Verifizierer arbeitet wie folgt:
\begin{itemize}
  \item Falls $|C| > k$, lehne ab.
  \item Prüfe für jede Kante $\{u,v\} \in E$, ob $u \in C$ oder $v \in C$ gilt.
  \item Lehne ab, falls das für eine Kante fehlschlägt.
  \item Sonst akzeptiere.
\end{itemize}
Existiert ein Vertex Cover $C$ mit $|C| \le k$, dann gibt es ein Zertifikat
dafür. Dieses wird vom Verifizierer akzeptiert und sonst abgelehnt.
Größen- und Kantenprüfung laufen in $O(|V| + |E|)$, somit polynomiell.
Also gilt $\problem{VertexCover} \in \NP$.

\textbf{NP-schwer:} Zeige, dass \problem{VertexCover} NP-schwer ist durch die
Reduktion $\problem{Clique} \redp \problem{VertexCover}$. \problem{Clique}
ist bereits als NP-vollständig bekannt.

\textbf{Konstruktion:} Sei $(G = (V,E), k)$ eine \problem{Clique}-Instanz mit
$n = |V|$ (o.B.d.A.\ $k \le n$). Wir konstruieren daraus eine
\problem{VertexCover}-Instanz $(G' = (V, E'),\, k')$ durch:
\begin{itemize}
  \item $E' = \binom{V}{2} \setminus E$, also genau die Nicht-Kanten von $G$
  \item $k' = n - k$
\end{itemize}
So wird $G$ zum Komplementgraphen $G'$ invertiert.
\begin{center}
\begin{tikzpicture}
  \begin{scope}
    \node[kndick] (a1) at (90:1.3)  {1};
    \node[kndick] (a2) at (162:1.3) {2};
    \node[kndick] (a3) at (18:1.3)  {3};
    \node[knoten] (a4) at (234:1.3) {4};
    \node[knoten] (a5) at (306:1.3) {5};
    \draw[thick] (a1)--(a2) (a1)--(a3) (a2)--(a3);
    \draw (a1)--(a4) (a3)--(a5);
    \node[font=\footnotesize] at (0,-2.1) {Clique $C=\{1,2,3\}$ in $G$};
  \end{scope}
  \draw[->,thick] (2.2,0) -- (3.8,0)
    node[midway,above,font=\footnotesize] {komplementieren};
  \begin{scope}[xshift=6.4cm]
    \node[knoten] (b1) at (90:1.3)  {1};
    \node[knoten] (b2) at (162:1.3) {2};
    \node[knoten] (b3) at (18:1.3)  {3};
    \node[kndick] (b4) at (234:1.3) {4};
    \node[kndick] (b5) at (306:1.3) {5};
    \draw (b1)--(b5) (b2)--(b4) (b2)--(b5) (b3)--(b4) (b4)--(b5);
    \node[font=\footnotesize] at (0,-2.1)
      {VC $V\setminus C=\{4,5\}$ in $G'$, $\ n-k = 5-3 = 2$};
  \end{scope}
\end{tikzpicture}
\end{center}

\textbf{Beweis Clique nach VertexCover:}
\begin{itemize}
  \item Sei $C$ eine Clique in $G$ mit $|C| \ge k$.
  \item Setze $W = V \setminus C$, dann gilt $|W| \le n - k = k'$.
  \item In $G$ sind alle Kanten innerhalb von $C$ vorhanden.
  \item Somit hat $G'$ keine Kante mit beiden Endpunkten in $C$.
  \item Also hat jede Kante von $G'$ einen Endpunkt in $W$.
  \item Damit ist $W$ ein Vertex Cover von $G'$ mit $|W| \le k'$.
\end{itemize}

\textbf{Beweis VertexCover nach Clique:}
\begin{itemize}
  \item Sei $W$ ein Vertex Cover von $G'$ mit $|W| \le k'$.
  \item Setze $C = V \setminus W$, dann gilt $|C| \ge n - k' = k$.
  \item Sei $\{u,v\} \subseteq C$ ein beliebiges Knotenpaar.
  \item Da $u, v \notin W$ und $W$ jede Kante von $G'$ deckt, gilt
        $\{u,v\} \notin E'$.
  \item Somit gilt $\{u,v\} \in E$, denn $E'$ enthält genau die Nicht-Kanten
        von $G$.
  \item Also ist $C$ eine Clique in $G$ mit $|C| \ge k$.
\end{itemize}

\textbf{Laufzeit:} Alle Knotenpaare durchgehen und die Kanten invertieren --
$O(|V|^2)$, also bleibt die Transformation polynomiell.

Da $\problem{VertexCover} \in \NP$ und NP-schwer ist, folgt:
\problem{VertexCover} ist NP-vollständig. \hfill$\square$

\newpage
% ==================================================================
\katkopf{$k$-CliqueUniversal ist NP-vollständig}{Hausaufgabe 10.2 (2026), 5 P.}
\textbf{Problem $k$-\problem{CliqueUniversal}:} Gegeben ein Graph $G = (V,E)$
und $k \ge 1$, wobei ein $u \in V$ existiert, das mit allen anderen Knoten
verbunden ist. \textbf{Entscheide:} Existiert eine Clique $C$ mit $|C| \ge k$?

Zeigen Sie, dass $k$-\problem{CliqueUniversal} NP-vollständig ist.

\bspkopf{$k$-CliqueUniversal NP-vollständig}
\textbf{Instanz.} \problem{Clique} am folgenden Pfad $G$ mit $k=2$.
\begin{center}
\begin{tikzpicture}
  \begin{scope}
    \node[kndick] (a1) at (0,0)   {1};
    \node[kndick] (a2) at (1.5,0) {2};
    \node[knoten] (a3) at (3,0)   {3};
    \draw[thick] (a1)--(a2); \draw (a2)--(a3);
    \node[font=\footnotesize] at (1.5,-1.2) {$G$: Clique $\{1,2\}$, $k=2$};
  \end{scope}
  \draw[->,thick] (3.9,0) -- (5.3,0)
    node[midway,above,font=\footnotesize] {$+\,u$};
  \begin{scope}[xshift=6.2cm]
    \node[kndick] (b1) at (0,0)   {1};
    \node[kndick] (b2) at (1.5,0) {2};
    \node[knoten] (b3) at (3,0)   {3};
    \node[kndick] (bu) at (0.75,1.5) {$u$};
    \draw[thick] (b1)--(b2) (b1)--(bu) (b2)--(bu);
    \draw (b2)--(b3) (b3)--(bu);
    \node[font=\footnotesize] at (1.5,-1.2)
      {$\bar G$: $\{1,2,u\}$ ist $3$-Clique, $\bar k=3$};
  \end{scope}
\end{tikzpicture}
\end{center}

\textbf{Kern.} Ein neuer Knoten $u$ wird mit allen Knoten verbunden,
$\bar k = k+1 = 3$. Damit ist $u$ universell, und die Clique $\{1,2\}$
wächst zur Clique $\{1,2,u\}$ der Größe $3 \ge \bar k$ in $\bar G$.


\lsg
\textbf{$\in$ NP:} Eingabe: Graph $G = (V,E)$, Zahl $k$ und Zertifikat
$C \subseteq V$. Der Verifizierer arbeitet wie folgt:
\begin{itemize}
  \item Falls $|C| < k$, lehne ab.
  \item Prüfe für jedes Paar $\{x,y\} \subseteq C$, ob $\{x,y\} \in E$ gilt.
  \item Lehne ab, falls für ein Paar $\{x,y\} \notin E$ gilt.
  \item Sonst akzeptiere.
\end{itemize}
Existiert eine Clique $C$ mit $|C| \ge k$, dann gibt es ein Zertifikat dafür.
Dieses wird vom Verifizierer akzeptiert und sonst abgelehnt.
Größenprüfung und Prüfung aller Paare laufen in $O(|V|^2)$, somit polynomiell.
Also gilt $k\text{-}\problem{CliqueUniversal} \in \NP$.

\textbf{NP-schwer:} Zeige, dass $k$-\problem{CliqueUniversal} NP-schwer ist
durch die Reduktion
$\problem{Clique} \redp k\text{-}\problem{CliqueUniversal}$.
\problem{Clique} ist bereits als NP-vollständig bekannt.

\textbf{Konstruktion:} Sei $(G = (V,E), k)$ eine \problem{Clique}-Instanz.
Wir konstruieren daraus eine $k$-\problem{CliqueUniversal}-Instanz
$(\bar G = (\bar V, \bar E),\, \bar k)$ durch:
\begin{itemize}
  \item $\bar V = V \cup \{u\}$ mit einem neuen Knoten $u$
  \item $\bar E = E \cup \{\{u,v\} \mid v \in V\}$
  \item $\bar k = k + 1$
\end{itemize}
Der neue Knoten $u$ ist mit allen anderen verbunden, also ist
$(\bar G, \bar k)$ eine gültige Instanz.

\textbf{Beweis Clique nach $k$-CliqueUniversal:}
\begin{itemize}
  \item Sei $C$ eine Clique von $G$ mit $|C| \ge k$.
  \item Da $u$ mit allen Knoten verbunden ist, ist $u$ auch mit allen Knoten
        aus $C$ verbunden.
  \item Damit ist $C \cup \{u\}$ eine Clique in $\bar G$.
  \item Dann gilt auch $|C \cup \{u\}| \ge k + 1 = \bar k$.
\end{itemize}

\textbf{Beweis $k$-CliqueUniversal nach Clique:}
\begin{itemize}
  \item Sei $\bar C$ eine Clique von $\bar G$ mit $|\bar C| \ge \bar k$.
  \item Setze $C = \bar C \setminus \{u\}$, dann gilt $|C| \ge \bar k - 1 = k$.
  \item Alle Knoten in $C$ liegen in $V$ und alle Kanten zwischen ihnen liegen
        in $E$, da nur Kanten zu $u$ neu hinzugefügt wurden.
  \item Damit ist $C$ eine Clique in $G$ mit $|C| \ge k$.
\end{itemize}

\textbf{Laufzeit:} Ein Knoten und $|V|$ Kanten werden hinzugefügt --
$O(|V|)$, also bleibt die Transformation polynomiell.

Da $k\text{-}\problem{CliqueUniversal} \in \NP$ und NP-schwer ist, folgt:
$k$-\problem{CliqueUniversal} ist NP-vollständig. \hfill$\square$

\newpage
% ==================================================================
\katkopf{Clique-Nomember ist NP-vollständig}{Präsenz 11.2}
\textbf{Problem \problem{Clique-Nomember}:} Gegeben $G = (V,E)$, ein Knoten
$v \in V$ und $k$. Gibt es eine $k$-Clique, die $v$ \emph{nicht} enthält?

Zeigen Sie NP-Vollständigkeit durch Reduktion von \problem{Clique};
$\problem{Clique-Nomember} \in \NP$ dürfen Sie annehmen.

\bspkopf{Clique-Nomember NP-vollständig}
\textbf{Instanz.} \problem{Clique} am folgenden Dreieck $G$ mit $k=3$.
\begin{center}
\begin{tikzpicture}
  \begin{scope}
    \node[kndick] (a1) at (90:1)  {1};
    \node[kndick] (a2) at (210:1) {2};
    \node[kndick] (a3) at (330:1) {3};
    \draw[thick] (a1)--(a2) (a2)--(a3) (a3)--(a1);
    \node[font=\footnotesize] at (0,-1.7) {$G$: $3$-Clique, $k=3$};
  \end{scope}
  \draw[->,thick] (2.0,0) -- (3.4,0)
    node[midway,above,font=\footnotesize] {$+\,v$};
  \begin{scope}[xshift=5.2cm]
    \node[kndick] (b1) at (90:1)  {1};
    \node[kndick] (b2) at (210:1) {2};
    \node[kndick] (b3) at (330:1) {3};
    \draw[thick] (b1)--(b2) (b2)--(b3) (b3)--(b1);
    \node[knoten] (bv) at (2.4,0) {$v$};
    \node[font=\footnotesize] at (0.9,-1.7)
      {$G'$: Clique $\{1,2,3\}\not\ni v$};
  \end{scope}
\end{tikzpicture}
\end{center}

\textbf{Kern.} Ein neuer isolierter Knoten $v$ kommt hinzu; Ausgabe
$(G', v, k)$. Die $3$-Clique $\{1,2,3\}$ liegt ganz in $G$ und enthält
$v$ nicht -- sie ist eine $k$-Clique in $G'$ ohne $v$.


\lsg
\textbf{NP-schwer:} Zeige, dass \problem{Clique-Nomember} NP-schwer ist durch
die Reduktion $\problem{Clique} \redp \problem{Clique-Nomember}$.
\problem{Clique} ist bereits als NP-vollständig bekannt.

\textbf{Konstruktion:} Sei $(G = (V,E), k)$ eine \problem{Clique}-Instanz.
Wir konstruieren daraus eine \problem{Clique-Nomember}-Instanz
$(G', v, k)$ durch:
\begin{itemize}
  \item $G' = (V \cup \{v\},\, E)$ mit einem neuen, isolierten Knoten
        $v \notin V$
  \item $k$ bleibt unverändert
\end{itemize}

\textbf{Beweis Clique nach Clique-Nomember:}
\begin{itemize}
  \item Sei $C$ eine $k$-Clique in $G$.
  \item Da keine Kanten entfernt wurden, ist $C$ auch eine $k$-Clique in $G'$.
  \item Da $v \notin V$, gilt $v \notin C$.
  \item Also ist $C$ eine $k$-Clique in $G'$, die $v$ nicht enthält.
\end{itemize}

\textbf{Beweis Clique-Nomember nach Clique:}
\begin{itemize}
  \item Sei $C$ eine $k$-Clique in $G'$ mit $v \notin C$.
  \item Dann gilt $C \subseteq V$, denn $v$ ist der einzige neue Knoten.
  \item Alle Kanten zwischen Knoten aus $C$ liegen in $E$, denn es wurden
        keine Kanten hinzugefügt.
  \item Also ist $C$ eine $k$-Clique in $G$.
\end{itemize}

\textbf{Laufzeit:} Graph kopieren und einen isolierten Knoten anhängen --
$O(|V| + |E|)$, also bleibt die Transformation polynomiell.

Da $\problem{Clique-Nomember} \in \NP$ (nach Annahme) und NP-schwer ist,
folgt: \problem{Clique-Nomember} ist NP-vollständig. \hfill$\square$

\newpage
% ==================================================================
\katkopf{CliqueAndIndependentSet ist NP-schwer}{Klausur SS24-H, A3a, 5 P.}
\textbf{Problem \problem{CliqueAndIndependentSet}:} Gegeben $G = (V,E)$ und
$k \ge 1$. Gibt es in $G$ sowohl ein Independent Set (eine Menge von Knoten,
die paarweise nicht adjazent sind, d.\,h.\ zwischen denen es keine Kanten
gibt) der Größe $k$ als auch eine Clique der Größe $k$? Zeigen Sie die
NP-Schwere durch Reduktion eines bekannten NP-schweren Problems.

\bspkopf{CliqueAndIndependentSet NP-schwer}
\textbf{Instanz.} \problem{Clique} am Dreieck $\{1,2,3\}$ mit $k=3$.
\begin{center}
\begin{tikzpicture}
  \node[kndick] (a1) at (90:1)  {1};
  \node[kndick] (a2) at (210:1) {2};
  \node[kndick] (a3) at (330:1) {3};
  \draw[thick] (a1)--(a2) (a2)--(a3) (a3)--(a1);
  \node[knoten] (u1) at (2.4,0.7)  {$u_1$};
  \node[knoten] (u2) at (3.4,0.7)  {$u_2$};
  \node[knoten] (u3) at (2.9,-0.4) {$u_3$};
  \node[font=\footnotesize] at (0,-1.7)  {$3$-Clique};
  \node[font=\footnotesize] at (2.9,-1.2) {Independent Set $\{u_1,u_2,u_3\}$};
\end{tikzpicture}
\end{center}

\textbf{Kern.} Es kommen $k=3$ neue isolierte Knoten $u_1,u_2,u_3$
hinzu; $k$ bleibt. In $G'$ ist $\{1,2,3\}$ weiterhin eine $3$-Clique,
und $\{u_1,u_2,u_3\}$ ist ein Independent Set der Größe $3$.


\lsg
\textbf{NP-schwer:} Zeige, dass \problem{CliqueAndIndependentSet} NP-schwer
ist durch die Reduktion
$\problem{Clique} \redp \problem{CliqueAndIndependentSet}$.
\problem{Clique} ist bereits als NP-vollständig bekannt, also insbesondere
NP-schwer.

\textbf{Konstruktion:} Sei $(G = (V,E), k)$ eine \problem{Clique}-Instanz
(o.B.d.A.\ $k \ge 2$; bei $k = 1$ wäre ein einzelner Knoten zugleich Clique
und Independent Set). Wir konstruieren daraus eine
\problem{CliqueAndIndependentSet}-Instanz $(G', k)$ durch:
\begin{itemize}
  \item $G' = (V \cup \{u_1,\dots,u_k\},\, E)$ mit $k$ neuen isolierten
        Knoten $u_1, \dots, u_k$
  \item $k$ bleibt unverändert
\end{itemize}

\textbf{Beweis Clique nach CliqueAndIndependentSet:}
\begin{itemize}
  \item Sei $C$ eine $k$-Clique in $G$.
  \item Da keine Kanten entfernt wurden, ist $C$ auch eine $k$-Clique in $G'$.
  \item Die Knoten $u_1, \dots, u_k$ sind isoliert, also paarweise nicht
        adjazent.
  \item Somit ist $\{u_1, \dots, u_k\}$ ein Independent Set der Größe $k$
        in $G'$.
  \item Also gibt es in $G'$ sowohl eine $k$-Clique als auch ein Independent
        Set der Größe $k$.
\end{itemize}

\textbf{Beweis CliqueAndIndependentSet nach Clique:}
\begin{itemize}
  \item Sei $(G', k)$ eine Ja-Instanz, dann enthält $G'$ insbesondere eine
        $k$-Clique $C'$.
  \item Da $k \ge 2$, hat jeder Knoten in $C'$ mindestens einen Nachbarn
        in $C'$.
  \item Die Knoten $u_1, \dots, u_k$ sind isoliert, haben also keine Nachbarn.
  \item Somit gilt $C' \subseteq V$.
  \item Also ist $C'$ eine $k$-Clique in $G$.
\end{itemize}

\textbf{Laufzeit:} $k$ isolierte Knoten $u_1, \dots, u_k$ anhängen --
$O(k) \subseteq O(|V|)$, also bleibt die Transformation polynomiell.

Da \problem{Clique} NP-schwer ist und
$\problem{Clique} \redp \problem{CliqueAndIndependentSet}$ gilt, folgt:
\problem{CliqueAndIndependentSet} ist NP-schwer. \hfill$\square$

\newpage
% ==================================================================
\katkopf{$k$-CLIQUE-DEG-3 ist NP-vollständig}{Klausur SS25-H, A3, 2+8 P.}
\textbf{Problem $k$-\problem{CLIQUE-DEG-3}:} Gegeben $G = (V,E)$ mit
$\deg(v) \ge 3$ für alle $v \in V$, und $k \in \mathbb{N}_{>0}$. Existiert eine
Clique $C$ mit $|C| \ge k$?
\begin{enumerate}
\item[a)] Zeigen Sie, dass $k$-\problem{Clique} für $k \in \{1,2,3,4\}$
polynomiell lösbar ist.
\item[b)] Zeigen Sie, dass $k$-\problem{CLIQUE-DEG-3} NP-vollständig ist.
\end{enumerate}

\bspkopf{$k$-CLIQUE-DEG-3}
\textbf{Instanz.} $k$-\problem{Clique} am folgenden $G$: ein $K_5$ auf
$\{1,\dots,5\}$ plus Pendant-Knoten $6$ mit $\deg(6) = 1 < 3$, gesucht
$k = 5$.
\begin{center}
\begin{tikzpicture}[scale=0.95]
  \foreach \i in {1,...,5}
    \node[knoten,font=\small] (v\i) at ({90+(\i-1)*72}:1.15) {$\i$};
  \foreach \a/\b in {1/2,1/3,1/4,1/5,2/3,2/4,2/5,3/4,3/5,4/5}
    \draw (v\a)--(v\b);
  \node[knoten,font=\small] (v6) at (2.5,1.9) {$6$};
  \draw (v1)--(v6);
  \node[knoten,minimum size=5mm,font=\scriptsize] (a) at (3.9,2.5)  {$a_6$};
  \node[knoten,minimum size=5mm,font=\scriptsize] (b) at (4.5,1.75) {$b_6$};
  \node[knoten,minimum size=5mm,font=\scriptsize] (c) at (3.8,1.2)  {$c_6$};
  \draw[black!55] (v6)--(a) (v6)--(b) (v6)--(c) (a)--(b) (a)--(c) (b)--(c);
  \node[font=\footnotesize, text width=8.5cm, align=center] at (1.2,-1.9)
    {gezeichnet: das private $K_4$ an Knoten $6$; an jedem der Knoten
     $1,\dots,5$ hängt ebenso eines};
\end{tikzpicture}
\end{center}

\textbf{Kern.} An jeden Knoten $v$ wird ein privates $K_4$ auf
$\{v,a_v,b_v,c_v\}$ angehängt; $k$ bleibt. In $G'$ haben alle Knoten
Grad $\ge 3$, und die $5$-Clique $\{1,\dots,5\}$ bleibt erhalten.
Gadget-Cliquen haben Größe $\le 4 < k$, erzeugen also keine neue
$5$-Clique.


\lsg
\textbf{a)} Für festes $k \le 4$: Teste alle $\binom{|V|}{k} = O(|V|^k)$
Knotenmengen der Größe $k$; pro Menge prüfe die $\le 6$ Kantenpaare in $O(1)$
(Adjazenzmatrix). Laufzeit $O(|V|^4)$, polynomiell. ($k = 1$: jeder Knoten ist
eine 1-Clique.)

\textbf{b)} \textbf{$\in$ NP:} Eingabe: Graph $G = (V,E)$, Zahl $k$ und
Zertifikat $C \subseteq V$. Der Verifizierer arbeitet wie folgt:
\begin{itemize}
  \item Falls $|C| < k$, lehne ab.
  \item Prüfe für jedes Paar $\{x,y\} \subseteq C$, ob $\{x,y\} \in E$ gilt.
  \item Lehne ab, falls für ein Paar $\{x,y\} \notin E$ gilt.
  \item Sonst akzeptiere.
\end{itemize}
Existiert eine Clique $C$ mit $|C| \ge k$, dann gibt es ein Zertifikat dafür.
Dieses wird vom Verifizierer akzeptiert und sonst abgelehnt.
Größenprüfung und Prüfung aller Paare laufen in $O(|V|^2)$, somit polynomiell.
Also gilt $k\text{-}\problem{CLIQUE-DEG-3} \in \NP$.

\textbf{NP-schwer:} Zeige, dass $k$-\problem{CLIQUE-DEG-3} NP-schwer ist durch
die Reduktion
$k\text{-}\problem{Clique} \redp k\text{-}\problem{CLIQUE-DEG-3}$.
$k$-\problem{Clique} ist bereits als NP-vollständig bekannt.

\textbf{Konstruktion:} Sei $(G = (V,E), k)$ eine $k$-\problem{Clique}-Instanz.
Wir konstruieren daraus eine $k$-\problem{CLIQUE-DEG-3}-Instanz $(G', k)$
durch:
\begin{itemize}
  \item Falls $k \le 4$: Löse $(G, k)$ direkt in Polynomialzeit -- für
        $k \le 4$ genügt es, alle $O(|V|^k)$ Knotenmengen zu testen. Gib je
        nach Antwort eine feste triviale Ja- bzw.\ Nein-Instanz von
        $k$-\problem{CLIQUE-DEG-3} aus.
  \item Falls $k \ge 5$: Hänge an jeden Knoten $v \in V$ drei private Knoten
        $a_v, b_v, c_v$ an.
  \item Verbinde dabei $\{v, a_v, b_v, c_v\}$ vollständig zum $K_4$.
  \item $k$ bleibt unverändert.
\end{itemize}
Dann gilt $\deg(v) \ge 3$ für alle Knoten: Jedes $v \in V$ hat die drei
Nachbarn $a_v, b_v, c_v$, und Gadget-Knoten haben Grad genau 3. Die Instanz
ist gültig.
\begin{center}
\begin{tikzpicture}
  \begin{scope}
    \node[knoten] (lx) at (-1.2,1.2) {$x$};
    \node[knoten] (ly) at (1.2,1.2)  {$y$};
    \node[kndick] (lv) at (0,0)      {$v$};
    \draw (lv)--(lx) (lv)--(ly);
    \node[font=\footnotesize, text width=3cm, align=center] at (0,-2.9)
      {Knoten $v$ in $G$};
  \end{scope}
  \draw[->,thick] (2.0,-0.4) -- (3.2,-0.4);
  \begin{scope}[xshift=6.4cm]
    \node[knoten] (x) at (-1.2,1.2) {$x$};
    \node[knoten] (y) at (1.2,1.2)  {$y$};
    \node[kndick] (v) at (0,0)      {$v$};
    \draw[black!50] (v)--(x) (v)--(y);
    \node[kndick,font=\small] (a) at (-1.1,-1.75) {$a_v$};
    \node[kndick,font=\small] (b) at (1.1,-1.75)  {$b_v$};
    \node[kndick,font=\small] (c) at (0,-1.05)    {$c_v$};
    \draw[thick] (v)--(a) (v)--(b) (a)--(b) (c)--(v) (c)--(a) (c)--(b);
    \node[font=\footnotesize, text width=7.6cm, align=center] at (0,-2.9)
      {in $G'$: privates $K_4$ auf $\{v,a_v,b_v,c_v\}$; $a_v,b_v,c_v$ sind
       nur mit $v$ und untereinander verbunden (Grad genau 3)};
  \end{scope}
\end{tikzpicture}
\end{center}

\textbf{Beweis $k$-Clique nach $k$-CLIQUE-DEG-3} (Fall $k \ge 5$):
\begin{itemize}
  \item Sei $C$ eine $k$-Clique in $G$.
  \item Da keine Kanten entfernt wurden, ist $C$ auch eine $k$-Clique in $G'$.
\end{itemize}

\textbf{Beweis $k$-CLIQUE-DEG-3 nach $k$-Clique} (Fall $k \ge 5$):
\begin{itemize}
  \item Sei $C'$ eine $k$-Clique in $G'$.
  \item Angenommen, $C'$ enthielte einen Gadget-Knoten.
  \item Gadget-Knoten sind nur mit ihrem $v$ und untereinander verbunden.
  \item Dann läge $C'$ komplett in einem $\{v, a_v, b_v, c_v\}$.
  \item Dann wäre $|C'| \le 4 < k$, ein Widerspruch zu $|C'| \ge k$.
  \item Somit gilt $C' \subseteq V$.
  \item Da zwischen Knoten aus $V$ keine neuen Kanten hinzugekommen sind,
        ist $C'$ eine $k$-Clique in $G$.
\end{itemize}
Im Fall $k \le 4$ wird $(G, k)$ direkt gelöst, und die ausgegebene triviale
Instanz hat dieselbe Antwort.

\textbf{Laufzeit:} Pro Knoten ein Gadget konstanter Größe anlegen --
$O(|V|)$. Im Fall $k \le 4$ alle Knotenmengen testen -- $O(|V|^4)$.
Also bleibt die Transformation polynomiell.

Da $k\text{-}\problem{CLIQUE-DEG-3} \in \NP$ und NP-schwer ist, folgt:
$k$-\problem{CLIQUE-DEG-3} ist NP-vollständig. \hfill$\square$

\newpage
% ==================================================================
\katkopf{FeedbackVertexSet ist NP-vollständig}{Hausaufgabe 10.1, 5 P.}
\textbf{Problem \problem{FeedbackVertexSet}:} Gegeben ein \emph{gerichteter}
Graph $G = (V,E)$ und $k$; gibt es $X \subseteq V$ mit $|X| \le k$, sodass
$G \setminus X$ kreisfrei ist?

Zeigen Sie, dass \problem{FeedbackVertexSet} NP-vollständig ist.
\emph{Hinweis:} Reduzieren Sie \problem{VertexCover} auf
\problem{FeedbackVertexSet}.

\bspkopf{FeedbackVertexSet NP-vollständig}
\textbf{Instanz.} \problem{VertexCover} am Pfad $1$--$2$--$3$ mit $k=1$.
\begin{center}
\begin{tikzpicture}
  \begin{scope}
    \node[knoten] (a1) at (0,0)   {1};
    \node[kndick] (a2) at (1.5,0) {2};
    \node[knoten] (a3) at (3,0)   {3};
    \draw (a1)--(a2) (a2)--(a3);
    \node[font=\footnotesize] at (1.5,-1.0) {$G$: VC $\{2\}$, $k=1$};
  \end{scope}
  \draw[->,thick] (3.9,0) -- (5.3,0);
  \begin{scope}[xshift=6.2cm]
    \node[knoten] (b1) at (0,0)   {1};
    \node[kndick] (b2) at (1.5,0) {2};
    \node[knoten] (b3) at (3,0)   {3};
    \draw[->] (b1) to[bend left=35] (b2);
    \draw[->] (b2) to[bend left=35] (b1);
    \draw[->] (b2) to[bend left=35] (b3);
    \draw[->] (b3) to[bend left=35] (b2);
    \node[font=\footnotesize] at (1.5,-1.0) {$G'$: FVS $\{2\}$, $k=1$};
  \end{scope}
\end{tikzpicture}
\end{center}

\textbf{Kern.} Jede Kante $\{u,v\}$ wird zu zwei antiparallelen Bögen
$(u,v),(v,u)$; $k$ bleibt. In $G'$ entstehen die $2$-Kreise
$1\rightleftarrows 2$ und $2\rightleftarrows 3$; das Vertex Cover
$\{2\}$ trifft beide, ist also ein Feedback Vertex Set mit
$|X| = 1 \le k$.


\lsg
\textbf{$\in$ NP:} Eingabe: gerichteter Graph $G = (V,E)$, Zahl $k$ und
Zertifikat $X \subseteq V$. Der Verifizierer arbeitet wie folgt:
\begin{itemize}
  \item Falls $|X| > k$, lehne ab.
  \item Prüfe per topologischer Sortierung, ob $G \setminus X$ kreisfrei ist.
  \item Lehne ab, falls $G \setminus X$ einen Kreis enthält.
  \item Sonst akzeptiere.
\end{itemize}
Existiert ein Feedback Vertex Set $X$ mit $|X| \le k$, dann gibt es ein
Zertifikat dafür. Dieses wird vom Verifizierer akzeptiert und sonst abgelehnt.
Größenprüfung und topologische Sortierung laufen in $O(|V| + |E|)$, somit
polynomiell. Also gilt $\problem{FeedbackVertexSet} \in \NP$.

\textbf{NP-schwer:} Zeige, dass \problem{FeedbackVertexSet} NP-schwer ist
durch die Reduktion
$\problem{VertexCover} \redp \problem{FeedbackVertexSet}$.
\problem{VertexCover} ist bereits als NP-vollständig bekannt.

\textbf{Konstruktion:} Sei $(G = (V,E), k)$ eine \problem{VertexCover}-Instanz.
Wir konstruieren daraus eine \problem{FeedbackVertexSet}-Instanz
$(G' = (V', E'),\, k')$ durch:
\begin{itemize}
  \item $V' = V$
  \item $E' = \{(u,v), (v,u) \mid \{u,v\} \in E\}$
  \item $k' = k$
\end{itemize}
So wird jede ungerichtete Kante zu zwei antiparallelen Bögen.
\begin{center}
\begin{tikzpicture}
  \node[knoten] (u1) at (0,0)   {$u$};
  \node[knoten] (v1) at (2.2,0) {$v$};
  \draw (u1)--(v1);
  \node[font=\footnotesize] at (1.1,-1.0) {Kante $\{u,v\}$ in $G$};
  \draw[->,thick] (3.4,0) -- (5.0,0);
  \node[knoten] (u2) at (6.2,0) {$u$};
  \node[knoten] (v2) at (8.4,0) {$v$};
  \draw[->] (u2) to[bend left=30] (v2);
  \draw[->] (v2) to[bend left=30] (u2);
  \node[font=\footnotesize] at (7.3,-1.0) {B\"ogen $(u,v)$ und $(v,u)$ in $G'$};
\end{tikzpicture}
\end{center}

\textbf{Beweis VertexCover nach FeedbackVertexSet:}
\begin{itemize}
  \item Sei $C$ ein Vertex Cover von $G$ mit $|C| \le k$.
  \item Somit hat jede Kante aus $G$ einen Endpunkt in $C$.
  \item Also hat $G \setminus C$ keine Kanten mehr.
  \item Dann hat auch $G' \setminus C$ keine Bögen und damit keine Kreise.
  \item Also ist $C$ ein Feedback Vertex Set für $G'$ mit $|C| \le k'$.
\end{itemize}

\textbf{Beweis FeedbackVertexSet nach VertexCover:}
\begin{itemize}
  \item Sei $X$ ein Feedback Vertex Set von $G'$ mit $|X| \le k'$.
  \item Dann ist $G' \setminus X$ kreisfrei.
  \item Angenommen, $X$ wäre kein Vertex Cover.
  \item Dann gäbe es eine Kante $\{u,v\} \in E$ mit $u, v \notin X$.
  \item Somit wären $u$ und $v$ noch in $G' \setminus X$ vorhanden.
  \item Die Bögen $(u,v)$ und $(v,u)$ würden einen Kreis bilden.
  \item Das wäre ein Widerspruch dazu, dass $G' \setminus X$ kreisfrei ist.
  \item Also ist $X$ ein Vertex Cover von $G$ mit $|X| \le k$.
\end{itemize}

\textbf{Laufzeit:} Pro Kante zwei antiparallele Bögen anlegen -- $O(|E|)$,
also bleibt die Transformation polynomiell.

Da $\problem{FeedbackVertexSet} \in \NP$ und NP-schwer ist, folgt:
\problem{FeedbackVertexSet} ist NP-vollständig. \hfill$\square$

\newpage
% ==================================================================
\katkopf{$\Delta$-Cover ist NP-vollständig}{Hausaufgabe 11.1, 8 P.}
\textbf{Problem $\Delta$-\problem{Cover}:} Gegeben $G = (V,E)$ und $k$. Gibt es
$C_\Delta \subseteq V$ mit $|C_\Delta| \le k$, sodass jedes Dreieck (3-Clique)
von $G$ mindestens einen Knoten in $C_\Delta$ hat?

Zeigen Sie, dass $\Delta$-\problem{Cover} NP-vollständig ist.

\bspkopf{$\Delta$-Cover NP-vollständig}
\textbf{Instanz.} \problem{VertexCover} am Pfad $1$--$2$--$3$ mit $k=1$.
\begin{center}
\begin{tikzpicture}
  \begin{scope}
    \node[knoten] (a1) at (0,0)   {1};
    \node[kndick] (a2) at (1.5,0) {2};
    \node[knoten] (a3) at (3,0)   {3};
    \draw (a1)--(a2) (a2)--(a3);
    \node[font=\footnotesize] at (1.5,-1.0) {$G$: VC $\{2\}$, $k=1$};
  \end{scope}
  \draw[->,thick] (3.9,0.3) -- (5.3,0.3);
  \begin{scope}[xshift=6.2cm]
    \node[knoten] (b1) at (0,0)     {1};
    \node[kndick] (b2) at (1.5,0)   {2};
    \node[knoten] (b3) at (3,0)     {3};
    \node[knoten] (w1) at (0.75,1.3) {$w_{12}$};
    \node[knoten] (w2) at (2.25,1.3) {$w_{23}$};
    \draw (b1)--(b2) (b2)--(b3);
    \draw (b1)--(w1) (b2)--(w1);
    \draw (b2)--(w2) (b3)--(w2);
    \node[font=\footnotesize] at (1.5,-1.0)
      {$G'$: zwei Dreiecke, $C_\Delta=\{2\}$};
  \end{scope}
\end{tikzpicture}
\end{center}

\textbf{Kern.} Jede Kante $e = \{u,v\}$ wird durch einen neuen Knoten
$w_e$ zum Dreieck $\{u,v,w_e\}$ ergänzt; $k$ bleibt. Beide Dreiecke von
$G'$ enthalten den Knoten $2$, also ist das Vertex Cover $\{2\}$ auch
eine Dreiecksüberdeckung mit $|C_\Delta| = 1 \le k$.


\lsg
\textbf{$\in$ NP:} Eingabe: Graph $G = (V,E)$, Zahl $k$ und Zertifikat
$C_\Delta \subseteq V$. Der Verifizierer arbeitet wie folgt:
\begin{itemize}
  \item Falls $|C_\Delta| > k$, lehne ab.
  \item Prüfe für jedes Knotentripel $\{a,b,c\} \subseteq V$, ob es ein
        Dreieck bildet, also ob $\{a,b\}, \{b,c\}, \{a,c\} \in E$ gilt.
  \item Lehne ab, falls ein solches Dreieck keinen Knoten in $C_\Delta$ hat.
  \item Sonst akzeptiere.
\end{itemize}
Existiert eine Dreiecksüberdeckung $C_\Delta$ mit $|C_\Delta| \le k$, dann
gibt es ein Zertifikat dafür. Dieses wird vom Verifizierer akzeptiert und
sonst abgelehnt. Die Größenprüfung läuft in $O(|V|)$ und das Prüfen aller
Tripel in $O(|V|^3)$, somit polynomiell.
Also gilt $\Delta\text{-}\problem{Cover} \in \NP$.

\textbf{NP-schwer:} Zeige, dass $\Delta$-\problem{Cover} NP-schwer ist durch
die Reduktion $\problem{VertexCover} \redp \Delta\text{-}\problem{Cover}$.
\problem{VertexCover} ist bereits als NP-vollständig bekannt.

\textbf{Konstruktion:} Sei $(G = (V,E), k)$ eine \problem{VertexCover}-Instanz.
Wir konstruieren daraus eine $\Delta$-\problem{Cover}-Instanz
$(G' = (V', E'),\, k')$ durch:
\begin{itemize}
  \item Für jede Kante $e = \{u,v\} \in E$ füge einen neuen Knoten $w_e$
        hinzu.
  \item $V' = V \cup \{w_e \mid e \in E\}$
  \item $E' = E \cup \{\{w_e, u\}, \{w_e, v\} \mid e = \{u,v\} \in E\}$
  \item $k' = k$
\end{itemize}
So wird aus jeder Kante $e = \{u,v\}$ ein Dreieck $\{u, v, w_e\}$.
\begin{center}
\begin{tikzpicture}
  \node[knoten] (u1) at (0,0)   {$u$};
  \node[knoten] (v1) at (2.2,0) {$v$};
  \draw (u1) -- node[midway,above,font=\footnotesize] {$e$} (v1);
  \node[font=\footnotesize] at (1.1,-1.0) {Kante $e=\{u,v\}$ in $G$};
  \draw[->,thick] (3.4,0.4) -- (5.0,0.4);
  \node[knoten] (u2) at (6.2,0) {$u$};
  \node[knoten] (v2) at (8.4,0) {$v$};
  \node[kndick] (w2) at (7.3,1.5) {$w_e$};
  \draw (u2)--(v2);
  \draw (u2)--(w2) (v2)--(w2);
  \node[font=\footnotesize] at (7.3,-1.0) {Dreieck $\{u,v,w_e\}$ in $G'$ (neuer Knoten $w_e$)};
\end{tikzpicture}
\end{center}

\textbf{Beweis VertexCover nach $\Delta$-Cover:}
\begin{itemize}
  \item Sei $C$ ein Vertex Cover von $G$ mit $|C| \le k$.
  \item Jeder neue Knoten $w_e$ hat genau die zwei Nachbarn $u$ und $v$.
  \item Somit ist jedes Dreieck in $G'$ entweder ein Gadget-Dreieck
        $\{u, v, w_e\}$ oder ein aus $G$ geerbtes Dreieck $\{a,b,c\}$ mit
        $a, b, c \in V$ (wegen $E \subseteq E'$).
  \item Falls Gadget-Dreieck $\{u, v, w_e\}$: $C$ deckt die Kante
        $e = \{u,v\}$, also gilt $u \in C$ oder $v \in C$.
  \item Falls geerbtes Dreieck $\{a,b,c\}$: $C$ deckt die Kante
        $\{a,b\} \in E$, also liegt ein Eckknoten in $C$.
  \item Somit hat jedes Dreieck in $G'$ mindestens einen Knoten in $C$.
  \item Also ist $C$ eine Dreiecksüberdeckung für $G'$ mit $|C| \le k'$.
\end{itemize}

\textbf{Beweis $\Delta$-Cover nach VertexCover:}
\begin{itemize}
  \item Sei $C_\Delta$ eine Dreiecksüberdeckung von $G'$ mit
        $|C_\Delta| \le k'$.
  \item Falls $C_\Delta$ ein $w_e$ mit $e = \{u,v\}$ enthält, ersetze $w_e$
        durch den Endpunkt $u$.
  \item Das ist erlaubt, denn $w_e$ liegt in genau einem Dreieck
        $\{u, v, w_e\}$, und das wird auch durch $u$ gedeckt.
  \item Die Menge wird dabei nicht größer.
  \item So entsteht eine Dreiecksüberdeckung $C$ von $G'$ mit
        $C \subseteq V$ und $|C| \le k$.
  \item Jede Kante $e = \{u,v\} \in E$ bildet mit $w_e$ das Gadget-Dreieck
        $\{u, v, w_e\}$.
  \item $C$ trifft dieses Dreieck.
  \item Da $w_e \notin C$, gilt $u \in C$ oder $v \in C$.
  \item Also ist $C$ ein Vertex Cover für $G$ mit $|C| \le k$.
\end{itemize}

\textbf{Laufzeit:} Pro Kante ein Knoten und zwei Kanten anlegen -- $O(|E|)$,
also bleibt die Transformation polynomiell.

Da $\Delta\text{-}\problem{Cover} \in \NP$ und NP-schwer ist, folgt:
$\Delta$-\problem{Cover} ist NP-vollständig. \hfill$\square$

\newpage
% ==================================================================
\katkopf{3-COLOR mit Minimalgrad 3 ist NP-vollständig}{Klausur SS23-H, A5b, 4 P.}
Beweisen Sie die NP-Vollständigkeit von \problem{3-COLOR}, wobei jeder Knoten
im Graphen mindestens Grad 3 hat.

\bspkopf{3-COLOR mit Minimalgrad 3}
\textbf{Instanz.} \problem{3-COLOR} am Graphen $G$ aus dem einzelnen
Knoten $v$, also $\deg(v) = 0 < 3$.
\begin{center}
\begin{tikzpicture}
  \begin{scope}
    \node[kndick,font=\small]  (lv) at (0,0)   {$v$};
    \node[font=\footnotesize] at (0,-1.9) {$\deg(v)=0<3$ in $G$};
  \end{scope}
  \draw[->,thick] (1.1,0) -- (2.3,0);
  \begin{scope}[xshift=6.4cm]
    \node[kndick,font=\small]  (v) at (0,0)   {$v$};
    \node[knoten,minimum size=5.5mm,font=\small] (p) at (-1.2,0)    {$p$};
    \node[knoten,minimum size=5.5mm,font=\small] (q) at (-2.2,0.6)  {$q$};
    \node[knoten,minimum size=5.5mm,font=\small] (r) at (-2.2,-0.6) {$r$};
    \node[knoten,minimum size=5.5mm,font=\small] (s) at (-3.2,0)    {$s$};
    \draw (p)--(q) (p)--(r) (q)--(r) (q)--(s) (r)--(s);
    \draw (v)--(p);
    \draw (v) .. controls (-1.2,-1.5) and (-2.8,-1.5) .. (s);
    \node[knoten,minimum size=5.5mm,font=\small] (p2) at (1.2,0)    {$p'$};
    \node[knoten,minimum size=5.5mm,font=\small] (q2) at (2.2,0.6)  {$q'$};
    \node[knoten,minimum size=5.5mm,font=\small] (r2) at (2.2,-0.6) {$r'$};
    \node[knoten,minimum size=5.5mm,font=\small] (s2) at (3.2,0)    {$s'$};
    \draw (p2)--(q2) (p2)--(r2) (q2)--(r2) (q2)--(s2) (r2)--(s2);
    \draw (v)--(p2);
    \draw (v) .. controls (1.2,-1.5) and (2.8,-1.5) .. (s2);
    \node[font=\footnotesize, text width=8.6cm, align=center] at (0,-2.2)
      {$\deg(v)=0+4=4$; alle Gadget-Knoten haben Grad $3$};
  \end{scope}
\end{tikzpicture}
\end{center}

\textbf{Kern.} An jeden Knoten mit Grad $< 3$ werden zwei
Diamant-Gadgets ($K_4$ ohne die Kante $\{p,s\}$) über $\{v,p\}$ und
$\{v,s\}$ angehängt. Eine 3-Färbung überträgt sich auf $G'$:
$f(v) = 1$, je Gadget $p = s = 2$, $q = 1$, $r = 3$.


\lsg
\textbf{$\in$ NP:} Eingabe: Graph $G = (V,E)$ und Zertifikat
$f: V \to \{1,2,3\}$. Der Verifizierer arbeitet wie folgt:
\begin{itemize}
  \item Prüfe für jede Kante $\{u,v\} \in E$, ob $f(u) \ne f(v)$ gilt.
  \item Lehne ab, falls eine Kante gleich gefärbte Endpunkte hat.
  \item Sonst akzeptiere.
\end{itemize}
Existiert eine 3-Färbung, dann gibt es ein Zertifikat dafür. Dieses wird vom
Verifizierer akzeptiert und sonst abgelehnt. Prüfung aller Kanten --
$O(|E|)$, somit polynomiell. Also liegt die Grad-3-Variante in $\NP$.

\textbf{NP-schwer:} Zeige die NP-Schwere durch Reduktion von \problem{3-COLOR}
auf die Grad-3-Variante. \problem{3-COLOR} ist bereits als NP-vollständig
bekannt.

\textbf{Idee:} Angehängte Gadgets heben den Grad untergradiger Knoten,
ändern aber die 3-Färbbarkeit nicht.

\textbf{Konstruktion:} Sei $G = (V,E)$ eine \problem{3-COLOR}-Instanz.
Wir konstruieren daraus einen Graphen $G'$ mit Minimalgrad 3 durch:
\begin{itemize}
  \item Benutze das Diamant-Gadget $D$: Knoten $p,q,r,s$ mit den Kanten
        $pq, pr, qr, qs, rs$, also $K_4$ ohne die Kante $\{p,s\}$.
  \item Hänge an jeden Knoten $v$ mit $\deg(v) < 3$ \emph{zwei} eigene
        Gadgets an.
  \item Verbinde $v$ je Gadget über die Kanten $\{v,p\}$ und $\{v,s\}$.
\end{itemize}
Dann steigt $\deg(v)$ um 4, und alle Gadget-Knoten haben Grad 3 ($p,s$: zwei
Gadget-Kanten $+$ $v$; $q,r$: drei Gadget-Kanten).
\begin{center}
\begin{tikzpicture}
  \begin{scope}
    \node[knoten] (lx) at (0,1.6) {$x$};
    \node[kndick] (lv) at (0,0)   {$v$};
    \draw (lx)--(lv);
    \node[font=\footnotesize] at (0,-2.3) {$\deg(v)=1<3$ in $G$};
  \end{scope}
  \draw[->,thick] (1.2,0.4) -- (2.4,0.4);
  \begin{scope}[xshift=6.6cm]
    \node[knoten] (x) at (0,1.6) {$x$};
    \node[kndick] (v) at (0,0)   {$v$};
    \draw (x)--(v);
    \node[knoten,minimum size=5.5mm] (p) at (-1.2,0)    {$p$};
    \node[knoten,minimum size=5.5mm] (q) at (-2.2,0.7)  {$q$};
    \node[knoten,minimum size=5.5mm] (r) at (-2.2,-0.7) {$r$};
    \node[knoten,minimum size=5.5mm] (s) at (-3.2,0)    {$s$};
    \draw (p)--(q) (p)--(r) (q)--(r) (q)--(s) (r)--(s);
    \draw (v)--(p);
    \draw (v) .. controls (-1.2,-1.6) and (-2.8,-1.6) .. (s);
    \node[knoten,minimum size=5.5mm] (p2) at (1.2,0)    {$p'$};
    \node[knoten,minimum size=5.5mm] (q2) at (2.2,0.7)  {$q'$};
    \node[knoten,minimum size=5.5mm] (r2) at (2.2,-0.7) {$r'$};
    \node[knoten,minimum size=5.5mm] (s2) at (3.2,0)    {$s'$};
    \draw (p2)--(q2) (p2)--(r2) (q2)--(r2) (q2)--(s2) (r2)--(s2);
    \draw (v)--(p2);
    \draw (v) .. controls (1.2,-1.6) and (2.8,-1.6) .. (s2);
    \node[font=\footnotesize, text width=8.6cm, align=center] at (0,-2.55)
      {in $G'$: zwei Diamant-Gadgets ($K_4$ ohne Kante $\{p,s\}$) an $v$ \"uber
       $\{v,p\}$ und $\{v,s\}$; $\deg(v)$ steigt um 4, alle Gadget-Knoten
       haben Grad 3};
  \end{scope}
\end{tikzpicture}
\end{center}

\textbf{Beweis 3-COLOR nach Grad-3-Variante:}
\begin{itemize}
  \item Sei $f$ eine 3-Färbung von $G$.
  \item Erweitere $f$ auf jedes Gadget an $v$: Setze $p = s = c$ für eine
        Farbe $c \ne f(v)$.
  \item Das ist erlaubt, denn $p$ und $s$ sind nicht benachbart.
  \item $q$ und $r$ sind zu $p$ und $s$ adjazent, aber $p$ und $s$ tragen
        dieselbe Farbe.
  \item Somit bleiben für $q$ und $r$ zwei Farben frei.
  \item Färbe $q$ und $r$ mit diesen beiden Farben.
  \item Also sind alle Kanten von $G'$ gültig gefärbt, und $G'$ ist 3-färbbar.
\end{itemize}

\textbf{Beweis Grad-3-Variante nach 3-COLOR:}
\begin{itemize}
  \item Sei $f'$ eine 3-Färbung von $G'$.
  \item Da $E \subseteq E'$, ist die Einschränkung von $f'$ auf $V$ eine
        3-Färbung von $G$.
\end{itemize}

\textbf{Laufzeit:} Pro untergradigem Knoten zwei Gadgets konstanter Größe
anlegen -- $O(|V|)$, also bleibt die Transformation polynomiell.

Da die Grad-3-Variante in $\NP$ liegt und NP-schwer ist, folgt: Sie ist
NP-vollständig. \hfill$\square$

\newpage
% ==================================================================
\katkopf{$k$-COLOR-PRECOLORING ist NP-vollständig}{Klausur SS25-N, A3, 10 P.}
\textbf{Problem $k$-\problem{COLOR-PRECOLORING}:} Gegeben $G = (V,E)$,
$k \in \mathbb{N}_{>0}$ und paarweise verschiedene Knoten
$v_1, \dots, v_k \in V$. Existiert eine Färbung $f: V \to [k]$ mit
$f(v_i) = i$ für alle $i$ und $f(u) \ne f(v)$ für alle $\{u,v\} \in E$?

Zeigen Sie, dass $k$-\problem{COLOR-PRECOLORING} NP-vollständig ist.

\bspkopf{$k$-COLOR-PRECOLORING}
\textbf{Instanz.} $k$-\problem{Color} mit $k = 3$ am Dreieck
$\{A,B,C\}$.
\begin{center}
\begin{tikzpicture}[scale=0.95]
  \begin{scope}
    \node[knoten,font=\small] (A) at (90:1.0)  {$A$};
    \node[knoten,font=\small] (B) at (210:1.0) {$B$};
    \node[knoten,font=\small] (C) at (330:1.0) {$C$};
    \draw (A)--(B)--(C)--(A);
    \node[font=\scriptsize] at (0,1.45)      {$1$};
    \node[font=\scriptsize] at (-1.27,-0.6)  {$2$};
    \node[font=\scriptsize] at (1.27,-0.6)   {$3$};
    \node[font=\footnotesize] at (0,-1.7) {$G$: 3-Färbung $A{=}1,B{=}2,C{=}3$};
  \end{scope}
  \begin{scope}[xshift=5.6cm]
    \node[knoten,font=\small] (v1) at (90:1.0)  {$v_1$};
    \node[knoten,font=\small] (v2) at (210:1.0) {$v_2$};
    \node[knoten,font=\small] (v3) at (330:1.0) {$v_3$};
    \draw (v1)--(v2)--(v3)--(v1);
    \node[font=\scriptsize] at (0,1.45)      {$=1$};
    \node[font=\scriptsize] at (-1.4,-0.6)   {$=2$};
    \node[font=\scriptsize] at (1.4,-0.6)    {$=3$};
    \node[font=\footnotesize, text width=5cm, align=center] at (0,-1.7)
      {disjunktes $K_3$, vorgefärbt $f(v_i)=i$};
  \end{scope}
\end{tikzpicture}
\end{center}

\textbf{Kern.} Zu $G$ kommt ein disjunktes $K_3$ mit vorgefärbten
Knoten $v_1,v_2,v_3$ hinzu (keine Kanten nach $G$); die Vorfärbung
$f(v_i) = i$ erzwingt nichts in $G$. Die 3-Färbung von $G$ plus
$f(v_i) = i$ ist eine gültige Färbung von $G' = G \mathbin{\dot\cup} K_3$
mit Vorgabe.


\lsg
\textbf{$\in$ NP:} Eingabe: Graph $G = (V,E)$, Zahl $k$, Knoten
$v_1, \dots, v_k$ und Zertifikat $f: V \to [k]$. Der Verifizierer arbeitet
wie folgt:
\begin{itemize}
  \item Prüfe für jedes $i \in [k]$, ob $f(v_i) = i$ gilt.
  \item Prüfe für jede Kante $\{u,v\} \in E$, ob $f(u) \ne f(v)$ gilt.
  \item Lehne ab, falls eine Prüfung fehlschlägt.
  \item Sonst akzeptiere.
\end{itemize}
Existiert eine gültige Färbung mit Vorgabe, dann gibt es ein Zertifikat
dafür. Dieses wird vom Verifizierer akzeptiert und sonst abgelehnt.
Vorgaben- und Kantenprüfung laufen in $O(k + |E|)$, somit polynomiell.
Also gilt $k\text{-}\problem{COLOR-PRECOLORING} \in \NP$.

\textbf{NP-schwer:} Zeige, dass $k$-\problem{COLOR-PRECOLORING} NP-schwer ist
durch die Reduktion
$k\text{-}\problem{Color} \redp k\text{-}\problem{COLOR-PRECOLORING}$.
$k$-\problem{Color} ist bereits als NP-vollständig bekannt.

\textbf{Konstruktion:} Sei $(G, k)$ eine $k$-\problem{Color}-Instanz.
Wir konstruieren daraus eine $k$-\problem{COLOR-PRECOLORING}-Instanz durch:
\begin{itemize}
  \item Füge $k$ neue Knoten $v_1, \dots, v_k$ hinzu.
  \item Verbinde die $v_i$ untereinander vollständig zum $K_k$.
  \item Kanten zwischen $K_k$ und $G$ gibt es nicht.
  \item Gib $(G' = G \mathbin{\dot\cup} K_k,\ k,\ v_1, \dots, v_k)$ aus.
\end{itemize}

\textbf{Beweis $k$-Color nach $k$-COLOR-PRECOLORING:}
\begin{itemize}
  \item Sei $f$ eine $k$-Färbung von $G$.
  \item Erweitere $f$ durch $f(v_i) = i$ für alle $i \in [k]$.
  \item Die $v_i$ sind nur untereinander verbunden und paarweise verschieden
        gefärbt.
  \item Somit ist $f$ eine gültige Färbung von $G'$ und erfüllt die Vorgabe.
\end{itemize}

\textbf{Beweis $k$-COLOR-PRECOLORING nach $k$-Color:}
\begin{itemize}
  \item Sei $f$ eine gültige Färbung von $G'$ mit $f(v_i) = i$.
  \item Da alle $G$-Kanten in $G'$ liegen, ist die Einschränkung von $f$ auf
        $V$ eine $k$-Färbung von $G$.
\end{itemize}

\textbf{Laufzeit:} Die neue Clique $K_k$ anlegen -- $O(k^2)$, also bleibt die
Transformation polynomiell.

Da $k\text{-}\problem{COLOR-PRECOLORING} \in \NP$ und NP-schwer ist, folgt:
$k$-\problem{COLOR-PRECOLORING} ist NP-vollständig. \hfill$\square$

\newpage
% ==================================================================
\katkopf{HamiltonianPath $\redp$ HamiltonianCycle}{Klausur SS23-N, A5b, 5 P.}
\textbf{Problem \problem{HamiltonianPath}:} Gegeben ein ungerichteter Graph
$G = (V,E)$. \textbf{Entscheide:} Existiert ein Pfad in $G$, der jeden
Knoten genau einmal besucht?

\textbf{Problem \problem{HamiltonianCycle}:} Gegeben ein ungerichteter Graph
$G = (V,E)$. \textbf{Entscheide:} Existiert ein Kreis in $G$, der jeden
Knoten genau einmal besucht?

Geben Sie eine polynomielle Reduktion von \problem{HamiltonianPath} auf
\problem{HamiltonianCycle} an.

\bspkopf{HamiltonianPath $\redp$ HamiltonianCycle}
\textbf{Instanz.} \problem{HamiltonianPath} am folgenden Pfad $G$.
\begin{center}
\begin{tikzpicture}[scale=0.95]
  \begin{scope}
    \node[knoten,font=\small] (1) at (0,0)   {$1$};
    \node[knoten,font=\small] (2) at (1.3,0) {$2$};
    \node[knoten,font=\small] (3) at (2.6,0) {$3$};
    \draw[thick] (1)--(2)--(3);
    \node[font=\footnotesize] at (1.3,-1.4) {HP in $G$: $1\!-\!2\!-\!3$};
  \end{scope}
  \draw[->,thick] (3.4,-0.3) -- (4.6,-0.3);
  \begin{scope}[xshift=5.5cm]
    \node[knoten,font=\small] (1) at (0,0)   {$1$};
    \node[knoten,font=\small] (2) at (1.3,0) {$2$};
    \node[knoten,font=\small] (3) at (2.6,0) {$3$};
    \node[kndick,font=\small]  (u) at (1.3,-1.4) {$u$};
    \draw[thick] (1)--(2)--(3);
    \draw[black!50] (u)--(2);
    \draw[thick] (u)--(1) (u)--(3);
    \node[font=\footnotesize, text width=5.5cm, align=center] at (1.3,-2.5)
      {$u$ zu allen $v_i$; fett: HK $1\!-\!2\!-\!3\!-\!u\!-\!1$};
  \end{scope}
\end{tikzpicture}
\end{center}

\textbf{Kern.} Ein neuer universeller Knoten $u$ wird mit allen Knoten
verbunden. Der Hamiltonpfad $1\!-\!2\!-\!3$ schließt sich über die
Kanten $\{3,u\}$ und $\{u,1\}$ zum Hamiltonkreis
$1\!-\!2\!-\!3\!-\!u\!-\!1$ in $G'$.


\lsg
\textbf{Konstruktion:} Sei $G = (V,E)$ gegeben. Füge einen neuen universellen
Knoten $u$ hinzu: $G' = (V \cup \{u\},\, E \cup \{\{u,v\} \mid v \in V\})$.
\begin{center}
\begin{tikzpicture}
  \begin{scope}
    \node[knoten,font=\small] (a1) at (0,0)   {$v_1$};
    \node[knoten,font=\small] (a2) at (1.5,0) {$v_2$};
    \node[knoten,font=\small] (a3) at (3.0,0) {$v_{n-1}$};
    \node[knoten,font=\small] (a4) at (4.5,0) {$v_n$};
    \draw (a1)--(a2) (a3)--(a4);
    \draw[dashed] (a2)--(a3);
    \node[font=\footnotesize] at (2.25,-2.5) {Hamiltonpfad in $G$};
  \end{scope}
  \draw[->,thick] (5.4,-0.5) -- (6.6,-0.5);
  \begin{scope}[xshift=7.5cm]
    \node[knoten,font=\small] (b1) at (0,0)   {$v_1$};
    \node[knoten,font=\small] (b2) at (1.5,0) {$v_2$};
    \node[knoten,font=\small] (b3) at (3.0,0) {$v_{n-1}$};
    \node[knoten,font=\small] (b4) at (4.5,0) {$v_n$};
    \node[kndick] (u) at (2.25,-1.6) {$u$};
    \draw[thick] (b1)--(b2) (b3)--(b4);
    \draw[thick,dashed] (b2)--(b3);
    \draw[black!50] (u)--(b2) (u)--(b3);
    \draw[thick] (u)--(b1) (u)--(b4);
    \node[font=\footnotesize, text width=6.5cm, align=center] at (2.25,-2.5)
      {in $G'$: neuer Knoten $u$ mit Kanten zu allen $v_i$; fett:
       Hamiltonkreis $v_1,\dots,v_n,u,v_1$};
  \end{scope}
\end{tikzpicture}
\end{center}

\textbf{Beweis HamiltonianPath nach HamiltonianCycle:}
\begin{itemize}
  \item Sei $v_1, \dots, v_n$ ein Hamiltonpfad in $G$.
  \item Da $u$ universell ist, existieren die Kanten $\{v_n, u\}$ und
        $\{u, v_1\}$.
  \item Also ist $v_1, \dots, v_n, u, v_1$ ein Hamiltonkreis in $G'$.
\end{itemize}

\textbf{Beweis HamiltonianCycle nach HamiltonianPath:}
\begin{itemize}
  \item Sei $C$ ein Hamiltonkreis in $G'$.
  \item $C$ besucht $u$ genau einmal, zwischen zwei Nachbarn $v_i, v_j \in V$.
  \item Entferne $u$ aus dem Kreis.
  \item Dann bleibt ein Pfad von $v_i$ nach $v_j$, der alle Knoten aus $V$
        genau einmal besucht.
  \item Dieser Pfad benutzt nur Kanten aus $E$, denn neu sind nur die Kanten
        an $u$.
  \item Also ist er ein Hamiltonpfad in $G$.
\end{itemize}

\textbf{Laufzeit:} Einen Knoten und $|V|$ neue Kanten anlegen -- $O(|V|)$,
polynomiell. \hfill$\square$

\newpage
% ==================================================================
\katkopf{HamiltonianCycle $\redp$ HamiltonianPath}{Klausur SS23-N, A5c, 6 P.}
\textbf{Problem \problem{HamiltonianCycle}:} Gegeben ein ungerichteter Graph
$G = (V,E)$. \textbf{Entscheide:} Existiert ein Kreis in $G$, der jeden
Knoten genau einmal besucht?

\textbf{Problem \problem{HamiltonianPath}:} Gegeben ein ungerichteter Graph
$G = (V,E)$. \textbf{Entscheide:} Existiert ein Pfad in $G$, der jeden
Knoten genau einmal besucht?

Geben Sie eine polynomielle Reduktion von \problem{HamiltonianCycle} auf
\problem{HamiltonianPath} an.

\bspkopf{HamiltonianCycle $\redp$ HamiltonianPath}
\textbf{Instanz.} \problem{HamiltonianCycle} am Dreieck auf
$\{v, w_1, w_2\}$.
\begin{center}
\begin{tikzpicture}[scale=0.95]
  \begin{scope}
    \node[kndick,font=\small]  (v)  at (90:1.1)  {$v$};
    \node[knoten,font=\small] (w1) at (210:1.1) {$w_1$};
    \node[knoten,font=\small] (w2) at (330:1.1) {$w_2$};
    \draw[thick] (v)--(w1)--(w2)--(v);
    \node[font=\footnotesize] at (0,-1.9) {HK in $G$};
  \end{scope}
  \draw[->,thick] (1.7,0) -- (2.9,0);
  \begin{scope}[xshift=6.4cm]
    \node[knoten,font=\small] (w1) at (210:1.1) {$w_1$};
    \node[knoten,font=\small] (w2) at (330:1.1) {$w_2$};
    \node[kndick,font=\small]  (v)  at (120:1.35) {$v$};
    \node[kndick,font=\small]  (vs) at (60:1.35)  {$v^*$};
    \node[knoten,font=\small] (s)  at (-1.4,2.1) {$s$};
    \node[knoten,font=\small] (t)  at (1.4,2.1)  {$t$};
    \draw[black!50] (v)--(w2) (vs)--(w1);
    \draw[thick] (s)--(v)--(w1)--(w2)--(vs)--(t);
    \node[font=\footnotesize, text width=6.6cm, align=center] at (0,-1.9)
      {Zwilling $v^*$ (Nachbarn wie $v$), $s$ an $v$, $t$ an $v^*$;
       fett: HP $s\!-\!v\!-\!w_1\!-\!w_2\!-\!v^*\!-\!t$};
  \end{scope}
\end{tikzpicture}
\end{center}

\textbf{Kern.} Ein Zwilling $v^*$ erbt die Nachbarn von $v$, dazu
kommen die Grad-1-Knoten $s$ an $v$ und $t$ an $v^*$. Der Hamiltonkreis
wird bei $v$ aufgetrennt und zum Hamiltonpfad
$s\!-\!v\!-\!w_1\!-\!w_2\!-\!v^*\!-\!t$ verlängert.


\lsg
\textbf{Idee:} Den Kreis bei $v$ aufschneiden: Ein Zwilling $v^*$ erbt $v$s
Nachbarn, zwei Pendants $s,t$ erzwingen die Pfadenden.

\textbf{Konstruktion:} Sei $G = (V,E)$ gegeben, o.B.d.A.\ $|V| \ge 3$. Wähle
einen beliebigen Knoten $v$. Wir konstruieren $G'$ durch:
\begin{itemize}
  \item Füge einen Zwilling $v^*$ mit denselben Nachbarn wie $v$ hinzu.
  \item Füge einen Knoten $s$ mit der einzigen Kante $\{s, v\}$ hinzu.
  \item Füge einen Knoten $t$ mit der einzigen Kante $\{t, v^*\}$ hinzu.
\end{itemize}
\begin{center}
\begin{tikzpicture}
  \begin{scope}
    \node[kndick]            (v)  at (90:1.3)  {$v$};
    \node[knoten,font=\small] (w1) at (162:1.3) {$w_1$};
    \node[knoten,font=\small] (w2) at (234:1.3) {$w_2$};
    \node[knoten,font=\small] (w3) at (306:1.3) {$w_3$};
    \node[knoten,font=\small] (w4) at (18:1.3)  {$w_4$};
    \draw[thick] (v)--(w1)--(w2)--(w3)--(w4)--(v);
    \node[font=\footnotesize, text width=3.4cm, align=center] at (0,-2.4)
      {Hamiltonkreis durch $v$ in $G$};
  \end{scope}
  \draw[->,thick] (2.0,0.3) -- (3.2,0.3);
  \begin{scope}[xshift=6.8cm]
    \node[knoten,font=\small] (w1) at (162:1.3) {$w_1$};
    \node[knoten,font=\small] (w2) at (234:1.3) {$w_2$};
    \node[knoten,font=\small] (w3) at (306:1.3) {$w_3$};
    \node[knoten,font=\small] (w4) at (18:1.3)  {$w_4$};
    \node[kndick]             (v)  at (125:1.55) {$v$};
    \node[kndick,font=\small] (vs) at (55:1.55)  {$v^*$};
    \node[knoten,font=\small] (s)  at (-1.55,2.45) {$s$};
    \node[knoten,font=\small] (t)  at (1.55,2.45)  {$t$};
    \draw[black!50] (v)--(w4) (vs)--(w1);
    \draw[thick] (s)--(v)--(w1)--(w2)--(w3)--(w4)--(vs)--(t);
    \node[font=\footnotesize, text width=7.6cm, align=center] at (0,-2.4)
      {in $G'$: Zwilling $v^*$ mit denselben Nachbarn wie $v$, dazu
       $s$ an $v$ und $t$ an $v^*$; fett: Hamiltonpfad $s,v,\dots,v^*,t$};
  \end{scope}
\end{tikzpicture}
\end{center}

\textbf{Beweis HamiltonianCycle nach HamiltonianPath:}
\begin{itemize}
  \item Sei $v, w_1, \dots, w_{n-1}, v$ ein Hamiltonkreis in $G$.
  \item Da $v^*$ dieselben Nachbarn wie $v$ hat, existiert die Kante
        $\{w_{n-1}, v^*\}$.
  \item Also ist $s, v, w_1, \dots, w_{n-1}, v^*, t$ ein Hamiltonpfad in $G'$.
\end{itemize}

\textbf{Beweis HamiltonianPath nach HamiltonianCycle:}
\begin{itemize}
  \item Sei $P$ ein Hamiltonpfad in $G'$.
  \item Die Knoten $s$ und $t$ haben Grad 1, also sind sie die beiden
        Endpunkte von $P$.
  \item Da $s$ nur mit $v$ und $t$ nur mit $v^*$ verbunden ist, hat $P$ die
        Form $s, v, x_1, \dots, x_{n-1}, v^*, t$.
  \item Dabei sind $x_1, \dots, x_{n-1}$ alle Knoten aus $V \setminus \{v\}$.
  \item Da $\{x_{n-1}, v^*\} \in E'$ und $v^*$ dieselben Nachbarn wie $v$
        hat, ist $x_{n-1}$ auch ein Nachbar von $v$.
  \item Ersetze $v^*$ durch $v$: Aus dem Mittelstück wird der Kreis
        $v, x_1, \dots, x_{n-1}, v$.
  \item Dieser Kreis besucht jeden Knoten von $G$ genau einmal und benutzt
        nur Kanten aus $E$.
  \item Also ist er ein Hamiltonkreis in $G$.
\end{itemize}

\textbf{Laufzeit:} Zwilling $v^*$ mit den bis zu $|V|$ Nachbarn von $v$
anlegen, dazu die zwei Pendants $s, t$ -- $O(|V|)$, polynomiell. \hfill$\square$

\newpage
% ==================================================================
\katkopf{Hitchhiker's-HamiltonianCycle ist NP-schwer}{Klausur SS24-N, A3a, 5 P.}
\textbf{Problem \problem{Hitchhiker's-HamiltonianCycle}:} Gegeben $G = (V,E)$
mit $\deg(v) \ge 42$ für alle $v \in V$. Gibt es einen Hamiltonkreis? Zeigen
Sie die NP-Schwere durch Reduktion eines bekannten NP-schweren Problems.

\bspkopf{Hitchhiker's-HamiltonianCycle}
\textbf{Instanz.} \problem{HamiltonianCycle} am Dreieck $G$ mit Hamiltonkreis
$A\!-\!B\!-\!C\!-\!A$.
\begin{center}
\begin{tikzpicture}[scale=0.95]
  \begin{scope}
    \node[knoten,font=\small] (A) at (0,1.5)    {$A$};
    \node[knoten,font=\small] (B) at (-1.0,-0.4){$B$};
    \node[knoten,font=\small] (C) at (1.0,-0.4) {$C$};
    \draw[thick] (A)--(B)--(C)--(A);
    \node[font=\footnotesize] at (0,-1.3) {HK in $G$: $A\!-\!B\!-\!C\!-\!A$};
  \end{scope}
  \draw[->,thick] (1.7,0.2) -- (2.9,0.2);
  \begin{scope}[xshift=6.6cm]
    \def\rr{0.75}
    \coordinate (cA) at (0,2.4);
    \coordinate (cB) at (-2.1,-1.0);
    \coordinate (cC) at (2.1,-1.0);
    \coordinate (pAB) at (-0.40,1.76);
    \coordinate (pAC) at (0.40,1.76);
    \coordinate (pBA) at (-1.70,-0.36);
    \coordinate (pBC) at (-1.35,-1.0);
    \coordinate (pCA) at (1.70,-0.36);
    \coordinate (pCB) at (1.35,-1.0);
    \draw[black!55] (pAB)--(pBA);
    \draw[black!55] (pAC)--(pCA);
    \draw[black!55] (pBC)--(pCB);
    \draw[thick] (cA) circle (\rr);
    \draw[thick] (cB) circle (\rr);
    \draw[thick] (cC) circle (\rr);
    \node[font=\small] at (0,2.62) {$K_{43}$};
    \node[font=\small] at (cB) {$K_{43}$};
    \node[font=\small] at (cC) {$K_{43}$};
    \foreach \p in {pAB,pAC,pBA,pBC,pCA,pCB}
      \fill (\p) circle (1.6pt);
    \node[font=\scriptsize] at (-0.80,1.74) {$v_1$};
    \node[font=\scriptsize] at (0.82,1.74)  {$v_{43}$};
    \draw[dashed,thick,->] (pAB) .. controls (-0.12,2.16) and (0.12,2.16) .. (pAC);
    \node[font=\footnotesize, text width=9cm, align=center] at (0,-2.55)
      {in $G'$: jeder Knoten $\to K_{43}$ mit Portalen; gestrichelt:
       Portal-zu-Portal-Pfad durch die Clique};
  \end{scope}
\end{tikzpicture}
\end{center}
\textbf{Kern.} Jeder Knoten wird zur Clique $K_{43}$ mit den Portalen
$v_1,v_{43}$; jede Originalkante liefert vier Portalkanten. Damit sind alle
Grade mindestens $42$, und der Hamiltonkreis überträgt sich: jede Clique
wird als ein Portal-zu-Portal-Pfad durchlaufen.


\lsg
\textbf{Idee:} Jeder Knoten wird zu einer $K_{43}$-Clique mit zwei Portalen --
das erzwingt überall Grad $\ge 42$, ohne die Hamiltonizität zu ändern.

\textbf{Konstruktion} (Reduktion von \problem{HamiltonianCycle}): Ersetze jeden
Knoten $v$ durch eine Clique $K_{43}$ mit Knoten $v_1, \dots, v_{43}$. Für jede
Originalkante $\{u,v\} \in E$ füge die vier Kanten $\{u_1,v_1\}, \{u_1,v_{43}\},
\{u_{43},v_1\}, \{u_{43},v_{43}\}$ hinzu (Portale sind $v_1$ und $v_{43}$).
\begin{center}
\begin{tikzpicture}
  \begin{scope}
    \node[knoten] (lu) at (-1.5,0) {$u$};
    \node[kndick] (lv) at (0,0)    {$v$};
    \draw (lu)--(lv);
    \node[font=\footnotesize, text width=3cm, align=center] at (-0.75,-2.45)
      {Knoten $v$ mit Nachbar $u$ in $G$};
  \end{scope}
  \draw[->,thick] (1.0,0) -- (2.2,0);
  \begin{scope}[xshift=7.2cm]
    \node[kndick,font=\small] (p1)  at (144:1.3) {$v_1$};
    \node[knoten,minimum size=5.5mm] (i1) at (72:1.3)  {};
    \node[knoten,minimum size=5.5mm] (i2) at (0:1.3)   {};
    \node[knoten,minimum size=5.5mm] (i3) at (288:1.3) {};
    \node[kndick,font=\small] (p43) at (216:1.3) {$v_{43}$};
    \draw[black!45] (p1)--(i1) (p1)--(i2) (p1)--(i3) (p1)--(p43)
                    (i1)--(i2) (i1)--(i3) (i1)--(p43)
                    (i2)--(i3) (i2)--(p43) (i3)--(p43);
    \draw[dashed,thick,->] (p1)--(i1)--(i2)--(i3)--(p43);
    \node[fill=white,inner sep=2pt,font=\small] at (0.1,0) {$K_{43}$};
    \node[knoten,minimum size=5.5mm,font=\small] (q1)  at (-3.4,0.85)  {$u_1$};
    \node[knoten,minimum size=5.5mm,font=\small] (q43) at (-3.4,-0.85) {$u_{43}$};
    \node at (-3.4,0.05) {$\vdots$};
    \draw[dashed,black!60] (-3.4,0) ellipse [x radius=0.8, y radius=1.55];
    \node[font=\footnotesize,black!60] at (-3.4,-1.9) {Clique von $u$};
    \draw (q1)--(p1) (q43)--(p43) (q1)--(p43) (q43)--(p1);
    \node[font=\footnotesize, text width=8.4cm, align=center] at (-0.9,-2.75)
      {in $G'$: $v$ ersetzt durch Clique $K_{43}$; Originalkanten docken nur
       an den Portalen $v_1,v_{43}$ an; gestrichelt: Hamiltonpfad
       $v_1 \to \dots \to v_{43}$};
  \end{scope}
\end{tikzpicture}
\end{center}

Grade: innere Clique-Knoten haben Grad $42$; die Portale $v_1, v_{43}$ haben
Grad $\ge 42$. Die Instanz ist also gültig.

\textbf{Beweis \problem{HamiltonianCycle} nach
\problem{Hitchhiker's-HamiltonianCycle}:}
\begin{itemize}
\item Sei $v^{(1)}, \dots, v^{(n)}, v^{(1)}$ ein Hamiltonkreis in $G$.
\item Durchlaufe die Clique jedes besuchten Knotens $v^{(j)}$ auf dem
Hamiltonpfad $v^{(j)}_1 \to \dots \to v^{(j)}_{43}$.
\item Denn in einer Clique existiert dieser Pfad immer.
\item Wechsle danach über die Portalkante $\{v^{(j)}_{43},\, v^{(j+1)}_1\}$
zur nächsten Clique.
\item Diese Portalkante existiert, denn $\{v^{(j)}, v^{(j+1)}\}$ ist eine
Kante in $G$.
\item Der letzte Wechsel führt über $\{v^{(n)}_{43},\, v^{(1)}_1\}$ zurück
zum Start.
\item Somit wird jeder Knoten von $G'$ genau einmal besucht.
\item Also ist das ein Hamiltonkreis in $G'$.
\end{itemize}

\textbf{Beweis \problem{Hitchhiker's-HamiltonianCycle} nach
\problem{HamiltonianCycle}:}
\begin{itemize}
\item Sei $C'$ ein Hamiltonkreis in $G'$.
\item Dann besucht $C'$ in jeder Knoten-Clique alle 43 Knoten.
\item Die inneren Clique-Knoten haben nur Nachbarn in der eigenen Clique.
\item Kanten nach außen gibt es nur an den beiden Portalen $v_1$ und $v_{43}$.
\item Somit durchläuft $C'$ jede Clique als \emph{ein} Segment von Portal zu
Portal.
\item Ziehe nun jede Clique zu ihrem Originalknoten zusammen.
\item Dann wird aus $C'$ ein Kreis in $G$, der jeden Knoten genau einmal
besucht.
\item Denn jede benutzte Portalkante stammt von einer Originalkante
$\{u,v\} \in E$.
\item Also ist das ein Hamiltonkreis in $G$.
\end{itemize}

\textbf{Laufzeit:} pro Knoten eine $K_{43}$-Clique aufbauen ($43^2$
Kanten), pro Originalkante vier Portalkanten --
$O(43^2 \cdot |V| + |E|)$, polynomiell.

Da \problem{HamiltonianCycle} NP-schwer ist, ist
\problem{Hitchhiker's-HamiltonianCycle} NP-schwer. \hfill$\square$

\newpage
% ==================================================================
\katkopf{SubsetSumCardinality ist NP-vollständig}{Präsenz 11.3}
\textbf{Problem \problem{SubsetSumCardinality}:} Gegeben $c_1, \dots, c_n \in
\mathbb{N}_{>0}$ ($n$ gerade) und $K$. Gibt es $S$ mit $|S| = n/2$ und
$\sum_{i\in S} c_i = K$? Zeigen Sie NP-Vollständigkeit;
$\in \NP$ dürfen Sie annehmen.

\bspkopf{SubsetSumCardinality NP-vollständig}
\textbf{Instanz.} \problem{SubsetSum}-Instanz $c=(2,3,5)$, $K=5$, $n=3$;
Lösung $S=\{1,2\}$ mit $2+3=5$.

\textbf{Kern.} Shift $c_i'=c_i+1$ plus $n$ Padding-Items der Größe $1$:
\[
c' = (3,\,4,\,6,\;1,\,1,\,1), \qquad \text{Zielwert } K+n=8, \qquad
\text{Kardinalität } n=3.
\]
Die Bildmenge $\{1,2\}$ mit einem Padding-Item aufgefüllt ergibt
$S'=\{1,2,4\}$: Summe $3+4+1=8$ bei genau $3$ Elementen.


\lsg
\textbf{Konstruktion:} Sei $(c_1, \dots, c_n, K)$ eine
\problem{SubsetSum}-Instanz. Setze $c_i' := c_i + 1$ für $i \le n$ (Shift) und
$c_i' := 1$ für $i \in \{n+1, \dots, 2n\}$ ($n$ Padding-Items). Gib
$(c_1', \dots, c_{2n}',\, K + n)$ aus ($2n$ Items, verlangt $|S| = n$).

\textbf{Beweis \problem{SubsetSum} nach \problem{SubsetSumCardinality}:}
\begin{itemize}
\item Sei $S \subseteq [n]$ eine Lösung mit $\sum_{i\in S} c_i = K$.
\item Dann gilt $\sum_{i\in S} c_i' = K + |S|$, denn jedes gewählte Item
wurde um 1 geshiftet.
\item Setze $S' := S \cup \{n+1, \dots, 2n - |S|\}$, fülle also mit
$n - |S|$ Padding-Items auf.
\item Dann gilt $|S'| = n$.
\item Da jedes Padding-Item genau 1 beiträgt, folgt
\[
\sum_{i \in S'} c_i' = K + |S| + (n - |S|) = K + n.
\]
\item Also ist $S'$ eine Lösung der konstruierten Instanz.
\end{itemize}

\textbf{Beweis \problem{SubsetSumCardinality} nach \problem{SubsetSum}:}
\begin{itemize}
\item Sei $S'$ eine Lösung mit $|S'| = n$ und $\sum_{i\in S'} c_i' = K + n$.
\item Setze $S := S' \cap \{1,\dots,n\}$.
\item Dann enthält $S'$ genau $n - |S|$ Padding-Items.
\item Da jedes Padding-Item genau 1 beiträgt, folgt
\[
\sum_{i\in S} (c_i + 1) = (K + n) - (n - |S|) = K + |S|.
\]
\item Somit gilt $\sum_{i\in S} c_i = K$.
\item Also ist $S$ eine Lösung der \problem{SubsetSum}-Instanz.
\end{itemize}

\textbf{Laufzeit:} $n$ Zahlen um 1 shiften und $n$ Padding-Items
anhängen -- $O(n)$, polynomiell.

Da \problem{SubsetSum} NP-vollständig ist und
$\problem{SubsetSumCardinality} \in \NP$, ist \problem{SubsetSumCardinality}
NP-vollständig. \hfill$\square$

\newpage
% ==================================================================
\katkopf{$(a_1{=}1)$-SubsetSum ist NP-schwer}{Klausur SS24-H, A3b, 5 P.}
\textbf{Problem $(a_1{=}1)$-\problem{SubsetSum}:} $n$ Items mit Größen
$a_i \in \mathbb{N}_{>0}$, wobei $a_1 = 1$, und Zielwert $T$. Gibt es
$I \subseteq [n]$ mit $\sum_{i\in I} a_i = T$? Zeigen Sie die NP-Schwere durch
Reduktion eines bekannten NP-schweren Problems.

\bspkopf{$(a_1{=}1)$-SubsetSum}
\textbf{Instanz.} \problem{SubsetSum}-Instanz $c=(2,3,5)$, $K=5$; Lösung
$S=\{1,2\}$ mit $2+3=5$.

\textbf{Kern.} Verdopple alle Größen und stelle das Ballast-Item $a_1=1$ voran:
\[
a = (1,\;4,\,6,\,10), \qquad T = 2K = 10 \qquad (a_{i+1} = 2c_i).
\]
Aus $S=\{1,2\}$ wird $I=\{2,3\}$ mit $4+6=10=T$; das einzige ungerade Item
$a_1$ bleibt ungenutzt.


\lsg
\textbf{Konstruktion:} Sei $(c_1, \dots, c_n, K)$ eine
\problem{SubsetSum}-Instanz. Erzeuge die Items $a_1 = 1$ und
$a_{i+1} = 2c_i$ für $i \in [n]$, mit Zielwert $T = 2K$. ($a_1 = 1$ ist
erfüllt, die Instanz ist gültig.)

\textbf{Beweis \problem{SubsetSum} nach $(a_1{=}1)$-\problem{SubsetSum}:}
\begin{itemize}
\item Sei $S$ eine Lösung mit $\sum_{i\in S} c_i = K$.
\item Setze $I := \{i+1 \mid i \in S\}$.
\item Dann gilt
\[
\sum_{j \in I} a_j \;=\; \sum_{i \in S} 2c_i \;=\; 2K \;=\; T.
\]
\item Also ist $I$ eine Lösung der konstruierten Instanz.
\end{itemize}

\textbf{Beweis $(a_1{=}1)$-\problem{SubsetSum} nach \problem{SubsetSum}:}
\begin{itemize}
\item Sei $I$ eine Lösung mit $\sum_{i\in I} a_i = T = 2K$.
\item Alle Items außer $a_1$ sind gerade.
\item Die Zielsumme $T = 2K$ ist ebenfalls gerade.
\item Angenommen, $I$ enthielte das Item $a_1 = 1$.
\item Dann wäre die Summe $\sum_{i\in I} a_i$ ungerade, denn $a_1$ ist das
einzige ungerade Item.
\item Das wäre ein Widerspruch zur geraden Zielsumme $T$.
\item Somit gilt $1 \notin I$.
\item Setze $S := \{i-1 \mid i \in I\}$.
\item Dann gilt $\sum_{i\in S} 2c_i = 2K$, also $\sum_{i\in S} c_i = K$.
\item Also ist $S$ eine Lösung der \problem{SubsetSum}-Instanz.
\end{itemize}

\textbf{Laufzeit:} $n$ Zahlen verdoppeln und das Ballast-Item $a_1 = 1$
voranstellen -- $O(n)$, polynomiell.

Da \problem{SubsetSum} NP-schwer ist, ist $(a_1{=}1)$-\problem{SubsetSum}
NP-schwer. \hfill$\square$

\newpage
% ==================================================================
\katkopf{AtMostTwoPerSize-SubsetSum ist NP-schwer}{Klausur SS24-N, A3b, 5 P.}
\textbf{Problem \problem{AtMostTwoPerSize-SubsetSum}:} Zielwert $T > 0$, $n$
Items mit Größen $a_i \in \mathbb{N}_{>0}$; jede Größe tritt höchstens zweimal
auf. Gibt es $S$ mit $\sum_{i\in S} a_i = T$? Zeigen Sie die NP-Schwere durch
Reduktion eines bekannten NP-schweren Problems.

\emph{Hinweis:} Bei \problem{3-ExactCover} sind ein Universum $U$ mit
$|U| = 3m$ und Dreiermengen $S_1, \dots, S_n \subseteq U$ gegeben; gefragt ist
eine Auswahl von Mengen, die jedes Element \emph{genau einmal} überdeckt. Die
Vorlesung reduziert \problem{3-EC} auf \problem{SubsetSum} über die Kodierung
$c_j = \sum_{u_i \in S_j} (n+1)^{i-1}$ mit Ziel
$K = \sum_{j=0}^{3m-1} (n+1)^j$.

\bspkopf{AtMostTwoPerSize-SubsetSum}
\textbf{Instanz.} \problem{3-ExactCover} mit $U=\{u_1,\dots,u_6\}$ und den
Mengen $S_1=\{u_1,u_2,u_3\}$, $S_2=\{u_4,u_5,u_6\}$, $S_3=\{u_1,u_2,u_4\}$;
exakte Überdeckung $\{S_1,S_2\}$.

\textbf{Kern.} Kodiere jede Menge in Basis $n+1=4$:
$c_j=\sum_{u_i\in S_j}4^{\,i-1}$, Ziel $K=\sum_{j=0}^{5}4^{\,j}=1365$.
\begin{center}
\small
\begin{tabular}{l cccccc r}
\toprule
 & \multicolumn{6}{c}{Ziffer zu $u_i$ (Basis $4$)} & \\
\cmidrule(lr){2-7}
 & $u_6$ & $u_5$ & $u_4$ & $u_3$ & $u_2$ & $u_1$ & $c_j$ \\
\midrule
$S_1=\{u_1,u_2,u_3\}$ & 0 & 0 & 0 & 1 & 1 & 1 & $21$ \\
$S_2=\{u_4,u_5,u_6\}$ & 1 & 1 & 1 & 0 & 0 & 0 & $1344$ \\
$S_3=\{u_1,u_2,u_4\}$ & 0 & 0 & 1 & 0 & 1 & 1 & $69$ \\
\midrule
Ziel $K$ & 1 & 1 & 1 & 1 & 1 & 1 & $1365$ \\
\bottomrule
\end{tabular}
\end{center}
Verschiedene Mengen wählen verschiedene Potenzen, also sind $c_1,c_2,c_3$
paarweise verschieden -- jede Größe tritt nur einmal auf. Die Überdeckung
$\{S_1,S_2\}$ liefert $c_1+c_2=21+1344=1365=K$.


\lsg
\textbf{Konstruktion} (Reduktion von \problem{3-ExactCover}): Nutze die
Vorlesungs-Reduktion $\problem{3-EC} \redp \problem{SubsetSum}$: Für eine
3-EC-Instanz mit Universum $|U| = 3m$ und Mengen $S_1, \dots, S_n$ setze
$c_j = \sum_{u_i \in S_j} (n+1)^{i-1}$ und $K = \sum_{j=0}^{3m-1} (n+1)^j$.
O.B.d.A.\ sind die Mengen $S_j$ paarweise verschieden (doppelte Mengen ändern
die Existenz einer exakten Überdeckung nicht -- lösche Duplikate vorab).

Jede Größe $c_j$ ist eine Summe von drei verschiedenen Potenzen von $n+1$.
Eine solche Summe legt ihre Summanden eindeutig fest. Verschiedene Mengen
wählen verschiedene Potenzen und ergeben damit paarweise verschiedene Größen
$c_j$. Somit tritt jede Größe genau einmal auf, und die Zusatzbedingung ist
erfüllt.
\textbf{Beweis \problem{3-ExactCover} nach
\problem{AtMostTwoPerSize-SubsetSum}:}
\begin{itemize}
\item Sei $\mathcal{S}$ eine exakte Überdeckung.
\item Dann wird jedes Element $u_i$ von genau einer Menge in $\mathcal{S}$
überdeckt.
\item Somit kommt in der Summe $\sum_{S_j \in \mathcal{S}} c_j$ jede Potenz
$(n+1)^{i-1}$ genau einmal vor.
\item Also gilt
\[
\sum_{S_j \in \mathcal{S}} c_j \;=\; \sum_{j=0}^{3m-1} (n+1)^j \;=\; K.
\]
\end{itemize}

\textbf{Beweis \problem{AtMostTwoPerSize-SubsetSum} nach
\problem{3-ExactCover}:}
\begin{itemize}
\item Sei $S$ eine Auswahl mit $\sum_{j\in S} c_j = K$.
\item An jeder Ziffernstelle addieren sich höchstens $n$ Einsen, denn es
gibt nur $n$ Mengen.
\item Da die Basis $n+1$ ist, entsteht beim Addieren kein Übertrag.
\item In $K$ hat jede der $3m$ Ziffernstellen den Wert 1.
\item Somit trägt zu jeder Ziffernstelle genau eine gewählte Menge bei.
\item Also überdecken die gewählten Mengen jedes Element genau einmal.
\item Damit ist die Auswahl eine exakte Überdeckung.
\end{itemize}

\textbf{Laufzeit:} Duplikate durch paarweisen Vergleich der $n$ Mengen
entfernen -- $O(n^2)$ Vergleiche. Pro Menge drei Potenzen von $n+1$ addieren
und $K$ aus $3m$ Potenzen aufsummieren -- $O(n+m)$ Additionen polynomiell
langer Zahlen. Also bleibt die Transformation polynomiell.

Da \problem{3-ExactCover} NP-schwer ist, ist
\problem{AtMostTwoPerSize-SubsetSum} NP-schwer. \hfill$\square$

\newpage
% ==================================================================
\katkopf{SubsetSum mit Teilbarkeit ist NP-vollständig}{Klausur SS23-H, A5a, 4 P.}
Beweisen Sie die NP-Vollständigkeit von \problem{SubsetSum}, bei dem jede
Itemgröße durch 3 oder durch 7 teilbar ist.

\bspkopf{SubsetSum mit Teilbarkeit}
\textbf{Instanz.} \problem{SubsetSum}-Instanz $c=(2,3,5)$, $K=5$; Lösung
$S=\{1,2\}$ mit $2+3=5$.

\textbf{Kern.} Multipliziere alle Größen und $K$ mit $3$: $c'=(6,9,15)$,
$K'=15$ -- jede Größe ist durch $3$ teilbar. Dieselbe Auswahl liefert
$6+9=15=K'$.



\lsg
\textbf{$\in$ NP:} Zertifikat $S$; summiere und vergleiche mit $K$, wie beim
gewöhnlichen \problem{SubsetSum}. Laufzeit $O(n)$, polynomiell.

\textbf{Konstruktion:} Sei $(c_1, \dots, c_n, K)$ eine
\problem{SubsetSum}-Instanz. Setze $c_i' := 3c_i$ und $K' := 3K$. Alle Größen
sind durch 3 teilbar -- die Instanz ist gültig.

\textbf{Beweis hin:} Sei $S$ mit $\sum_{i\in S} c_i = K$. Dann
$\sum_{i\in S} c_i' = 3K = K'$.

\textbf{Beweis zurück:} Sei $S$ mit $\sum_{i\in S} c_i' = K'$. Division durch 3
liefert $\sum_{i\in S} c_i = K$.

\textbf{Laufzeit:} jede der $n$ Zahlen und $K$ mit 3 multiplizieren --
$O(n)$, polynomiell.

Da \problem{SubsetSum} NP-vollständig ist und die Variante in $\NP$ liegt, ist
sie NP-vollständig. \hfill$\square$

\newpage
% ==================================================================
\katkopf{SubsetSum ohne Zweierpotenzen ist NP-vollständig}{Klausur SS23-N, A5a, 4 P.}
Sei $L$ die Menge der \problem{SubsetSum}-Instanzen, bei denen keine Itemgröße
eine Zweierpotenz ist. Zeigen Sie, dass $L$ NP-vollständig ist.

\bspkopf{SubsetSum ohne Zweierpotenzen}
\textbf{Instanz.} \problem{SubsetSum}-Instanz $c=(1,4,6)$, $K=5$; die Größen
$1=2^0$ und $4=2^2$ sind Zweierpotenzen. Lösung $S=\{1,2\}$ mit $1+4=5$.

\textbf{Kern.} Multipliziere alle Größen und $K$ mit $3$: $c'=(3,12,18)$,
$K'=15$. Jede Größe hat den Primfaktor $3$ und ist damit keine Zweierpotenz.
Dieselbe Auswahl liefert $3+12=15=K'$.


\lsg
\textbf{$\in$ NP:} Zertifikat $S$; summiere und vergleiche mit $K$. Laufzeit
$O(n)$, polynomiell.

\textbf{Konstruktion:} Sei $(c_1, \dots, c_n, K)$ eine
\problem{SubsetSum}-Instanz. Setze $c_i' := 3c_i$ und $K' := 3K$. Jede Größe
$c_i' \ge 3$ ist durch 3 teilbar und damit keine Zweierpotenz (Zweierpotenzen
haben nur den Primfaktor 2) -- die Instanz liegt in der eingeschränkten Menge.

\textbf{Beweis hin:} $\sum_{i\in S} c_i = K \Rightarrow \sum_{i\in S} c_i' =
3K = K'$.

\textbf{Beweis zurück:} $\sum_{i\in S} c_i' = K' \Rightarrow$ Division durch 3:
$\sum_{i\in S} c_i = K$.

\textbf{Laufzeit:} jede der $n$ Zahlen und $K$ mit 3 multiplizieren --
$O(n)$, polynomiell.

Da \problem{SubsetSum} NP-vollständig ist und $L \in \NP$, ist $L$
NP-vollständig. \hfill$\square$

\newpage
% ==================================================================
\katkopf{TSP ist nicht approximierbar}{Klausur SS23-H, A5c, 7 P.}
\textbf{Problem \problem{TSP}:} Gegeben $n$ Städte mit beliebigen Distanzen
$d(u,v) > 0$ -- \emph{allgemeines} TSP, die Dreiecksungleichung wird
\emph{nicht} vorausgesetzt. Gesucht ist eine Rundtour minimaler Länge durch
alle Städte. Ein Algorithmus $A$ hat Güte $\alpha$, wenn
$A(I) \le \alpha \cdot \mathrm{OPT}(I)$ für alle Instanzen $I$ gilt.

Zeigen Sie: Für kein $\alpha > 1$ gibt es einen Approximationsalgorithmus mit
Güte $\alpha$ für \problem{TSP}, außer $P = NP$.

\bspkopf{TSP ist nicht approximierbar}
\textbf{Instanz.} \problem{HamiltonianCycle}-Graphen mit $n=4$ Knoten,
angenommene Güte $\alpha=2$: Kante $\to$ Distanz $1$, Nicht-Kante $\to$
$\alpha n+1=9$ (gestrichelt).
\begin{center}
\begin{tikzpicture}[scale=1.05]
  \begin{scope}
    \node[knoten,font=\small] (1) at (0,1.3)   {$1$};
    \node[knoten,font=\small] (2) at (1.3,1.3) {$2$};
    \node[knoten,font=\small] (3) at (1.3,0)   {$3$};
    \node[knoten,font=\small] (4) at (0,0)     {$4$};
    \draw[thick] (1)--(2) node[midway,fill=white,inner sep=1pt,font=\scriptsize]{$1$};
    \draw[thick] (2)--(3) node[midway,fill=white,inner sep=1pt,font=\scriptsize]{$1$};
    \draw[thick] (3)--(4) node[midway,fill=white,inner sep=1pt,font=\scriptsize]{$1$};
    \draw[thick] (4)--(1) node[midway,fill=white,inner sep=1pt,font=\scriptsize]{$1$};
    \draw[dashed,black!55] (1)--(3) node[pos=0.3,fill=white,inner sep=1pt,font=\scriptsize]{$9$};
    \draw[dashed,black!55] (2)--(4) node[pos=0.3,fill=white,inner sep=1pt,font=\scriptsize]{$9$};
    \node[font=\footnotesize] at (0.65,-0.9) {Ja: $\OPT=4$};
  \end{scope}
  \begin{scope}[xshift=4.6cm]
    \node[knoten,font=\small] (1) at (0,1.3)   {$1$};
    \node[knoten,font=\small] (2) at (1.3,1.3) {$2$};
    \node[knoten,font=\small] (3) at (1.3,0)   {$3$};
    \node[knoten,font=\small] (4) at (0,0)     {$4$};
    \draw[thick] (1)--(2) node[midway,fill=white,inner sep=1pt,font=\scriptsize]{$1$};
    \draw[thick] (2)--(3) node[midway,fill=white,inner sep=1pt,font=\scriptsize]{$1$};
    \draw[thick] (3)--(4) node[midway,fill=white,inner sep=1pt,font=\scriptsize]{$1$};
    \draw[thick] (2)--(4) node[pos=0.3,fill=white,inner sep=1pt,font=\scriptsize]{$1$};
    \draw[dashed,black!55] (1)--(3) node[pos=0.3,fill=white,inner sep=1pt,font=\scriptsize]{$9$};
    \draw[dashed,black!55] (1)--(4) node[near start,fill=white,inner sep=1pt,font=\scriptsize]{$9$};
    \node[font=\footnotesize] at (0.65,-0.9) {Nein: $\OPT\ge12$};
  \end{scope}
\end{tikzpicture}
\end{center}
\textbf{Kern.} Links gibt es einen Hamiltonkreis: $\OPT=n=4$, also
$A(I)\le\alpha n=8$. Rechts hat Knoten $1$ Grad $1$, also keinen: jede Tour
benutzt eine Nicht-Kante, $\OPT\ge 9+3\cdot 1=12>8$, somit $A(I)>8$. Der
Test \glqq$A(I)\le 8$?\grqq{} entscheidet \problem{HamiltonianCycle}.


\lsg
Angenommen, es gäbe einen polynomiellen Algorithmus $A$ mit
$A(I) \le \alpha \cdot \mathrm{OPT}(I)$ für ein festes $\alpha > 1$. Wir lösen
damit \problem{HamiltonianCycle} in Polynomialzeit:

\textbf{Konstruktion:} Zu $G = (V,E)$ mit $n = |V|$ baue die TSP-Instanz mit
Städten $V$ und
\[
d(u,v) = \begin{cases} 1 & \{u,v\} \in E,\\ \alpha n + 1 & \text{sonst.}
\end{cases}
\]

\textbf{Fall 1: $G$ hat einen Hamiltonkreis.} Dann ist $\mathrm{OPT} = n$
(Tour nur über echte Kanten), also $A(I) \le \alpha n$.

\textbf{Fall 2: $G$ hat keinen Hamiltonkreis.} Dann benutzt jede Tour
mindestens eine Nicht-Kante, also
$\mathrm{OPT} \ge (\alpha n + 1) + (n-1) > \alpha n$, und damit auch
$A(I) > \alpha n$.

Der Vergleich \glqq$A(I) \le \alpha n$?\grqq{} entscheidet also
\problem{HamiltonianCycle} in Polynomialzeit. Da \problem{HamiltonianCycle}
NP-vollständig ist, folgt $P = NP$. Also existiert ein solcher Algorithmus nur,
wenn $P = NP$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{HALT$_{\text{TM}}$ ist NP-schwer}{Hausaufgabe 11.2 (2026), 5 P.}
$\mathrm{HALT}_{\mathrm{TM}} := \{\langle M, w\rangle \mid M \text{ ist DTM
und hält auf } w\}$. Zeigen Sie: $\mathrm{HALT}_{\mathrm{TM}}$ ist NP-schwer.

\bspkopf{HALT$_{\text{TM}}$ NP-schwer}
\textbf{Instanz.} \problem{SAT}-Formel $\varphi=(x_1\vee x_2)\wedge(\neg x_1)$,
erfüllbar durch $x_1x_2=01$.

\textbf{Kern.} Die Reduktion gibt $\langle M,\langle\varphi\rangle\rangle$ aus:
die feste DTM $M$ probiert nacheinander alle Belegungen von $\varphi$, hält
bei einer erfüllenden und geht sonst in eine Endlosschleife. Hier findet $M$
die erfüllende Belegung $01$ und hält -- also
$\langle M,\langle\varphi\rangle\rangle\in\mathrm{HALT}_{\mathrm{TM}}$.


\lsg
Zeige, dass $\mathrm{HALT}_{\mathrm{TM}}$ NP-schwer ist durch die Reduktion:
$\problem{SAT} \redp \mathrm{HALT}_{\mathrm{TM}}$. \problem{SAT} ist bereits
als NP-vollständig bekannt, also insbesondere NP-schwer.

\textbf{Konstruktion:} Sei $\varphi$ eine \problem{SAT}-Instanz mit den
Variablen $x_1, \dots, x_n$. Wir konstruieren daraus die
$\mathrm{HALT}_{\mathrm{TM}}$-Instanz $\langle M, w \rangle$:
\begin{itemize}
\item $w = \langle \varphi \rangle$, also die Kodierung der Formel $\varphi$.
\item $M$ ist eine feste DTM, die auf Eingabe $\langle \varphi \rangle$ wie
folgt arbeitet:
\begin{enumerate}
\item Lese $\varphi$ und probiere nacheinander alle $2^n$ Belegungen $\beta$
der Variablen $x_1, \dots, x_n$.
\item Falls eine Belegung $\beta$ die Formel $\varphi$ erfüllt, halte.
\item Falls alle $2^n$ Belegungen geprüft wurden und keine $\varphi$ erfüllt,
gehe in eine Endlosschleife.
\end{enumerate}
\end{itemize}

\textbf{Beweis \problem{SAT} nach $\mathrm{HALT}_{\mathrm{TM}}$:}
\begin{itemize}
\item Sei $\varphi \in \problem{SAT}$.
\item Dann existiert eine erfüllende Belegung $\beta$.
\item $M$ probiert alle Belegungen und findet $\beta$, also hält $M$ auf $w$.
\item Damit gilt $\langle M, w \rangle \in \mathrm{HALT}_{\mathrm{TM}}$.
\end{itemize}

\textbf{Beweis $\mathrm{HALT}_{\mathrm{TM}}$ nach \problem{SAT}:}
\begin{itemize}
\item Sei $\langle M, w \rangle \in \mathrm{HALT}_{\mathrm{TM}}$, also hält
$M$ auf $w$.
\item $M$ hält nur, wenn es eine erfüllende Belegung $\beta$ findet.
\item Denn ohne erfüllende Belegung geht $M$ in die Endlosschleife.
\item Also existiert eine erfüllende Belegung für $\varphi$.
\item Damit gilt $\varphi \in \problem{SAT}$.
\end{itemize}

\textbf{Laufzeit:} Es wird nur $\varphi$ kodiert und die feste Maschine $M$
ausgegeben -- $O(|\varphi|)$, also bleibt die Transformation polynomiell. Ob
$M$ auf $w$ hält, spielt für die Laufzeit der Reduktion keine Rolle.

Da \problem{SAT} NP-schwer ist und $\problem{SAT} \redp
\mathrm{HALT}_{\mathrm{TM}}$ gilt, ist $\mathrm{HALT}_{\mathrm{TM}}$ NP-schwer.
\hfill$\square$

\newpage
% ##################################################################
\section{ETH-Schranken}
% ##################################################################

% ==================================================================
\katkopf{Lower Bounds: VertexCover}{Hausaufgabe 12.1, 5 P.}
Betrachten Sie die Reduktion $\problem{Clique} \redp \problem{VertexCover}$
(Komplementgraph, $k' = n-k$).
\begin{enumerate}
\item Geben Sie $|V'|$, $|E'|$ und $k'$ in Abhängigkeit der Clique-Instanz an.
\item Zeigen Sie Lower Bounds für \problem{VertexCover} bzgl.\ $|V'|$, $|E'|$
und $k'$ basierend auf der ETH.
\end{enumerate}

\emph{Hinweis:} Unter der ETH ist \problem{Clique} nicht in
$2^{o(|V|)} \cdot |I|^{O(1)}$ lösbar (Vorlesung).

\bspkopf{Lower Bounds VertexCover: konkrete Zahlen}
\textbf{Instanz.} \problem{Clique}-Instanz $G$ mit $|V|=5$, $|E|=6$, $k=3$.
Die Reduktion bildet den Komplementgraphen $\bar G$ mit $k' = |V|-k$.

\begin{center}
\begin{tikzpicture}[plab/.style={font=\scriptsize,align=center}]
  \node[kndick] (g1) at (0,2.0)     {1};
  \node[kndick] (g2) at (-1.1,1.0)  {2};
  \node[kndick] (g3) at (1.1,1.0)   {3};
  \node[knoten] (g4) at (-0.7,-0.2) {4};
  \node[knoten] (g5) at (0.7,-0.2)  {5};
  \draw (g1) -- (g2); \draw (g1) -- (g3); \draw (g2) -- (g3);
  \draw (g2) -- (g4); \draw (g3) -- (g5); \draw (g4) -- (g5);
  \node[plab] at (0,-1.2) {$G$: Clique $\{1,2,3\}$ (grau)};
  \draw[->] (2.2,0.9) -- node[above,plab] {Komplement} (3.9,0.9);
  \node[knoten] (h2) at (4.7,0.9) {2};
  \node[kndick] (h5) at (5.9,0.9) {5};
  \node[knoten] (h1) at (7.1,0.9) {1};
  \node[kndick] (h4) at (8.3,0.9) {4};
  \node[knoten] (h3) at (9.5,0.9) {3};
  \draw (h2) -- (h5); \draw (h5) -- (h1); \draw (h1) -- (h4); \draw (h4) -- (h3);
  \node[plab] at (7.1,-1.2) {$\bar G$: VertexCover $\{4,5\}$ (grau)};
\end{tikzpicture}
\end{center}

\textbf{Kern.} Die VC-Instanz hat $|V'|=5$, $|E'|=\tbinom{5}{2}-6=4$ und
$k'=5-3=2$. Wegen $|V'|=|V|$ wäre ein $2^{o(|V'|)}$-Algorithmus für
\problem{VertexCover} zugleich ein $2^{o(|V|)}$-Algorithmus für
\problem{Clique} -- Widerspruch zur ETH. Kein $2^{o(|V'|)}$.


\lsg
\textbf{1.} $|V'| = |V|$,\quad
$|E'| = \tfrac12|V|(|V|-1) - |E| \le |V|^2$,\quad $k' = |V| - k \le |V|$.
\begin{center}
\begin{tikzpicture}[
  pbox/.style={draw,rounded corners,minimum height=6mm,inner sep=5pt,font=\small},
  plab/.style={font=\scriptsize,align=center},
  blab/.style={font=\scriptsize,align=center,text=black!60}]
  \node[pbox] (cl) at (0,0)   {\problem{Clique} $(G,k)$};
  \node[pbox] (vc) at (7.8,0) {\problem{VertexCover} $(\bar G,k')$};
  \draw[->] (cl) -- node[above,plab,yshift=0.5mm]
    {Komplementgraph:\\ $|V'|{=}|V|$, $|E'|\le|V|^2$,\\ $k'{=}|V|{-}k\le|V|$} (vc);
  \node[blab,anchor=east] at (-1.55,0) {ETH:\\ kein $2^{o(|V|)}$};
  \node[blab,anchor=south] at (7.8,0.45)
    {kein $2^{o(|V'|)}$, kein $2^{o(\sqrt{|E'|})}$,\\ kein $2^{o(k')}$};
  \draw[->,dashed] (vc.south) .. controls (6.5,-2.2) and (1.3,-2.2) .. (cl.south);
  \node[plab] at (3.9,-2.4)
    {Kontraposition: \problem{VertexCover} in $2^{o(|V'|)}$/$2^{o(\sqrt{|E'|})}$/$2^{o(k')}$\\
     $\Rightarrow$ \problem{Clique} in $2^{o(|V|)}\cdot|I|^{O(1)}$ $\Rightarrow$ ETH verletzt};
\end{tikzpicture}
\end{center}

\textbf{2.} Für \problem{Clique} gilt unter der ETH: kein
$2^{o(|V|)} \cdot |I|^{O(1)}$-Algorithmus.
\begin{itemize}
\item \textbf{Bzgl.\ $|V'|$:} Angenommen, \problem{VertexCover} wäre in
$2^{o(|V'|)} \cdot |I|^{O(1)}$ lösbar. Wegen $|V'| = |V|$ ergäbe Reduktion $+$
Algorithmus einen $2^{o(|V|)}$-Algorithmus für \problem{Clique} -- nur möglich,
wenn die ETH falsch ist.
\item \textbf{Bzgl.\ $|E'|$:} Angenommen, \problem{VertexCover} wäre in
$2^{o(\sqrt{|E'|})} \cdot |I|^{O(1)}$ lösbar. Wegen $|E'| \le |V|^2$ ist
$\sqrt{|E'|} = O(|V|)$ -- es ergäbe sich ein $2^{o(|V|)}$-Algorithmus für
\problem{Clique}. Widerspruch zur ETH.
\item \textbf{Bzgl.\ $k'$:} Angenommen, \problem{VertexCover} wäre in
$2^{o(k')} \cdot |I|^{O(1)}$ lösbar. Wegen $k' \le |V|$ ergäbe sich ein
$2^{o(|V|)}$-Algorithmus für \problem{Clique}. Widerspruch zur ETH.
\end{itemize}
\hfill$\square$

\newpage
% ==================================================================
\katkopf{Lower Bounds: HittingSet}{Hausaufgabe 12.2 / Klausur SS23-H A6a, 5 bzw.\ 7 P.}
Reduktion $\problem{3-SAT} \redp \problem{HittingSet}$: $U = \{x_1, \bar x_1,
\dots, x_n, \bar x_n\}$; $F_i = \{x_i, \bar x_i\}$ pro Variable;
$F_{n+j} = C_j$ pro Klausel; $k = n$.
\begin{enumerate}
\item Geben Sie $|U|$, $r$ und $k$ in Abhängigkeit von $n$ und $m$ an.
\item Beweisen Sie Lower Bounds bzgl.\ $|U|$, $r$ und $k$ unter der ETH.
\end{enumerate}

\emph{Hinweis:} Unter der ETH ist \problem{3-SAT} nicht in
$2^{o(n)} \cdot |I|^{O(1)}$ lösbar; mit dem Sparsification-Lemma auch nicht in
$2^{o(m)} \cdot |I|^{O(1)}$. Für 3-SAT-Formeln gilt $n \le 3m$.

\bspkopf{Lower Bounds HittingSet: konkrete Instanz}
\textbf{Instanz.} 3-SAT-Formel mit $n=3$, $m=2$:
$C_1 = (x_1 \vee \bar x_2 \vee x_3)$, $C_2 = (\bar x_1 \vee x_2 \vee \bar x_3)$.
Die Reduktion liefert $F_i=\{x_i,\bar x_i\}$ pro Variable, $F_{n+j}=C_j$ pro
Klausel und $k=n$.

\begin{center}
\begin{tikzpicture}[plab/.style={font=\scriptsize,align=center},
  cbox/.style={draw,rounded corners,inner sep=3pt,font=\small}]
  \foreach \y/\l in {4.5/{x_1},3.9/{\bar x_1},3.0/{x_2},2.4/{\bar x_2},1.5/{x_3},0.9/{\bar x_3}} {
    \fill (0,\y) circle (1.6pt);
    \node[left,font=\small] at (-0.5,\y) {$\l$};
  }
  \foreach \yc/\i in {4.2/1,2.7/2,1.2/3} {
    \draw[black!60] (0,\yc) ellipse (0.38 and 0.55);
    \node[left,plab,text=black!60] at (-1.15,\yc) {$F_\i$};
  }
  \node[cbox] (c1) at (3.4,3.6) {$F_4=C_1$};
  \node[cbox] (c2) at (3.4,1.5) {$F_5=C_2$};
  \draw[black!60] (c1.west) -- (0.1,4.5);
  \draw[black!60] (c1.west) -- (0.1,2.4);
  \draw[black!60] (c1.west) -- (0.1,1.5);
  \draw[black!60] (c2.west) -- (0.1,3.9);
  \draw[black!60] (c2.west) -- (0.1,3.0);
  \draw[black!60] (c2.west) -- (0.1,0.9);
  \node[plab,anchor=west] at (5.0,2.7)
    {$|U|=2n=6$\\[3pt] $r=n+m=5$ Mengen\\[3pt] $k=n=3$};
\end{tikzpicture}
\end{center}

\textbf{Kern.} Wegen $|U| = 2n = 6$ wäre ein $2^{o(|U|)}$-Algorithmus für
\problem{HittingSet} zugleich ein $2^{o(n)}$-Algorithmus für
\problem{3-SAT} -- direkter Widerspruch zur ETH. Kein $2^{o(|U|)}$.


\lsg
\textbf{1.} $|U| = 2n$,\quad $r = n + m$,\quad $k = n$.
\begin{center}
\begin{tikzpicture}[
  plab/.style={font=\scriptsize,align=center},
  cbox/.style={draw,rounded corners,inner sep=4pt,font=\small}]
  \foreach \y/\l in {5.0/{x_1}, 4.3/{\bar x_1}, 3.3/{x_2}, 2.6/{\bar x_2}, 1.6/{x_3}, 0.9/{\bar x_3}} {
    \fill (0,\y) circle (1.6pt);
    \node[left,font=\small] at (-0.55,\y) {$\l$};
  }
  \foreach \yc/\i in {4.65/1, 2.95/2, 1.25/3} {
    \draw[black!60] (0,\yc) ellipse (0.42 and 0.62);
    \node[left,plab,text=black!60] at (-1.25,\yc) {$F_\i$};
  }
  \node[plab,anchor=west] at (-2.6,5.7) {$U=\{x_1,\bar x_1,\dots\}$,\ $|U|=2n$};
  \node[cbox] (c1) at (4.3,4.0) {$F_{n+1}=C_1$};
  \node[cbox] (c2) at (4.3,1.7) {$F_{n+2}=C_2$};
  \draw[black!60] (c1.west) -- (0.12,5.0);
  \draw[black!60] (c1.west) -- (0.45,2.6);
  \draw[black!60] (c1.west) -- (0.12,1.6);
  \draw[black!60] (c2.west) -- (0.12,4.3);
  \draw[black!60] (c2.west) -- (0.45,3.3);
  \draw[black!60] (c2.west) -- (0.12,0.9);
  \node[plab,anchor=west] at (2.6,5.7) {$C_1=(x_1\vee\bar x_2\vee x_3)$,\ $C_2=(\bar x_1\vee x_2\vee\bar x_3)$};
  \node[plab,anchor=west] at (6.6,3.5)
    {$|U| = 2n$\\[2pt] $r = n+m$ Mengen\\[2pt] $k = n$};
  \node[plab,anchor=west,text=black!60] at (6.6,2.2)
    {kein $2^{o(|U|)}$, kein $2^{o(r)}$,\\ kein $2^{o(k)}$};
\end{tikzpicture}
\end{center}

\textbf{2.}
\begin{itemize}
\item \textbf{Bzgl.\ $|U|$:} Angenommen, \problem{HittingSet} wäre in
$2^{o(|U|)} \cdot |I|^{O(1)}$ lösbar. Wegen $|U| = 2n$ ergäbe Reduktion $+$
Algorithmus einen $2^{o(n)}$-Algorithmus für \problem{3-SAT} -- direkter
Widerspruch zur ETH.
\item \textbf{Bzgl.\ $r$:} Angenommen, \problem{HittingSet} wäre in
$2^{o(r)} \cdot |I|^{O(1)}$ lösbar. Wegen $r = n + m$ und $n \le 3m$ ist
$r = O(m)$ -- es ergäbe sich ein $2^{o(m)}$-Algorithmus für \problem{3-SAT}.
Nach dem \textbf{Sparsification-Lemma} geht das nur, wenn die ETH falsch ist.
\item \textbf{Bzgl.\ $k$:} Angenommen, \problem{HittingSet} wäre in
$2^{o(k)} \cdot |I|^{O(1)}$ lösbar. Wegen $k = n$ ergäbe sich ein
$2^{o(n)}$-Algorithmus für \problem{3-SAT} -- direkter Widerspruch zur ETH.
\end{itemize}
\hfill$\square$

\newpage
% ==================================================================
\katkopf{Lower Bounds entlang der Reduktionskette}{Präsenz 12.1}
Welche Lower Bounds ergeben sich unter der ETH (mit Sparsification-Lemma) aus
den Reduktionen (1) $\problem{3-SAT} \redp k\text{-}\problem{Clique}$,
(2) $k\text{-}\problem{Clique} \redp k\text{-}\problem{IS}$ (Komplementgraph),
(3) $\problem{SAT} \redp \problem{3-DM}$,
(4) $\problem{3-DM} \redp \problem{3-EC}$,
(5) $\problem{3-EC} \redp \problem{SubsetSum}$? Schätzen Sie zuerst die
Parameter der jeweils erzeugten Instanz ab.

\bspkopf{Lower Bounds entlang der Kette: $m=4$ durchpropagiert}
\textbf{Instanz.} Eine \problem{3-SAT}-Formel mit $m=4$ Klauseln; die
$O$-Schranken der Reduktionen setzen wir zur Illustration als konkrete Werte
an ($|V|=3m$ usw.):

\smallskip
\begin{center}\small
\begin{tabular}{l l l}
\toprule
Schritt & erzeugte Instanz & Größen bei $m=4$ \\
\midrule
(1) $\problem{3-SAT}\redp k\text{-}\problem{Clique}$ & $|V|=O(m),\ |E|=O(m^2),\ k=m$ & $|V|=12,\ |E|=16,\ k=4$ \\
(2) $k\text{-}\problem{Clique}\redp k\text{-}\problem{IS}$ & $|V'|=|V|,\ k'=k$ (Komplementgraph) & $|V'|=12,\ k'=4$ \\
(3) $\problem{SAT}\redp\problem{3-DM}$ & $|U|=O(m^2),\ |T|=O(m^4)$ & $|U|=16,\ |T|=256$ \\
(4) $\problem{3-DM}\redp\problem{3-EC}$ & $|U|=O(|V|),\ |F|=|T|$ & $|U|=16,\ |F|=256$ \\
(5) $\problem{3-EC}\redp\problem{SubsetSum}$ & $n_{\text{Items}}=|F|$ & $n=256$ \\
\bottomrule
\end{tabular}
\end{center}

\textbf{Kern.} Ein $2^{o(\sqrt[4]{n})}$-Algorithmus für \problem{SubsetSum}
hätte bei $n=256$ den Exponenten $\sqrt[4]{256}=4=m$ -- rückwärts durch die
Kette ergäbe er einen $2^{o(m)}$-Algorithmus für \problem{3-SAT}, den es
unter der ETH (Sparsification-Lemma) nicht gibt. Kein $2^{o(\sqrt[4]{n})}$.


\lsg
Unter der ETH ist \problem{3-SAT} nicht in $2^{o(m)} \cdot |I|^{O(1)}$ lösbar
(Sparsification-Lemma).

\textbf{(1)} Erzeugt $|V| = O(m)$, $|E| = O(m^2)$, $k = m$. Ein
$2^{o(|V|)}$-, $2^{o(\sqrt{|E|})}$- oder $2^{o(k)}$-Algorithmus für
\problem{Clique} ergäbe jeweils $2^{o(m)}$ für \problem{3-SAT} -- Widerspruch.
Bounds: kein $2^{o(|V|)}$, kein $2^{o(\sqrt{|E|})}$, kein $2^{o(k)}$.

\textbf{(2)} Erzeugt $|V'| = |V|$, $|E'| \le |V|^2$. Ein zu schneller
\problem{IS}-Algorithmus ergäbe via Komplementbildung denselben für
\problem{Clique}. Bounds: kein $2^{o(|V'|)}$, kein $2^{o(\sqrt{|E'|})}$.

\textbf{(3)} Erzeugt $|U| = |V| = |W| = O(mn) \subseteq O(m^2)$ und
$|T| = O(m^2 n^2) \subseteq O(m^4)$ (angewandt auf 3-SAT-Instanzen). Ein
$2^{o(\sqrt{|V|})}$-Algorithmus ergäbe $2^{o(m)}$ für \problem{3-SAT}; ebenso
ein $2^{o(\sqrt[4]{|T|})}$-Algorithmus. Bounds: kein $2^{o(\sqrt{|V|})}$, kein
$2^{o(\sqrt[4]{|T|})}$.

\textbf{(4)} 3-DM ist Spezialfall von 3-EC mit $|U| = O(|V|)$ und $|F| = |T|$.
Die Bounds übertragen sich: kein $2^{o(\sqrt{|U|})}$, kein
$2^{o(\sqrt[4]{|F|})}$.

\textbf{(5)} Erzeugt $n_{\text{Items}} = |F|$. Ein
$2^{o(\sqrt[4]{n})}$-Algorithmus für \problem{SubsetSum} ergäbe
$2^{o(\sqrt[4]{|F|})}$ für \problem{3-EC} -- nach (4) verboten. Bound: kein
$2^{o(\sqrt[4]{n})}$. \hfill$\square$
\begin{center}
\begin{tikzpicture}[
  pbox/.style={draw,rounded corners,minimum height=6mm,inner sep=4pt,font=\small},
  plab/.style={font=\scriptsize,align=center},
  blab/.style={font=\scriptsize,align=center,text=black!60}]
  \node[pbox] (sat) at (1.0,0)  {\problem{3-SAT}};
  \node[pbox] (cli) at (5.4,0)  {$k$-\problem{Clique}};
  \node[pbox] (is)  at (10.6,0) {$k$-\problem{IS}};
  \draw[->] (sat) -- node[below,plab] {(1)\quad $|V|{=}O(m)$\\ $|E|{=}O(m^2)$, $k{=}m$} (cli);
  \draw[->] (cli) -- node[below,plab] {(2) Komplement\\ $|V'|{=}|V|$, $|E'|\le|V|^2$} (is);
  \node[blab,anchor=north] at (1.0,-1.0)  {ETH + Sparsif.:\\ kein $2^{o(m)}$};
  \node[blab,anchor=north] at (5.4,-1.0)  {kein $2^{o(|V|)}$, kein $2^{o(\sqrt{|E|})}$,\\ kein $2^{o(k)}$};
  \node[blab,anchor=north] at (10.6,-1.0) {kein $2^{o(|V'|)}$,\\ kein $2^{o(\sqrt{|E'|})}$};
  \node[pbox] (dm) at (4.4,-3.3)  {\problem{3-DM}};
  \node[pbox] (ec) at (7.9,-3.3)  {\problem{3-EC}};
  \node[pbox] (ss) at (11.4,-3.3) {\problem{SubsetSum}};
  \draw[->] (sat.west) -- ++(-0.55,0) |- (dm.west);
  \node[plab,anchor=south west] at (0.1,-3.2)
    {(3) \problem{SAT} $\redp$ \problem{3-DM}, auf 3-SAT:\\
     $|U|{=}|V|{=}|W|{=}O(m^2)$,\\ $|T|{=}O(m^4)$};
  \draw[->] (dm) -- node[below,plab] {(4) Spezialfall\\ $|U|{=}O(|V|)$, $|F|{=}|T|$} (ec);
  \draw[->] (ec) -- node[below,plab] {(5)\\ $n_{\text{Items}}{=}|F|$} (ss);
  \node[blab,anchor=north] at (4.4,-4.3)  {kein $2^{o(\sqrt{|V|})}$,\\ kein $2^{o(\sqrt[4]{|T|})}$};
  \node[blab,anchor=north] at (7.9,-4.3)  {kein $2^{o(\sqrt{|U|})}$,\\ kein $2^{o(\sqrt[4]{|F|})}$};
  \node[blab,anchor=north] at (11.4,-4.3) {kein $2^{o(\sqrt[4]{n})}$};
\end{tikzpicture}
\end{center}

\newpage
% ==================================================================
\katkopf{Lower Bounds: $k$-Color}{Klausur SS24-H, A5a, 5 P.}
Die Reduktion $\problem{3-SAT} \redp k\text{-}\problem{Color}$ erzeugt
$V = \{x_i, \bar x_i, v_i \mid i \in [n]\} \cup \{C_j \mid j \in [m]\} \cup
\{z\}$ mit den Kanten des Vorlesungs-Gadgets. Welche Lower Bounds ergeben sich
unter der ETH bzgl.\ (i) $|V|$ und (ii) $|E|$?

\emph{Hinweis:} Mit dem Sparsification-Lemma ist \problem{3-SAT} unter der ETH
nicht in $2^{o(m)} \cdot |I|^{O(1)}$ lösbar; für 3-SAT-Formeln gilt
$n \le 3m$.

\bspkopf{Lower Bounds $k$-Color: konkrete Zahlen}
\textbf{Instanz.} 3-SAT-Formel mit $n=3$, $m=2$. Die Reduktion erzeugt die
Knotenmenge $V=\{x_i,\bar x_i,v_i \mid i\in[3]\}\cup\{C_1,C_2\}\cup\{z\}$:

\begin{center}
\begin{tikzpicture}[plab/.style={font=\scriptsize,align=center}]
  \node[kndick] (v1) at (0.7,5.0) {$v_1$};
  \node[kndick] (v2) at (3.7,5.0) {$v_2$};
  \node[kndick] (v3) at (6.7,5.0) {$v_3$};
  \draw (v1) -- (v2); \draw (v2) -- (v3);
  \draw (v1) to[bend left=20] (v3);
  \node[knoten] (x1)  at (0.0,2.6) {$x_1$};
  \node[knoten] (nx1) at (1.4,2.6) {$\bar x_1$};
  \node[knoten] (x2)  at (3.0,2.6) {$x_2$};
  \node[knoten] (nx2) at (4.4,2.6) {$\bar x_2$};
  \node[knoten] (x3)  at (6.0,2.6) {$x_3$};
  \node[knoten] (nx3) at (7.4,2.6) {$\bar x_3$};
  \draw (x1) -- (nx1); \draw (x2) -- (nx2); \draw (x3) -- (nx3);
  \foreach \t in {x2,nx2,x3,nx3} \draw[black!45] (v1) -- (\t);
  \foreach \t in {x1,nx1,x3,nx3} \draw[black!45] (v2) -- (\t);
  \foreach \t in {x1,nx1,x2,nx2} \draw[black!45] (v3) -- (\t);
  \node[knoten] (c1) at (2.2,0.2) {$C_1$};
  \node[knoten] (c2) at (5.2,0.2) {$C_2$};
  \draw[black!45] (c1) -- (x1); \draw[black!45] (c1) -- (nx2);
  \draw[black!45] (c1) -- (x3);
  \draw[black!45] (c2) -- (nx1); \draw[black!45] (c2) -- (x2);
  \draw[black!45] (c2) -- (nx3);
  \node[knoten] (z) at (9.0,6.3) {$z$};
  \foreach \t in {v1,v2,v3,c1,c2} \draw[dashed,black!45] (z) -- (\t);
  \node[plab] at (3.8,-0.9)
    {$C_1=(x_1\vee\bar x_2\vee x_3)$, \ $C_2=(\bar x_1\vee x_2\vee\bar x_3)$};
\end{tikzpicture}
\end{center}

\textbf{Kern.} Hier ist $|V| = 3n+m+1 = 12$; wegen $n \le 3m$ gilt allgemein
$|V| = O(m)$. Ein $2^{o(|V|)}$-Algorithmus für $k$-\problem{Color} wäre damit
ein $2^{o(m)}$-Algorithmus für \problem{3-SAT} -- nach dem
Sparsification-Lemma Widerspruch zur ETH. Kein $2^{o(|V|)}$.


\lsg
\textbf{Parameter:} $|V| = 3n + m + 1$; wegen $n \le 3m$ gilt $|V| = O(m)$.
Für die Kanten: $v_i$-Clique und $v_i$-Literal-Kanten $O(n^2)$,
Variablen-Kanten $O(n)$, Klausel-Kanten $O(nm)$, $z$-Kanten $O(n+m)$ --
insgesamt $|E| = O(n^2 + nm + m) = O(m^2)$.
\begin{center}
\begin{tikzpicture}[plab/.style={font=\scriptsize,align=center}]
  \node[kndick] (v1) at (3.2,4.6) {$v_1$};
  \node[kndick] (v2) at (5.2,4.6) {$v_2$};
  \node[kndick] (v3) at (4.2,5.8) {$v_3$};
  \draw (v1) -- (v2); \draw (v2) -- (v3); \draw (v1) -- (v3);
  \node[plab] at (1.4,5.5) {Palette $v_1,\dots,v_n$:\\ Clique};
  \node[knoten] (x1) at (0.6,2.6) {$x_1$};
  \node[knoten] (nx1) at (1.8,2.6) {$\bar x_1$};
  \node[knoten] (x2) at (3.6,2.6) {$x_2$};
  \node[knoten] (nx2) at (4.8,2.6) {$\bar x_2$};
  \node[knoten] (x3) at (6.6,2.6) {$x_3$};
  \node[knoten] (nx3) at (7.8,2.6) {$\bar x_3$};
  \draw (x1) -- (nx1); \draw (x2) -- (nx2); \draw (x3) -- (nx3);
  \node[plab] at (-0.9,3.3) {Variablen-\\Kanten: $O(n)$};
  \draw[black!45] (v1) -- (x2); \draw[black!45] (v1) -- (nx2);
  \draw[black!45] (v1) -- (x3); \draw[black!45] (v1) -- (nx3);
  \node[plab,text=black!60] at (7.4,5.9) {$v_i$--Literal ($j\ne i$),\\ nur $v_1$ gezeigt: $O(n^2)$};
  \node[knoten] (c1) at (5.6,0.3) {$C_1$};
  \draw[black!45] (c1) -- (nx1); \draw[black!45] (c1) -- (x2); \draw[black!45] (c1) -- (nx3);
  \node[plab,text=black!60] at (8.8,0.9) {Klausel-Kanten:\\ $O(n)$ je Klausel, insg.\ $O(nm)$};
  \node[knoten] (z) at (9.0,5.1) {$z$};
  \draw[dashed,black!45] (z) -- (v2);
  \draw[dashed,black!45] (z) -- (c1);
  \node[plab,text=black!60] at (10.0,4.4) {$z$-Kanten:\\ $O(n+m)$};
  \node[plab] at (4.2,-1.1)
    {$|V| = 3n+m+1 = O(m)$, \ $|E| = O(n^2+nm+m) = O(m^2)$
     \ $\Rightarrow$\ kein $2^{o(|V|)}$, kein $2^{o(\sqrt{|E|})}$};
\end{tikzpicture}
\end{center}

\textbf{(i)} Angenommen, $k$-\problem{Color} wäre in
$2^{o(|V|)} \cdot |I|^{O(1)}$ lösbar. Wegen $|V| = O(m)$ ergäbe sich ein
$2^{o(m)}$-Algorithmus für \problem{3-SAT} -- nach dem Sparsification-Lemma nur
möglich, wenn die ETH falsch ist. Bound: kein $2^{o(|V|)}$.

\textbf{(ii)} Angenommen, $k$-\problem{Color} wäre in
$2^{o(\sqrt{|E|})} \cdot |I|^{O(1)}$ lösbar. Wegen $|E| = O(m^2)$ ist
$\sqrt{|E|} = O(m)$ -- es ergäbe sich ein $2^{o(m)}$-Algorithmus für
\problem{3-SAT}. Widerspruch (Sparsification-Lemma). Bound: kein
$2^{o(\sqrt{|E|})}$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{Lower Bounds: $2\,|\,\mathrm{prec}, p_i \in \{1,2\}\,|\,C_{\max}$}{Klausur SS24-H, A5b, 5 P.}
Reduktion von $k$-\problem{Clique}: $n = 4|V| + 3|E|$ Jobs
(Knoten-Jobs $p = 1$, Kanten-Jobs $p = 2$, Dummy-Jobs $p = 1$), Präzedenzen
$(J_i, J_{\{i,j\}})$, Makespan $T = 2|V| + 2|E|$. Nutzen Sie die bekannten
Clique-Bounds (zusammenhängender Graph): kein $2^{o(|V|)}$, kein
$2^{o(\sqrt{|E|})}$. Welche Lower Bounds ergeben sich bzgl.\ (i) $n$ und
(ii) $T$?

\bspkopf{Lower Bounds Scheduling: Dreieck einsetzen}
\textbf{Instanz.} \problem{Clique}-Instanz $K_3$ (zusammenhängend): $|V|=3$,
$|E|=3$. Die Reduktion erzeugt $n = 4|V|+3|E| = 21$ Jobs und den Makespan
$T = 2|V|+2|E| = 12$.

\begin{center}
\begin{tikzpicture}[plab/.style={font=\scriptsize,align=center},
  kjob/.style={draw,rectangle,minimum width=9mm,minimum height=6mm}]
  \node[knoten] (u1) at (0,1.5)    {$1$};
  \node[knoten] (u2) at (1.2,0.4)  {$2$};
  \node[knoten] (u3) at (0,-0.7)   {$3$};
  \draw (u1) -- (u2); \draw (u2) -- (u3); \draw (u1) -- (u3);
  \node[plab] at (0.5,-1.5) {$K_3$};
  \draw[->] (1.9,0.4) -- node[above,plab] {Reduktion} (3.1,0.4);
  \node[knoten] (j1) at (4.6,1.5) {$J_1$};
  \node[knoten] (j2) at (6.8,1.5) {$J_2$};
  \node[knoten] (j3) at (9.0,1.5) {$J_3$};
  \node[kjob] (j13) at (3.5,-0.7) {$J_{\{1,3\}}$};
  \node[kjob] (j12) at (5.7,-0.7) {$J_{\{1,2\}}$};
  \node[kjob] (j23) at (7.9,-0.7) {$J_{\{2,3\}}$};
  \draw[->] (j1) -- (j12); \draw[->] (j2) -- (j12);
  \draw[->] (j2) -- (j23); \draw[->] (j3) -- (j23);
  \draw[->] (j1) -- (j13); \draw[->] (j3) -- (j13);
  \node[plab,anchor=west] at (10.2,0.9)
    {$\circ$ Knoten-Job je $v\in V$: $p=1$\\[1pt]
     $\square$ Kanten-Job je $e\in E$: $p=2$,\\ Vorgänger $J_i \to J_{\{i,j\}}$\\[1pt]
     dazu Dummy-Jobs ($p=1$)};
\end{tikzpicture}
\end{center}

\textbf{Kern.} Wegen $|V| \le |E|+1$ ist $n = O(|E|)$, also
$\sqrt{n} = O(\sqrt{|E|})$. Ein $2^{o(\sqrt{n})}$-Algorithmus für das
Scheduling-Problem wäre damit ein $2^{o(\sqrt{|E|})}$-Algorithmus für
\problem{Clique} -- Widerspruch zur ETH. Kein $2^{o(\sqrt{n})}$.


\lsg
\textbf{Parameter:} Da der Clique-Graph zusammenhängend ist, gilt
$|V| \le |E| + 1$, also $n = 4|V| + 3|E| = O(|E|)$ und ebenso
$T = 2|V| + 2|E| = O(|E|)$.
\begin{center}
\begin{tikzpicture}[plab/.style={font=\scriptsize,align=center},
  kjob/.style={draw,rectangle,minimum width=9mm,minimum height=6mm}]
  \node[knoten] (j1) at (0,2.2) {$J_1$};
  \node[knoten] (j2) at (2.2,2.2) {$J_2$};
  \node[knoten] (j3) at (4.4,2.2) {$J_3$};
  \node[kjob] (j12) at (1.1,0.4) {$J_{\{1,2\}}$};
  \node[kjob] (j23) at (3.3,0.4) {$J_{\{2,3\}}$};
  \draw[->] (j1) -- (j12);
  \draw[->] (j2) -- (j12);
  \draw[->] (j2) -- (j23);
  \draw[->] (j3) -- (j23);
  \node[plab,anchor=west] at (5.6,2.4)
    {$\circ$ Knoten-Job je $v\in V$: $p=1$\\[1pt]
     $\square$ Kanten-Job je $e\in E$: $p=2$,\\ Vorgänger $J_i \to J_{\{i,j\}}$\\[1pt]
     dazu Dummy-Jobs ($p=1$)};
  \node[plab,anchor=west] at (5.6,0.6)
    {$n = 4|V|+3|E| = O(|E|)$\\[1pt] $T = 2|V|+2|E| = O(|E|)$};
  \node[plab,anchor=west,text=black!60] at (5.6,-0.4)
    {kein $2^{o(\sqrt{n})}$, kein $2^{o(\sqrt{T})}$};
\end{tikzpicture}
\end{center}

\textbf{(i)} Angenommen, das Scheduling-Problem wäre in
$2^{o(\sqrt{n})} \cdot |I|^{O(1)}$ lösbar. Wegen $n = O(|E|)$ ist
$\sqrt{n} = O(\sqrt{|E|})$ -- Reduktion $+$ Algorithmus ergäben einen
$2^{o(\sqrt{|E|})}$-Algorithmus für \problem{Clique}, den es unter der ETH
nicht gibt. Bound: kein $2^{o(\sqrt{n})}$.

\textbf{(ii)} Analog mit $T = O(|E|)$: Ein
$2^{o(\sqrt{T})}$-Algorithmus ergäbe $2^{o(\sqrt{|E|})}$ für \problem{Clique}.
Bound: kein $2^{o(\sqrt{T})}$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{Lower Bounds: DominatingSet}{Klausur SS24-N, A5a, 5 P.}
Reduktion $\problem{3-SAT} \redp \problem{DominatingSet}$: pro Variable die
Knoten $x_i, \bar x_i, d_i$ mit Dreieckskanten; pro Klausel ein Knoten $C_j$
mit Kanten zu seinen Literalen. Welche Lower Bounds ergeben sich unter der ETH
bzgl.\ (i) $|V|$ und (ii) $|E|$?

\emph{Hinweis:} Mit dem Sparsification-Lemma ist \problem{3-SAT} unter der ETH
nicht in $2^{o(m)} \cdot |I|^{O(1)}$ lösbar; für 3-SAT-Formeln gilt
$n \le 3m$.

\bspkopf{Lower Bounds DominatingSet: konkrete Instanz}
\textbf{Instanz.} 3-SAT-Formel mit $n=3$, $m=2$. Pro Variable ein Dreieck
$x_i,\bar x_i,d_i$; pro Klausel ein Knoten $C_j$ mit Kanten zu seinen
Literalen.

\begin{center}
\begin{tikzpicture}[plab/.style={font=\scriptsize,align=center}]
  \foreach \i/\xs in {1/0,2/2.8,3/5.6} {
    \node[knoten] (x\i) at (\xs,1.0) {$x_\i$};
    \node[knoten] (nx\i) at (\xs+1.3,1.0) {$\bar x_\i$};
    \node[knoten] (d\i) at (\xs+0.65,2.2) {$d_\i$};
    \draw (x\i)--(nx\i); \draw (x\i)--(d\i); \draw (nx\i)--(d\i);
  }
  \node[knoten] (c1) at (2.0,-0.7) {$C_1$};
  \node[knoten] (c2) at (4.6,-0.7) {$C_2$};
  \draw[black!60] (c1)--(x1); \draw[black!60] (c1)--(nx2); \draw[black!60] (c1)--(x3);
  \draw[black!60] (c2)--(nx1); \draw[black!60] (c2)--(x2); \draw[black!60] (c2)--(nx3);
  \node[plab,anchor=west] at (7.4,1.4)
    {$|V|=3n+m=11$\\[3pt] $|E|=3n+3m=15$\\ (linear in $m$)};
\end{tikzpicture}
\end{center}

\textbf{Kern.} Die Kantenzahl $|E| = 3n+3m = 15$ wächst wegen $n \le 3m$ nur
\emph{linear} in $m$. Ein $2^{o(|E|)}$-Algorithmus (ohne Wurzel) für
\problem{DominatingSet} wäre damit ein $2^{o(m)}$-Algorithmus für
\problem{3-SAT} -- nach dem Sparsification-Lemma Widerspruch zur ETH. Kein
$2^{o(|E|)}$.


\lsg
\textbf{Parameter:} $|V| = 3n + m$; wegen $n \le 3m$ gilt $|V| = O(m)$. Kanten:
$3n$ Dreieckskanten plus höchstens $3m$ Klausel-Literal-Kanten (je Klausel
$\le 3$ Literale), also $|E| = 3n + 3m = O(m)$ -- \emph{linear} in $m$.
\begin{center}
\begin{tikzpicture}[plab/.style={font=\scriptsize,align=center}]
  \foreach \i/\xs in {1/0, 2/2.8, 3/5.6} {
    \node[knoten] (x\i)  at (\xs,1.0) {$x_\i$};
    \node[knoten] (nx\i) at (\xs+1.4,1.0) {$\bar x_\i$};
    \node[knoten] (d\i)  at (\xs+0.7,2.3) {$d_\i$};
    \draw (x\i) -- (nx\i); \draw (x\i) -- (d\i); \draw (nx\i) -- (d\i);
  }
  \node[knoten] (c1) at (2.1,-0.9) {$C_1$};
  \node[knoten] (c2) at (4.9,-0.9) {$C_2$};
  \draw[black!60] (c1) -- (x1); \draw[black!60] (c1) -- (nx2); \draw[black!60] (c1) -- (x3);
  \draw[black!60] (c2) -- (nx1); \draw[black!60] (c2) -- (x2); \draw[black!60] (c2) -- (nx3);
  \node[plab,anchor=west] at (7.6,2.2)
    {je Variable: Dreieck $x_i,\bar x_i,d_i$\\[1pt] je Klausel: $C_j$ --- Kanten zu\\ ihren $\le 3$ Literalen};
  \node[plab,anchor=west] at (7.6,0.9)
    {$|V| = 3n+m = O(m)$\\[1pt] $|E| = 3n+3m = O(m)$ (linear!)};
  \node[plab,anchor=west,text=black!60] at (7.6,-0.2)
    {kein $2^{o(|V|)}$,\\ kein $2^{o(|E|)}$ (ohne Wurzel)};
  \node[plab] at (3.5,-1.9) {$C_1=(x_1\vee\bar x_2\vee x_3)$, $C_2=(\bar x_1\vee x_2\vee\bar x_3)$};
\end{tikzpicture}
\end{center}

\textbf{(i)} Angenommen, \problem{DominatingSet} wäre in
$2^{o(|V|)} \cdot |I|^{O(1)}$ lösbar. Wegen $|V| = O(m)$ ergäbe sich ein
$2^{o(m)}$-Algorithmus für \problem{3-SAT} -- nach dem Sparsification-Lemma
Widerspruch zur ETH. Bound: kein $2^{o(|V|)}$.

\textbf{(ii)} Angenommen, \problem{DominatingSet} wäre in
$2^{o(|E|)} \cdot |I|^{O(1)}$ lösbar. Wegen $|E| = O(m)$ ergäbe sich ebenfalls
ein $2^{o(m)}$-Algorithmus für \problem{3-SAT} -- Widerspruch
(Sparsification-Lemma). Bound: kein $2^{o(|E|)}$ (hier ohne Wurzel, da die
Kantenzahl nur linear wächst). \hfill$\square$

\newpage
% ==================================================================
\katkopf{Lower Bounds: GridTiling}{Klausur SS24-N, A5b, 5 P.}
Reduktion von \problem{Clique} (mit $c \cdot n \le k \le n$ erlaubt):
$S_{i,i} = \{(a,a) \mid a \in V\}$, $S_{i,j} = \{(a,b) \mid a \ne b,\,
\{a,b\} \in E\}$ für $i \ne j$; $k$ übernommen. Welche Lower Bounds ergeben
sich bzgl.\ (i) $X = \sum_{(i,j)} |S_{i,j}|$ und
(ii) $Y = \max_{(i,j)} |S_{i,j}|$?

\bspkopf{Lower Bounds GridTiling: $3\times3$-Instanz}
\textbf{Instanz.} \problem{Clique}-Instanz mit $N=|V|=4$, $|E|=5$, $k=3$. Die
Reduktion baut ein $k\times k=3\times3$-Gitter aus Mengen $S_{i,j}$:

\begin{center}
\begin{tikzpicture}[
  cell/.style={draw,minimum width=13mm,minimum height=10mm,font=\small},
  dcell/.style={cell,fill=black!12}]
  \foreach \i in {1,2,3} \foreach \j in {1,2,3} {
    \ifnum\i=\j
      \node[dcell] at (1.5*\j,-1.15*\i) {$4$};
    \else
      \node[cell] at (1.5*\j,-1.15*\i) {$10$};
    \fi
  }
  \foreach \j in {1,2,3} \node[font=\scriptsize] at (1.5*\j,-0.45) {$j=\j$};
  \foreach \i in {1,2,3} \node[font=\scriptsize] at (0.55,-1.15*\i) {$i=\i$};
  \node[font=\scriptsize,align=left,anchor=west] at (5.7,-2.3)
    {grau (Diagonale): $|S_{i,i}|=N=4$\\[3pt]
     weiß: $|S_{i,j}|=2|E|=10$\\[3pt]
     $3\times3$-Gitter, $k=3=\Theta(N)$};
\end{tikzpicture}
\end{center}

\textbf{Kern.} Hier ist $X=\sum_{(i,j)}|S_{i,j}| = 3\cdot 4+6\cdot 10 = 72$;
allgemein $X = O(N^4)$, also $\sqrt[4]{X} = O(N)$. Ein
$2^{o(\sqrt[4]{X})}$-Algorithmus für \problem{GridTiling} wäre damit ein
$2^{o(N)}$-Algorithmus für \problem{Clique} -- Widerspruch zur ETH. Kein
$2^{o(\sqrt[4]{X})}$.


\lsg
\textbf{Parameter} (mit $N := |V|$, $k = \Theta(N)$): Diagonale Mengen haben
$N$ Tupel, Nebendiagonal-Mengen $2|E| \le N^2$ Tupel. Also
$X \le k \cdot N + k^2 \cdot N^2 = O(N^4)$ und $Y \le \max(N,\, N^2) = O(N^2)$.
\begin{center}
\begin{tikzpicture}[plab/.style={font=\scriptsize,align=center},
  cell/.style={draw,minimum width=34mm,minimum height=11mm,font=\scriptsize},
  dcell/.style={cell,fill=black!8}]
  \foreach \i in {1,2,3} \foreach \j in {1,2,3} {
    \ifnum\i=\j
      \node[dcell] at (3.55*\j,-1.3*\i) {$\{(a,a)\mid a\in V\}$};
    \else
      \node[cell]  at (3.55*\j,-1.3*\i) {$\{(a,b)\mid \{a,b\}\in E\}$};
    \fi
  }
  \foreach \j in {1,2,3} \node[plab] at (3.55*\j,-0.4) {$j=\j$};
  \foreach \i in {1,2,3} \node[plab] at (1.4,-1.3*\i) {$i=\i$};
  \node[plab] at (7.1,0.25) {$k\times k$ Zellen (hier $k=3$), \ $k$ von \problem{Clique} \"ubernommen, $k=\Theta(N)$, $N=|V|$};
  \node[plab] at (7.1,-5.05)
    {$|S_{i,i}| = N$, \ $|S_{i,j}| = 2|E| \le N^2$ \ $\Rightarrow$ \
     $X = \sum_{(i,j)}|S_{i,j}| = O(N^4)$, \ $Y = \max_{(i,j)}|S_{i,j}| = O(N^2)$};
  \node[plab,text=black!60] at (7.1,-5.7)
    {kein $2^{o(\sqrt[4]{X})}$, \ kein $2^{o(\sqrt{Y})}$};
\end{tikzpicture}
\end{center}

\textbf{(i)} Angenommen, \problem{GridTiling} wäre in
$2^{o(\sqrt[4]{X})} \cdot |I|^{O(1)}$ lösbar. Wegen $X = O(N^4)$ ist
$\sqrt[4]{X} = O(N)$ -- es ergäbe sich ein $2^{o(N)}$-Algorithmus für
\problem{Clique}, den es unter der ETH nicht gibt. Bound: kein
$2^{o(\sqrt[4]{X})}$.

\textbf{(ii)} Angenommen, \problem{GridTiling} wäre in
$2^{o(\sqrt{Y})} \cdot |I|^{O(1)}$ lösbar. Wegen $Y = O(N^2)$ ist
$\sqrt{Y} = O(N)$ -- wieder ein $2^{o(N)}$-Algorithmus für \problem{Clique}.
Widerspruch. Bound: kein $2^{o(\sqrt{Y})}$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{Lower Bounds: SubsetSum (strenge Reduktion)}{Klausur SS23-H, A6b, 8 P.}
Reduktion $\problem{3-SAT} \redp \problem{SubsetSum}$ mit Dezimalziffern: pro
Variable zwei Items $a_i, b_i$ ($s = 10^{i-1} + \sum 10^{n+j-1}$ über die
Klauseln mit $x_i$ bzw.\ $\bar x_i$), pro Klausel zwei Items
$c_j, d_j$ mit $s = 10^{n+j-1}$; Ziel
$B = \sum_j 3 \cdot 10^{n+j-1} + \sum_i 10^{i-1}$. Welche Lower Bounds ergeben
sich bzgl.\ (i) der Anzahl unterschiedlicher Itemgrößen $d$ und (ii) der
Kodierungslänge $L = \log \Delta$ der größten Itemgröße?

\emph{Hinweis:} Mit dem Sparsification-Lemma ist \problem{3-SAT} unter der ETH
nicht in $2^{o(m)} \cdot |I|^{O(1)}$ lösbar; für 3-SAT-Formeln gilt
$n \le 3m$.

\bspkopf{Lower Bounds SubsetSum: Parameter der $n{=}3,m{=}2$-Instanz}
\textbf{Instanz.} 3-SAT-Formel mit $n=3$, $m=2$:
$\varphi=(x_1\vee x_2\vee x_3)\wedge(\bar x_1\vee\bar x_2\vee x_3)$. Die
Reduktion erzeugt $2n+2m = 10$ Items.

\textbf{Kern.} Die Klausel-Items $c_j,d_j$ teilen sich je eine Größe, also
gibt es nur $d \le 2n+m = 8$ verschiedene Itemgrößen. Wegen $n \le 3m$ ist
$d = O(m)$. Ein $2^{o(d)}$-Algorithmus für \problem{SubsetSum} wäre damit ein
$2^{o(m)}$-Algorithmus für \problem{3-SAT} -- nach dem Sparsification-Lemma
Widerspruch zur ETH. Kein $2^{o(d)}$.


\lsg
\textbf{Parameter:} Es gibt $2n + 2m$ Items; die Klausel-Items $c_j, d_j$
teilen sich je eine Größe, also $d \le 2n + m$. Wegen $n \le 3m$ gilt
$d = O(m)$. Die größte Größe ist $\Delta < 10^{n+m+1}$, also
$L = \log \Delta = O(n + m) = O(m)$.
\begin{center}
\small
Beispiel $n=3$, $m=2$: \ $\varphi = \underbrace{(x_1\vee x_2\vee x_3)}_{C_1}
\wedge \underbrace{(\bar x_1\vee\bar x_2\vee x_3)}_{C_2}$

\smallskip
\newcommand{\gz}{\textcolor{black!40}{0}}
\begin{tabular}{l c c c c c l}
\toprule
Item & $10^4$ ($C_2$) & $10^3$ ($C_1$) & $10^2$ ($x_3$) & $10^1$ ($x_2$) & $10^0$ ($x_1$) & \\
\midrule
$a_1$ ($x_1$)      & \gz & 1   & \gz & \gz & 1   & $10^{0}+10^{3}$ \\
$b_1$ ($\bar x_1$) & 1   & \gz & \gz & \gz & 1   & $10^{0}+10^{4}$ \\
$a_2$ ($x_2$)      & \gz & 1   & \gz & 1   & \gz & $10^{1}+10^{3}$ \\
$b_2$ ($\bar x_2$) & 1   & \gz & \gz & 1   & \gz & $10^{1}+10^{4}$ \\
$a_3$ ($x_3$)      & 1   & 1   & 1   & \gz & \gz & $10^{2}+10^{3}+10^{4}$ \\
$b_3$ ($\bar x_3$) & \gz & \gz & 1   & \gz & \gz & $10^{2}$ \\
$c_1 = d_1$        & \gz & 1   & \gz & \gz & \gz & $10^{3}$ (je zweimal) \\
$c_2 = d_2$        & 1   & \gz & \gz & \gz & \gz & $10^{4}$ (je zweimal) \\
\midrule
$B$                & 3   & 3   & 1   & 1   & 1   & Ziel \\
\bottomrule
\end{tabular}

\smallskip
{\scriptsize $2n+2m$ Items, aber $d \le 2n+m = O(m)$ Größen;
$\Delta < 10^{n+m+1}$, also $L = \log\Delta = O(m)$
\ $\Rightarrow$\ \textcolor{black!60}{kein $2^{o(d)}$, kein $2^{o(L)}$}}
\end{center}

\textbf{(i)} Angenommen, \problem{SubsetSum} wäre in
$2^{o(d)} \cdot |I|^{O(1)}$ lösbar. Wegen $d = O(m)$ ergäbe Reduktion $+$
Algorithmus einen $2^{o(m)}$-Algorithmus für \problem{3-SAT} -- nach dem
Sparsification-Lemma Widerspruch zur ETH. Bound: kein $2^{o(d)}$.

\textbf{(ii)} Angenommen, \problem{SubsetSum} wäre in
$2^{o(L)} \cdot |I|^{O(1)}$ lösbar. Wegen $L = O(m)$ ergäbe sich ebenso ein
$2^{o(m)}$-Algorithmus für \problem{3-SAT} -- Widerspruch
(Sparsification-Lemma). Bound: kein $2^{o(L)}$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{Lower Bounds: SetCover}{Klausur SS23-N, A6a, 5 P.}
Gegeben: \problem{HittingSet} ist unter der ETH nicht in
$2^{o(r')} \langle I\rangle^{O(1)}$ und nicht in
$2^{o(|U'|)} \langle I\rangle^{O(1)}$ lösbar. Die Reduktion
$\problem{SetCover} \redp \problem{HittingSet}$ vertauscht die Rollen:
$U' = \{1, \dots, r\}$ und pro $w \in U$ die Menge
$F_w' = \{v \mid w \in F_v\}$, $k' = k$. Welche Lower Bounds ergeben sich für
\problem{SetCover} bzgl.\ (i) $|U|$ und (ii) $r$?

\bspkopf{Lower Bounds SetCover: Rollentausch konkret}
\textbf{Instanz.} \problem{SetCover}-Instanz mit $|U|=3$ Elementen, $r=2$
Mengen und $k=1$. Der involutorische Rollentausch $F'_w=\{v \mid w\in F_v\}$,
$U'=\{1,\dots,r\}$ liefert die \problem{HittingSet}-Instanz:

\begin{center}
\begin{tikzpicture}[plab/.style={font=\scriptsize,align=center},
  sbox/.style={draw,rounded corners,inner sep=3pt,font=\small}]
  \node[plab] at (1.3,3.1) {\problem{SetCover}\\ $U,\{F_1,F_2\},k{=}1$};
  \foreach \y/\l in {2.2/{w_1},1.4/{w_2},0.6/{w_3}} {
    \fill (0,\y) circle (1.6pt); \node[left,font=\small] at (-0.1,\y) {$\l$}; }
  \node[sbox] (f1) at (2.4,1.8) {$F_1$};
  \node[sbox] (f2) at (2.4,1.0) {$F_2$};
  \draw[black!60] (f1.west)--(0.1,2.2); \draw[black!60] (f1.west)--(0.1,1.4);
  \draw[black!60] (f2.west)--(0.1,1.4); \draw[black!60] (f2.west)--(0.1,0.6);
  \draw[<->,thick] (3.4,1.4) -- (5.6,1.4);
  \node[plab] at (4.5,1.8) {Rollentausch\\ (involutorisch)};
  \node[plab] at (8.4,3.1) {\problem{HittingSet}\\ $U'{=}\{1,2\},\{F'_w\},k'{=}1$};
  \foreach \y/\l in {1.8/{1},1.0/{2}} {
    \fill (6.2,\y) circle (1.6pt); \node[left,font=\small] at (6.1,\y) {$\l$}; }
  \node[sbox] (g1) at (8.9,2.2) {$F'_{w_1}$};
  \node[sbox] (g2) at (8.9,1.4) {$F'_{w_2}$};
  \node[sbox] (g3) at (8.9,0.6) {$F'_{w_3}$};
  \draw[black!60] (g1.west)--(6.3,1.8);
  \draw[black!60] (g2.west)--(6.3,1.8); \draw[black!60] (g2.west)--(6.3,1.0);
  \draw[black!60] (g3.west)--(6.3,1.0);
\end{tikzpicture}
\end{center}

\textbf{Kern.} Es entsteht eine \problem{HittingSet}-Instanz mit $r'=|U|=3$
Mengen und $|U'|=r=2$ Elementen. Ein $2^{o(|U|)}$-Algorithmus für
\problem{SetCover} wäre via Rollentausch ein $2^{o(r')}$-Algorithmus für
\problem{HittingSet} -- den es unter der ETH nicht gibt. Kein $2^{o(|U|)}$.


\lsg
Die Abbildung ist involutorisch (Elemente und Mengen tauschen die Plätze;
zweimal angewandt entsteht die Ausgangsinstanz). Sie ist damit zugleich eine
Reduktion $\problem{HittingSet} \redp \problem{SetCover}$, bei der aus einer
HittingSet-Instanz mit Universum $U'$ und $r'$ Mengen eine SetCover-Instanz mit
$|U| = r'$ und $r = |U'|$ entsteht.
\begin{center}
\begin{tikzpicture}[plab/.style={font=\scriptsize,align=center},
  sbox/.style={draw,rounded corners,inner sep=3.5pt,font=\small}]
  \node[plab] at (1.4,3.2) {\problem{SetCover} $(U,\{F_1,\dots,F_r\},k)$};
  \foreach \y/\l in {2.3/{w_1}, 1.5/{w_2}, 0.7/{w_3}} {
    \fill (0,\y) circle (1.6pt); \node[left,font=\small] at (-0.15,\y) {$\l$};
  }
  \node[sbox] (f1) at (2.6,1.9) {$F_1$};
  \node[sbox] (f2) at (2.6,1.1) {$F_2$};
  \draw[black!60] (f1.west) -- (0.12,2.3);
  \draw[black!60] (f1.west) -- (0.12,1.5);
  \draw[black!60] (f2.west) -- (0.12,1.5);
  \draw[black!60] (f2.west) -- (0.12,0.7);
  \draw[<->,thick] (3.6,1.5) -- (6.0,1.5);
  \node[plab] at (4.8,1.9) {Rollentausch};
  \node[plab] at (4.8,1.0) {involutorisch:\\ zweimal $=$ Identität};
  \node[plab] at (8.6,3.2) {\problem{HittingSet} $(U'{=}\{1,\dots,r\},\{F'_w\},k'{=}k)$};
  \foreach \y/\l in {1.9/{1}, 1.1/{2}} {
    \fill (6.8,\y) circle (1.6pt); \node[left,font=\small] at (6.65,\y) {$\l$};
  }
  \node[sbox] (g1) at (9.6,2.3) {$F'_{w_1}$};
  \node[sbox] (g2) at (9.6,1.5) {$F'_{w_2}$};
  \node[sbox] (g3) at (9.6,0.7) {$F'_{w_3}$};
  \draw[black!60] (g1.west) -- (6.92,1.9);
  \draw[black!60] (g2.west) -- (6.92,1.9);
  \draw[black!60] (g2.west) -- (6.92,1.1);
  \draw[black!60] (g3.west) -- (6.92,1.1);
  \node[plab] at (5.5,-0.4)
    {$F'_w = \{v \mid w\in F_v\}$: \ aus $(U',r')$ wird $|U| = r'$, $r = |U'|$
     \ $\Rightarrow$\ \textcolor{black!60}{kein $2^{o(|U|)}$, kein $2^{o(r)}$}};
\end{tikzpicture}
\end{center}

\textbf{(i)} Angenommen, \problem{SetCover} wäre in
$2^{o(|U|)} \langle I\rangle^{O(1)}$ lösbar. Über die Reduktion entstünde ein
Algorithmus für \problem{HittingSet} in
$2^{o(r')} \langle I\rangle^{O(1)}$ -- den es unter der ETH nicht gibt.
Bound: kein $2^{o(|U|)}$.

\textbf{(ii)} Angenommen, \problem{SetCover} wäre in
$2^{o(r)} \langle I\rangle^{O(1)}$ lösbar. Über die Reduktion entstünde ein
$2^{o(|U'|)}$-Algorithmus für \problem{HittingSet} -- auch den gibt es unter
der ETH nicht. Bound: kein $2^{o(r)}$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{Lower Bounds: ILP-Feasibility}{Klausur SS23-N, A6b, 5 P.}
Reduktion $\problem{3-SAT} \redp \problem{ILP-Feasibility}$: $N = 2n$
ILP-Variablen (eine pro Literal); pro Klausel $C_i$ die Ungleichung
$-\sum_{\ell \in C_i} x_\ell \le -1$; pro Variable $v$ die Ungleichungen
$x_v + x_{\bar v} \le 1$ und $-x_v - x_{\bar v} \le -1$. Welche Lower Bounds
ergeben sich bzgl.\ (i) $M$ (Zeilenzahl) und (ii) $N$ (Spaltenzahl)?

\emph{Hinweis:} Unter der ETH ist \problem{3-SAT} nicht in
$2^{o(n)} \cdot |I|^{O(1)}$ lösbar; mit dem Sparsification-Lemma auch nicht in
$2^{o(m)} \cdot |I|^{O(1)}$. Für 3-SAT-Formeln gilt $n \le 3m$.

\bspkopf{Lower Bounds ILP-Feasibility: Ungleichungen einsetzen}
\textbf{Instanz.} 3-SAT-Formel mit $n=3$, $m=2$: $C_1=(x_1\vee x_2\vee x_3)$,
$C_2=(\bar x_1\vee x_2\vee\bar x_3)$. Pro Literal eine $0/1$-Variable, also
$N=2n=6$ Spalten; die Reduktion erzeugt die Ungleichungen
\[
\begin{aligned}
&\text{je Klausel:} && -\,(x_{x_1}+x_{x_2}+x_{x_3}) \le -1,\quad
   -\,(x_{\bar x_1}+x_{x_2}+x_{\bar x_3}) \le -1;\\[2pt]
&\text{je Variable } v:&& x_{x_v}+x_{\bar x_v}\le 1,\quad
   -\,x_{x_v}-x_{\bar x_v}\le -1 \quad (v=1,2,3).
\end{aligned}
\]

\textbf{Kern.} Das sind $M = m+2n = 8$ Zeilen; wegen $n \le 3m$ ist
$M = O(m)$. Ein $2^{o(M)}$-Algorithmus für \problem{ILP-Feasibility} wäre
damit ein $2^{o(m)}$-Algorithmus für \problem{3-SAT} -- nach dem
Sparsification-Lemma Widerspruch zur ETH. Kein $2^{o(M)}$.


\lsg
\textbf{Parameter:} $M = m + 2n$; wegen $n \le 3m$ gilt $M = O(m)$. Und
$N = 2n$.
\begin{center}
\begin{tikzpicture}[plab/.style={font=\scriptsize,align=center}]
  \draw (0,0) rectangle (6.4,2.6);
  \draw[dashed,black!50] (0,1.6) -- (6.4,1.6);
  \node[plab] at (3.2,2.05)
    {$m$ Klausel-Zeilen:\\ $-\sum_{\ell\in C_j} x_\ell \le -1$};
  \node[plab] at (3.2,0.75)
    {$2n$ Variablen-Zeilen:\\ $x_v + x_{\bar v} \le 1$ \ und \
     $-x_v - x_{\bar v} \le -1$};
  \node[plab] at (3.2,3.0) {$N = 2n$ Spalten: eine $0/1$-Variable je Literal};
  \draw[black!60] (-0.2,0) -- (-0.35,0) -- (-0.35,2.6) -- (-0.2,2.6);
  \node[plab,rotate=90] at (-0.7,1.3) {$M = m + 2n$ Zeilen};
\end{tikzpicture}
\end{center}

\textbf{(i)} Angenommen, \problem{ILP-Feasibility} wäre in
$2^{o(M)} \langle I\rangle^{O(1)}$ lösbar. Wegen $M = O(m)$ ergäbe Reduktion
$+$ Algorithmus einen $2^{o(m)}$-Algorithmus für \problem{3-SAT} -- nach dem
Sparsification-Lemma Widerspruch zur ETH. Bound: kein $2^{o(M)}$.

\textbf{(ii)} Angenommen, \problem{ILP-Feasibility} wäre in
$2^{o(N)} \langle I\rangle^{O(1)}$ lösbar. Wegen $N = 2n$ ergäbe sich ein
$2^{o(n)}$-Algorithmus für \problem{3-SAT} -- direkter Widerspruch zur ETH.
Bound: kein $2^{o(N)}$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{Lower Bounds: NAE-4-SAT und SetSplitting}{Klausur SS25-H, A4, 1+4+1+4 P.}
\textbf{\problem{NAE-4-SAT}.}
\textbf{Gegeben:} $n$ Variablen $x_1, \dots, x_n$ und $m$ Klauseln
$C_1, \dots, C_m$ mit $|C_i| \le 4$.
\textbf{Entscheide:} Gibt es eine Belegung, unter der jede Klausel zwei
\emph{verschieden} belegte Literale enthält?

Reduktion von \problem{3-SAT}: Die Variablen sind $x_1, \dots, x_n$ und eine
frische Variable $w$. Jede Klausel $C_i$ wird zu $C_i \cup \{w\}$.
\begin{enumerate}
\item[a)] Geben Sie die Anzahl der Variablen und die Anzahl der Klauseln der
NAE-4-SAT-Instanz in Abhängigkeit von der 3-SAT-Instanz an.
\item[b)] Beweisen Sie Lower Bounds für \problem{NAE-4-SAT} bezüglich der
Anzahl der Variablen und der Anzahl der Klauseln basierend auf der ETH und
der oben beschriebenen Reduktion.
\end{enumerate}

\textbf{\problem{SetSplitting}.}
\textbf{Gegeben:} Eine Grundmenge $S$ und Teilmengen
$F_1, \dots, F_r \subseteq S$.
\textbf{Entscheide:} Gibt es eine Partition $S = S_1 \mathbin{\dot\cup} S_2$,
sodass jede Teilmenge $F_i$ sowohl $S_1$ als auch $S_2$ schneidet?

Reduktion von \problem{NAE-4-SAT}: Grundmenge
$S = \{x_i, \bar x_i \mid i \in [n]\}$; als Teilmengen pro Variable das Paar
$\{x_i, \bar x_i\}$ und pro Klausel die Menge $C_i$.
\begin{enumerate}
\item[c)] Geben Sie die Größe der Grundmenge $S$ und die Anzahl der
Teilmengen $r$ der SetSplitting-Instanz in Abhängigkeit von der
NAE-4-SAT-Instanz an.
\item[d)] Beweisen Sie Lower Bounds für \problem{SetSplitting} bezüglich der
Größe der Grundmenge und der Anzahl der Teilmengen basierend auf der ETH und
der oben beschriebenen Reduktion.
\end{enumerate}

\bspkopf{Lower Bounds NAE-4-SAT und SetSplitting: Kette einsetzen}
\textbf{Instanz.} 3-SAT-Formel mit $n=3$ Variablen und $m=2$ Klauseln. Die
erste Reduktion hängt die frische Variable $w$ an jede Klausel an
($n'=n+1=4$, $m'=m=2$); die zweite liefert die Grundmenge
$S=\{x_i,\bar x_i \mid i\in[3]\}\cup\{w,\bar w\}$ mit $|S|=2n'=8$ und
$r=n'+m'=6$ Mengen.

\textbf{Kern.} Wegen $|S| = 2n' = 2(n+1)$ wäre ein $2^{o(|S|)}$-Algorithmus
für \problem{SetSplitting} ein $2^{o(n')}$-Algorithmus für
\problem{NAE-4-SAT} und damit ein $2^{o(n)}$-Algorithmus für
\problem{3-SAT} -- direkter Widerspruch zur ETH. Kein $2^{o(|S|)}$.


\lsg
\textbf{a)} Variablen $n' = n + 1$, Klauseln $m' = m$.

\textbf{b)} Zu zeigen ist, dass \problem{NAE-4-SAT} unter der ETH weder in
$2^{o(n')} \cdot |I|^{O(1)}$ noch in $2^{o(m')} \cdot |I|^{O(1)}$ lösbar ist.

\textbf{Bzgl.\ $n'$:}
\begin{itemize}
\item Angenommen, \problem{NAE-4-SAT} wäre in $2^{o(n')} \cdot |I|^{O(1)}$
lösbar.
\item Wegen $n' = n + 1$ ergäben Reduktion und Algorithmus einen
$2^{o(n)}$-Algorithmus für \problem{3-SAT}.
\item Das ist ein direkter Widerspruch zur ETH.
\end{itemize}

\textbf{Bzgl.\ $m'$:}
\begin{itemize}
\item Angenommen, \problem{NAE-4-SAT} wäre in $2^{o(m')} \cdot |I|^{O(1)}$
lösbar.
\item Wegen $m' = m$ ergäbe sich ein $2^{o(m)}$-Algorithmus für
\problem{3-SAT}.
\item Nach dem Sparsification-Lemma ist das ein Widerspruch zur ETH.
\end{itemize}
Bounds: kein $2^{o(n')}$, kein $2^{o(m')}$.

\textbf{c)} Mit $n'$ Variablen und $m'$ Klauseln der NAE-Instanz:
$|S| = 2n'$, $r = n' + m'$.
\begin{center}
\begin{tikzpicture}[plab/.style={font=\scriptsize,align=center}]
  \draw[dashed,black!60] (-0.5,0) -- (8.6,0);
  \node[font=\small] at (8.9,0.9)  {$S_1$};
  \node[font=\small] at (8.9,-0.9) {$S_2$};
  \foreach \x/\lo/\lu in {0.9/{x_1}/{\bar x_1}, 2.7/{\bar x_2}/{x_2}, 4.5/{x_3}/{\bar x_3}, 7.4/{w}/{\bar w}} {
    \fill (\x,0.75) circle (1.6pt);
    \fill (\x,-0.75) circle (1.6pt);
    \node[font=\scriptsize] at (\x,1.05) {$\lo$};
    \node[font=\scriptsize] at (\x,-1.05) {$\lu$};
  }
  \foreach \x in {0.9,2.7,4.5,7.4}
    \draw[black!55] (\x,0) ellipse (0.44 and 1.6);
  \node[plab,text=black!60] at (0.9,-2.0) {$\{x_i,\bar x_i\}$\\ je Variable (und $w$)};
  \draw[densely dashed,thick,rounded corners=6pt]
    (0.55,1.28) -- (2.35,1.28) -- (2.35,0.6) -- (3.05,0.6) -- (3.05,1.28)
    -- (7.75,1.28) -- (7.75,0.45) -- (3.05,0.45) -- (3.05,-1.25)
    -- (2.35,-1.25) -- (2.35,0.45) -- (0.55,0.45) -- cycle;
  \node[plab] at (5.6,-2.0) {$C_1' = \{x_1,x_2,x_3,w\}$:\\ je Klausel eine Menge};
  \node[plab] at (4.1,-2.9)
    {$|S| = 2n'$, \ $r = n'+m'$ Mengen; \ jede Menge schneidet $S_1$ und $S_2$
     \ $\Rightarrow$\ \textcolor{black!60}{kein $2^{o(|S|)}$, kein $2^{o(r)}$}};
\end{tikzpicture}
\end{center}

\textbf{d)} Zu zeigen ist, dass \problem{SetSplitting} unter der ETH weder
in $2^{o(|S|)} \cdot |I|^{O(1)}$ noch in $2^{o(r)} \cdot |I|^{O(1)}$ lösbar
ist.

\textbf{Bzgl.\ $|S|$:}
\begin{itemize}
\item Angenommen, \problem{SetSplitting} wäre in
$2^{o(|S|)} \cdot |I|^{O(1)}$ lösbar.
\item Wegen $|S| = 2n'$ ergäbe sich ein $2^{o(n')}$-Algorithmus für
\problem{NAE-4-SAT}.
\item Wegen $n' = n + 1$ ergäbe sich daraus ein $2^{o(n)}$-Algorithmus für
\problem{3-SAT}.
\item Das ist ein direkter Widerspruch zur ETH.
\end{itemize}

\textbf{Bzgl.\ $r$:}
\begin{itemize}
\item Angenommen, \problem{SetSplitting} wäre in $2^{o(r)} \cdot |I|^{O(1)}$
lösbar.
\item Jede NAE-Klausel hat höchstens 4 Literale, also
$n' \le 4m' + 1 = O(m')$.
\item Damit ist $r = n' + m' = O(m')$.
\item Es ergäbe sich ein $2^{o(m')}$-Algorithmus für \problem{NAE-4-SAT}.
\item Wegen $m' = m$ ergäbe sich daraus ein $2^{o(m)}$-Algorithmus für
\problem{3-SAT}.
\item Nach dem Sparsification-Lemma ist das ein Widerspruch zur ETH.
\end{itemize}
Bounds: kein $2^{o(|S|)}$, kein $2^{o(r)}$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{Lower Bounds: CoverClique und $\Delta$Cover}{Klausur SS25-N, A4, 1+4+1+4 P.}
\textbf{\problem{CoverClique}.}
\textbf{Gegeben:} Ein ungerichteter Graph $G = (V, E)$ und eine Zahl
$k \in \mathbb{N}_{\ge 1}$.
\textbf{Entscheide:} Existieren $k$ paarweise disjunkte Cliquen
$C_1, \dots, C_k \subseteq V$, die alle Knoten überdecken?

Reduktion von $k$-\problem{Color}: Aus $(G, k)$ wird $(G' = (V, \bar E), k)$
mit dem Komplementgraphen, also
$\bar E = \{\{v, u\} \mid v \ne u,\ \{v, u\} \notin E\}$.
\begin{enumerate}
\item[a)] Geben Sie die Anzahl der Knoten und die Anzahl der Kanten der
CoverClique-Instanz in Abhängigkeit von der $k$-Color-Instanz an.
\item[b)] Beweisen Sie Laufzeit-Lower-Bounds für \problem{CoverClique}
bezüglich der Anzahl der Knoten und der Anzahl der Kanten basierend auf der
ETH und der oben beschriebenen Reduktion.
\end{enumerate}
\emph{Hinweis:} $k$-\problem{Color} ist unter der ETH nicht in
$2^{o(|V|)} \cdot |I|^{O(1)}$ lösbar.

\textbf{$\Delta$\problem{Cover}.}
\textbf{Gegeben:} Ein ungerichteter Graph $G = (V, E)$ und eine Zahl
$k \in \mathbb{N}_0$.
\textbf{Entscheide:} Gibt es eine Dreiecksüberdeckung $C_\Delta \subseteq V$
mit $|C_\Delta| \le k$, also eine Knotenmenge, die jedes Dreieck in $G$
trifft?

Reduktion von \problem{VertexCover} (aus der Übung):
$V' = V \cup \{v_e \mid e \in E\}$ und
$E' = E \cup \{\{v_e, e_1\}, \{v_e, e_2\} \mid e = \{e_1, e_2\} \in E\}$.
\begin{enumerate}
\item[c)] Geben Sie die Anzahl der Knoten und die Anzahl der Kanten der
$\Delta$Cover-Instanz in Abhängigkeit von der VertexCover-Instanz an.
\item[d)] Beweisen Sie Laufzeit-Lower-Bounds für $\Delta$\problem{Cover}
bezüglich der Anzahl der Knoten und der Anzahl der Kanten basierend auf der
ETH und der oben beschriebenen Reduktion.
\end{enumerate}

\bspkopf{Lower Bounds CoverClique und $\Delta$Cover: Mini-Gadgets}
\textbf{Instanz.} Für \problem{CoverClique} die $k$-\problem{Color}-Instanz
$G=C_4$ mit $k=2$ (Reduktion: Komplement $\bar G$), für
$\Delta$\problem{Cover} die \problem{VertexCover}-Instanz mit der Kante
$\{u,v\}$ (Reduktion: je Kante ein Dreieck mit neuem Knoten $v_e$).

\begin{center}
\begin{tikzpicture}[plab/.style={font=\scriptsize,align=center},
  mini/.style={circle,draw,inner sep=1.8pt}]
  \node[plab] at (1.5,2.7) {$k$-\problem{Color} $\redp$ \problem{CoverClique}};
  \node[mini,label=left:{\scriptsize 1}] (a) at (0.6,2) {};
  \node[mini,label=right:{\scriptsize 2}] (b) at (1.8,2) {};
  \node[mini,label=right:{\scriptsize 3}] (c) at (1.8,0.9) {};
  \node[mini,label=left:{\scriptsize 4}] (d) at (0.6,0.9) {};
  \draw (a)--(b)--(c)--(d)--(a);
  \node[plab] at (1.2,0.3) {$G=C_4$};
  \draw[->] (2.5,1.45)--node[above,plab]{Kompl.}(3.5,1.45);
  \node[mini,label=left:{\scriptsize 1}] (a2) at (4.0,2) {};
  \node[mini,label=right:{\scriptsize 2}] (b2) at (5.2,2) {};
  \node[mini,label=right:{\scriptsize 3}] (c2) at (5.2,0.9) {};
  \node[mini,label=left:{\scriptsize 4}] (d2) at (4.0,0.9) {};
  \draw (a2)--(c2); \draw (b2)--(d2);
  \node[plab] at (4.6,0.3) {$\bar G$};
  \node[plab] at (2.9,-0.55) {$|V'|{=}4$, $|\bar E|{=}2$};
  \node[plab] at (9.0,2.7) {\problem{VertexCover} $\redp$ $\Delta$\problem{Cover}};
  \node[mini,label=below:{\scriptsize $u$}] (u1) at (7.4,1.3) {};
  \node[mini,label=below:{\scriptsize $v$}] (v1) at (8.6,1.3) {};
  \draw (u1)--(v1);
  \draw[->] (9.0,1.3)--node[above,plab]{je Kante}(10.0,1.3);
  \node[mini,label=below:{\scriptsize $u$}] (u2) at (10.4,1.0) {};
  \node[mini,label=below:{\scriptsize $v$}] (v2) at (11.6,1.0) {};
  \node[mini,label=above:{\scriptsize $v_e$}] (w2) at (11.0,2.0) {};
  \draw (u2)--(v2)--(w2)--(u2);
  \node[plab] at (10.8,-0.55) {$|V'|{=}3$, $|E'|{=}3$};
\end{tikzpicture}
\end{center}

\textbf{Kern.} Wegen $|V'|=|V|=4$ wäre ein $2^{o(|V'|)}$-Algorithmus für
\problem{CoverClique} ein $2^{o(|V|)}$-Algorithmus für $k$-\problem{Color} --
Widerspruch zur ETH. Wegen $|E'|=3|E|=3$ wäre ein
$2^{o(\sqrt{|E'|})}$-Algorithmus für $\Delta$\problem{Cover} ein
$2^{o(\sqrt{|E|})}$-Algorithmus für \problem{VertexCover} -- ebenso ein
Widerspruch. Kein $2^{o(|V'|)}$, kein $2^{o(\sqrt{|E'|})}$.


\lsg
\textbf{a)} $|V'| = |V|$,\quad
$|\bar E| = \tfrac12 |V|(|V|-1) - |E| \le |V|^2$.

\textbf{b)} Zu zeigen ist, dass \problem{CoverClique} unter der ETH weder
in $2^{o(|V'|)} \cdot |I|^{O(1)}$ noch in
$2^{o(\sqrt{|\bar E|})} \cdot |I|^{O(1)}$ lösbar ist.

\textbf{Bzgl.\ $|V'|$:}
\begin{itemize}
\item Angenommen, \problem{CoverClique} wäre in
$2^{o(|V'|)} \cdot |I|^{O(1)}$ lösbar.
\item Wegen $|V'| = |V|$ ergäbe sich ein $2^{o(|V|)}$-Algorithmus für
$k$-\problem{Color}.
\item Den gibt es unter der ETH nicht -- Widerspruch.
\end{itemize}

\textbf{Bzgl.\ $|\bar E|$:}
\begin{itemize}
\item Angenommen, \problem{CoverClique} wäre in
$2^{o(\sqrt{|\bar E|})} \cdot |I|^{O(1)}$ lösbar.
\item Wegen $|\bar E| \le |V|^2$ ist $\sqrt{|\bar E|} = O(|V|)$.
\item Es ergäbe sich wieder ein $2^{o(|V|)}$-Algorithmus für
$k$-\problem{Color} -- Widerspruch zur ETH.
\end{itemize}
Bounds: kein $2^{o(|V'|)}$, kein $2^{o(\sqrt{|\bar E|})}$.

\textbf{c)} $|V'| = |V| + |E|$,\quad $|E'| = |E| + 2|E| = 3|E|$.
\begin{center}
\begin{tikzpicture}[plab/.style={font=\scriptsize,align=center},
  mini/.style={circle,draw,inner sep=1.6pt}]
  \node[plab] at (1.9,3.3) {$k$-\problem{Color} $\redp$ \problem{CoverClique}};
  \node[mini] (a1) at (0,2) {}; \node[mini] (b1) at (1,2) {};
  \node[mini] (c1) at (1,1) {}; \node[mini] (d1) at (0,1) {};
  \draw (a1)--(b1)--(c1)--(d1)--(a1);
  \node[plab] at (0.5,0.5) {$G$};
  \draw[->] (1.5,1.5) -- node[above,plab] {Komplement} (2.6,1.5);
  \node[mini] (a2) at (3.1,2) {}; \node[mini] (b2) at (4.1,2) {};
  \node[mini] (c2) at (4.1,1) {}; \node[mini] (d2) at (3.1,1) {};
  \draw (a2)--(c2); \draw (b2)--(d2);
  \node[plab] at (3.6,0.5) {$\bar G$};
  \node[plab] at (1.9,-0.3) {$|V'| = |V|$,\ $|\bar E| \le |V|^2$};
  \node[plab,text=black!60] at (1.9,-0.9) {kein $2^{o(|V'|)}$, kein $2^{o(\sqrt{|\bar E|})}$};
  \node[plab] at (9.4,3.3) {\problem{VertexCover} $\redp$ $\Delta$\problem{Cover}};
  \node[mini,label=below:{\scriptsize $u$}] (u1) at (7.2,1.5) {};
  \node[mini,label=below:{\scriptsize $v$}] (v1) at (8.4,1.5) {};
  \draw (u1)--(v1);
  \draw[->] (8.9,1.5) -- node[above,plab] {je Kante} (9.9,1.5);
  \node[mini,label=below:{\scriptsize $u$}] (u2) at (10.4,1.5) {};
  \node[mini,label=below:{\scriptsize $v$}] (v2) at (11.6,1.5) {};
  \node[mini,label=above:{\scriptsize $v_e$}] (w2) at (11.0,2.4) {};
  \draw (u2)--(v2)--(w2)--(u2);
  \node[plab] at (9.4,-0.3) {$|V'| = |V|+|E| = O(|V|^2)$,\ $|E'| = 3|E|$};
  \node[plab,text=black!60] at (9.4,-0.9) {kein $2^{o(\sqrt{|V'|})}$, kein $2^{o(\sqrt{|E'|})}$};
\end{tikzpicture}
\end{center}

\textbf{d)} Für \problem{VertexCover} gilt unter der ETH:
kein $2^{o(|V|)}$- und kein $2^{o(\sqrt{|E|})}$-Algorithmus. Zu zeigen ist,
dass $\Delta$\problem{Cover} weder in $2^{o(\sqrt{|V'|})} \cdot |I|^{O(1)}$
noch in $2^{o(\sqrt{|E'|})} \cdot |I|^{O(1)}$ lösbar ist.

\textbf{Bzgl.\ $|V'|$:}
\begin{itemize}
\item Angenommen, $\Delta$\problem{Cover} wäre in
$2^{o(\sqrt{|V'|})} \cdot |I|^{O(1)}$ lösbar.
\item Wegen $|V'| = |V| + |E| \le |V| + |V|^2 = O(|V|^2)$ ist
$\sqrt{|V'|} = O(|V|)$.
\item Es ergäbe sich ein $2^{o(|V|)}$-Algorithmus für \problem{VertexCover}
-- Widerspruch zur ETH.
\end{itemize}

\textbf{Bzgl.\ $|E'|$:}
\begin{itemize}
\item Angenommen, $\Delta$\problem{Cover} wäre in
$2^{o(\sqrt{|E'|})} \cdot |I|^{O(1)}$ lösbar.
\item Wegen $|E'| = 3|E| = O(|E|)$ ist $\sqrt{|E'|} = O(\sqrt{|E|})$.
\item Es ergäbe sich ein $2^{o(\sqrt{|E|})}$-Algorithmus für
\problem{VertexCover} -- Widerspruch zur ETH.
\end{itemize}
Bounds: kein $2^{o(\sqrt{|V'|})}$, kein $2^{o(\sqrt{|E'|})}$.
\hfill$\square$

\newpage
% ##################################################################
\section{Approximation: anwenden, Güte beweisen, Worst Case}
% ##################################################################

% ==================================================================
\katkopf{Knapsack: Greedy und ModifiedGreedy}{Klausur SS23-H, A1, 3+2+5 P.}
Rucksack-Instanz mit Kapazität $B = 16$, Items als $(p_i, w_i)$:
\[
I = [(1,4),\,(1,1),\,(1,3),\,(11,13),\,(3,3),\,(5,6),\,(1,5)]
\]
\begin{enumerate}
\item[a)] Wenden Sie Greedy an (mit Begründung der Auswahl). Lösungswert?
\item[b)] Wenden Sie ModifiedGreedy an. Wie ändert sich die Lösung?
\item[c)] Güte von ModifiedGreedy? Idee zur Verbesserung auf $\frac32$ bzw.\
$\frac43$?
\end{enumerate}

\emph{Hinweis:} Greedy sortiert die Items absteigend nach Profitdichte
$p_i/w_i$ und packt in dieser Reihenfolge jedes Item ein, das noch passt.
ModifiedGreedy gibt das Bessere aus Greedy-Lösung und profitreichstem
Einzel-Item aus.

\lsg
\textbf{a)} Profitdichten $p_i/w_i$: $0{,}25;\ 1;\ 0{,}33;\ 0{,}85;\ 1;\
0{,}83;\ 0{,}2$. Absteigend sortiert: $(1,1), (3,3), (11,13), (5,6), (1,3),
(1,4), (1,5)$. Einpacken (Restkapazität beachten):
\begin{itemize}
\item $(1,1)$ einpacken -- Last 1.
\item $(3,3)$ einpacken -- Last 4.
\item $(11,13)$ passt nicht ($4+13 = 17 > 16$).
\item $(5,6)$ einpacken -- Last 10.
\item $(1,3)$ einpacken -- Last 13.
\item $(1,4)$ und $(1,5)$ passen nicht.
\end{itemize}
$\mathrm{GA} = 1 + 3 + 5 + 1 = 10$.

\textbf{b)} Bestes Einzel-Item ist $(11,13)$ mit Profit $11 > 10$, also gibt
ModifiedGreedy dieses aus: $\mathrm{MGA} = 11$.
\begin{center}
\begin{tikzpicture}[x=0.65cm,y=1cm]
  \node[left] at (-0.3,2.7) {\small Greedy};
  \draw[fill=black!10] (0,2.4) rectangle (1,3.0);
  \node at (0.5,2.7) {\scriptsize $1/1$};
  \draw[fill=black!25] (1,2.4) rectangle (4,3.0);
  \node at (2.5,2.7) {\scriptsize $3/3$};
  \draw[fill=black!10] (4,2.4) rectangle (10,3.0);
  \node at (7,2.7) {\scriptsize $5/6$};
  \draw[fill=black!25] (10,2.4) rectangle (13,3.0);
  \node at (11.5,2.7) {\scriptsize $1/3$};
  \draw (13,2.4) rectangle (16,3.0);
  \node[right] at (16.2,2.7) {\small $\mathrm{GA}=10$};
  \node[left] at (-0.3,1.5) {\small MGA};
  \draw[fill=black!25] (0,1.2) rectangle (13,1.8);
  \node at (6.5,1.5) {\scriptsize $11/13$};
  \draw (13,1.2) rectangle (16,1.8);
  \node[right] at (16.2,1.5) {\small $\mathrm{MGA}=11$};
  \node[left] at (-0.3,0.3) {\small OPT};
  \draw[fill=black!25] (0,0) rectangle (13,0.6);
  \node at (6.5,0.3) {\scriptsize $11/13$};
  \draw[fill=black!10] (13,0) rectangle (16,0.6);
  \node at (14.5,0.3) {\scriptsize $3/3$};
  \node[right] at (16.2,0.3) {\small $\mathrm{OPT}=14$};
  \draw[thin] (0,-0.35) -- (16,-0.35);
  \draw[thin] (0,-0.42) -- (0,-0.28);
  \draw[thin] (16,-0.42) -- (16,-0.28);
  \node[below] at (0,-0.42) {\small $0$};
  \node[below] at (16,-0.42) {\small $B=16$};
  \node at (8,-1.1) {\small Segmentbeschriftung: $p_i/w_i$, Breite $=$ Gewicht $w_i$};
\end{tikzpicture}
\end{center}

\textbf{c)} MGA hat Güte 2. Verbesserung durch $k$-Enumeration (Sahni):
Probiere alle Vorauswahlen mit $\le k$ Items, fülle mit Greedy auf, nimm das
Beste -- Güte $1 + 1/k$, also $\frac32$ für $k = 2$ und $\frac43$ für $k = 3$.
\hfill$\square$

\newpage
% ==================================================================
\katkopf{LPT anwenden + ListScheduling-Worst-Case}{Klausur SS24-H, A1, 4+2+2+2 P.}
Jobs $p = (5, 3, 7, 8, 1, 4, 2)$, $m = 3$.
\begin{enumerate}
\item[a)] Wenden Sie LPT an (Zwischenschritte, Reihenfolge, Schedule
grafisch).
\item[b)] Approximative Güte von LPT?
\item[c)] Instanz für $m = 2$, bei der ListScheduling Güte $2 - 1/m$ erreicht
(mit OPT und LS-Wert).
\item[d)] Dasselbe für $m = 3$.
\end{enumerate}

\emph{Hinweis:} ListScheduling legt jeden Job in der gegebenen Reihenfolge auf
die aktuell am wenigsten belastete Maschine. LPT ist ListScheduling nach
absteigender Sortierung der Bearbeitungszeiten.

\lsg
\textbf{a)} Absteigend sortiert: $8, 7, 5, 4, 3, 2, 1$ (also
$J_4, J_3, J_1, J_6, J_2, J_7, J_5$). Platzierung auf die jeweils leerste
Maschine:
\begin{itemize}
\item $8 \to M_1$ [Last 8], \quad $7 \to M_2$ [7], \quad $5 \to M_3$ [5],
\item $4 \to M_3$ [9], \quad $3 \to M_2$ [10], \quad $2 \to M_1$ [10],
\quad $1 \to M_3$ [10].
\end{itemize}
\begin{center}
\begin{tikzpicture}[x=0.7cm,y=1cm]
  \node[left] at (-0.2,1.775) {\small $M_1$};
  \draw[fill=black!10] (0,1.5) rectangle (8,2.05);
  \node at (4,1.775) {\small $J_4\,(8)$};
  \draw[fill=black!25] (8,1.5) rectangle (10,2.05);
  \node at (9,1.775) {\small $2$};
  \node[left] at (-0.2,1.025) {\small $M_2$};
  \draw[fill=black!10] (0,0.75) rectangle (7,1.3);
  \node at (3.5,1.025) {\small $J_3\,(7)$};
  \draw[fill=black!25] (7,0.75) rectangle (10,1.3);
  \node at (8.5,1.025) {\small $3$};
  \node[left] at (-0.2,0.275) {\small $M_3$};
  \draw[fill=black!10] (0,0) rectangle (5,0.55);
  \node at (2.5,0.275) {\small $J_1\,(5)$};
  \draw[fill=black!25] (5,0) rectangle (9,0.55);
  \node at (7,0.275) {\small $4$};
  \draw[fill=black!10] (9,0) rectangle (10,0.55);
  \node at (9.5,0.275) {\small $1$};
  \draw[->,thin] (0,-0.35) -- (10.8,-0.35) node[below] {\small $t$};
  \foreach \x in {0,5,10} {
    \draw[thin] (\x,-0.42) -- (\x,-0.28);
    \node[below] at (\x,-0.45) {\small $\x$};}
  \draw[dashed,thin] (10,-0.28) -- (10,2.05);
\end{tikzpicture}
\end{center}
Makespan $= 10$.

\textbf{b)} LPT hat Güte $\frac43 - \frac1{3m}$.

\textbf{c)} $m = 2$: Jobs $(1, 1, 2)$ in dieser Reihenfolge. LS verteilt die
Einsen auf beide Maschinen, die 2 kommt obendrauf: $\mathrm{LS} = 3$. Optimal:
$\{2\}$ / $\{1,1\}$ mit $\mathrm{OPT} = 2$. Rate $3/2 = 2 - \frac12$.

\textbf{d)} $m = 3$: sechs Einser-Jobs, dann ein Job der Größe 3. LS verteilt
die Einsen gleichmäßig (je 2), die 3 kommt obendrauf: $\mathrm{LS} = 5$.
Optimal: 3 allein, die Einsen auf zwei Maschinen: $\mathrm{OPT} = 3$. Rate
$5/3 = 2 - \frac13$.
\begin{center}
\begin{tikzpicture}[x=0.6cm,y=1cm]
  \node at (3.3,1.85) {\small c)\; $m=2$: Jobs $(1,1,2)$};
  \node[left] at (-0.2,1.025) {\small $M_1$};
  \draw[fill=black!10] (0,0.75) rectangle (1,1.3); \node at (0.5,1.025) {\small $1$};
  \draw[fill=black!25] (1,0.75) rectangle (3,1.3); \node at (2,1.025) {\small $2$};
  \node[left] at (-0.2,0.275) {\small $M_2$};
  \draw[fill=black!10] (0,0) rectangle (1,0.55); \node at (0.5,0.275) {\small $1$};
  \draw[dashed,thin] (3,-0.1) -- (3,1.3);
  \node at (1.5,-0.55) {\small $\mathrm{LS}=3$};
  \begin{scope}[xshift=3.3cm]
  \draw[fill=black!25] (0,0.75) rectangle (2,1.3); \node at (1,1.025) {\small $2$};
  \draw[fill=black!10] (0,0) rectangle (1,0.55); \node at (0.5,0.275) {\small $1$};
  \draw[fill=black!10] (1,0) rectangle (2,0.55); \node at (1.5,0.275) {\small $1$};
  \draw[dashed,thin] (2,-0.1) -- (2,1.3);
  \node at (1,-0.55) {\small $\mathrm{OPT}=2$};
  \end{scope}
\end{tikzpicture}\hspace{1.8cm}%
\begin{tikzpicture}[x=0.6cm,y=1cm]
  \node at (4.4,2.6) {\small d)\; $m=3$: sechs Einsen, dann eine $3$};
  \node[left] at (-0.2,1.775) {\small $M_1$};
  \draw[fill=black!10] (0,1.5) rectangle (1,2.05); \node at (0.5,1.775) {\small $1$};
  \draw[fill=black!10] (1,1.5) rectangle (2,2.05); \node at (1.5,1.775) {\small $1$};
  \draw[fill=black!25] (2,1.5) rectangle (5,2.05); \node at (3.5,1.775) {\small $3$};
  \node[left] at (-0.2,1.025) {\small $M_2$};
  \draw[fill=black!10] (0,0.75) rectangle (1,1.3); \node at (0.5,1.025) {\small $1$};
  \draw[fill=black!10] (1,0.75) rectangle (2,1.3); \node at (1.5,1.025) {\small $1$};
  \node[left] at (-0.2,0.275) {\small $M_3$};
  \draw[fill=black!10] (0,0) rectangle (1,0.55); \node at (0.5,0.275) {\small $1$};
  \draw[fill=black!10] (1,0) rectangle (2,0.55); \node at (1.5,0.275) {\small $1$};
  \draw[dashed,thin] (5,-0.1) -- (5,2.05);
  \node at (2.5,-0.55) {\small $\mathrm{LS}=5$};
  \begin{scope}[xshift=4.2cm]
  \draw[fill=black!25] (0,1.5) rectangle (3,2.05); \node at (1.5,1.775) {\small $3$};
  \foreach \x in {0,1,2} {
    \draw[fill=black!10] (\x,0.75) rectangle (\x+1,1.3); \node at (\x+0.5,1.025) {\small $1$};
    \draw[fill=black!10] (\x,0) rectangle (\x+1,0.55); \node at (\x+0.5,0.275) {\small $1$};}
  \draw[dashed,thin] (3,-0.1) -- (3,2.05);
  \node at (1.5,-0.55) {\small $\mathrm{OPT}=3$};
  \end{scope}
\end{tikzpicture}
\end{center}
\hfill$\square$

\newpage
% ==================================================================
\katkopf{$\Delta$TSP1 anwenden}{Klausur SS24-N, A1, 6+2+2 P.}
Gegeben sei folgender Graph $G = (V,E)$:
\begin{center}
\begin{tikzpicture}[gw/.style={fill=white,inner sep=1pt,font=\small}]
  \node[knoten] (A) at (  90:2.1) {$A$};
  \node[knoten] (B) at (  18:2.1) {$B$};
  \node[knoten] (C) at ( -54:2.1) {$C$};
  \node[knoten] (D) at (-126:2.1) {$D$};
  \node[knoten] (E) at ( 162:2.1) {$E$};
  \draw (A) -- (B) node[gw,midway] {3};
  \draw (B) -- (C) node[gw,midway] {1};
  \draw (C) -- (D) node[gw,midway] {2};
  \draw (D) -- (E) node[gw,midway] {3};
  \draw (E) -- (A) node[gw,midway] {1};
  \draw (A) -- (C) node[gw,pos=0.25] {2};
  \draw (A) -- (D) node[gw,pos=0.25] {3};
  \draw (B) -- (D) node[gw,pos=0.25] {3};
  \draw (B) -- (E) node[gw,pos=0.25] {2};
  \draw (C) -- (E) node[gw,pos=0.25] {3};
\end{tikzpicture}
\end{center}
\begin{enumerate}
\item[a)] Wenden Sie $\Delta$TSP1 auf den Graphen $G$ ab Startknoten $C$
an; geben Sie alle Zwischenschritte an.
\item[b)] Was berechnet $\Delta$TSP1, und welche Bedingungen muss der Graph
erfüllen?
\item[c)] Begründen Sie die approximative Güte 2.
\end{enumerate}

\emph{Hinweis ($\Delta$TSP1):} (1) MST $T$ berechnen; (2) alle MST-Kanten
verdoppeln; (3) Eulerkreis ab Startknoten; (4) Abkürzen: bereits besuchte
Knoten überspringen.

\lsg
\textbf{a)}
\begin{itemize}
\item[(1)] MST: $A$--$E$ (1), $B$--$C$ (1), $A$--$C$ (2), $C$--$D$ (2);
Gewicht 6.
\item[(2)] Kanten verdoppeln: Multigraph mit Gewicht 12, alle Grade gerade.
\item[(3)] Eulerkreis ab $C$: $[C, A, E, A, C, B, C, D, C]$, Länge 12.
\item[(4)] Abkürzen (besuchte Knoten überspringen): Tour $[C, A, E, B, D, C]$,
Länge 10.
\end{itemize}
\begin{center}
\begin{tikzpicture}[gw/.style={fill=white,inner sep=1pt,font=\scriptsize},
                    hell/.style={draw=black!20}]
  \node[knoten] (A) at (  90:1.2) {$A$};
  \node[knoten] (B) at (  18:1.2) {$B$};
  \node[knoten] (C) at ( -54:1.2) {$C$};
  \node[knoten] (D) at (-126:1.2) {$D$};
  \node[knoten] (E) at ( 162:1.2) {$E$};
  \foreach \u/\v in {A/B,A/D,B/D,B/E,C/E,D/E} \draw[hell] (\u) -- (\v);
  \draw[very thick] (A) -- (E) node[gw,midway] {1};
  \draw[very thick] (B) -- (C) node[gw,midway] {1};
  \draw[very thick] (A) -- (C) node[gw,midway] {2};
  \draw[very thick] (C) -- (D) node[gw,midway] {2};
  \node at (0,-1.9) {\scriptsize (1) MST, Gewicht 6};
\end{tikzpicture}\hspace{2mm}%
\begin{tikzpicture}[gw/.style={fill=white,inner sep=1pt,font=\scriptsize}]
  \node[knoten] (A) at (  90:1.2) {$A$};
  \node[knoten] (B) at (  18:1.2) {$B$};
  \node[knoten] (C) at ( -54:1.2) {$C$};
  \node[knoten] (D) at (-126:1.2) {$D$};
  \node[knoten] (E) at ( 162:1.2) {$E$};
  \foreach \u/\v in {A/E,B/C,A/C,C/D}{
    \draw[thick] (\u) to[bend left=12] (\v);
    \draw[thick] (\u) to[bend right=12] (\v);}
  \node at (0,-1.9) {\scriptsize (2) verdoppelt, Gewicht 12};
\end{tikzpicture}\hspace{2mm}%
\begin{tikzpicture}[nr/.style={fill=white,inner sep=1pt,font=\scriptsize}]
  \node[knoten] (A) at (  90:1.2) {$A$};
  \node[knoten] (B) at (  18:1.2) {$B$};
  \node[knoten] (C) at ( -54:1.2) {$C$};
  \node[knoten] (D) at (-126:1.2) {$D$};
  \node[knoten] (E) at ( 162:1.2) {$E$};
  \draw[->] (C) to[bend left=18] node[nr] {1} (A);
  \draw[->] (A) to[bend left=18] node[nr] {2} (E);
  \draw[->] (E) to[bend left=18] node[nr] {3} (A);
  \draw[->] (A) to[bend left=18] node[nr] {4} (C);
  \draw[->] (C) to[bend left=18] node[nr] {5} (B);
  \draw[->] (B) to[bend left=18] node[nr] {6} (C);
  \draw[->] (C) to[bend left=18] node[nr] {7} (D);
  \draw[->] (D) to[bend left=18] node[nr] {8} (C);
  \node at (0,-1.9) {\scriptsize (3) Eulerkreis ab $C$};
\end{tikzpicture}\hspace{2mm}%
\begin{tikzpicture}[gw/.style={fill=white,inner sep=1pt,font=\scriptsize},
                    hell/.style={draw=black!20}]
  \node[knoten] (A) at (  90:1.2) {$A$};
  \node[knoten] (B) at (  18:1.2) {$B$};
  \node[knoten] (C) at ( -54:1.2) {$C$};
  \node[knoten] (D) at (-126:1.2) {$D$};
  \node[knoten] (E) at ( 162:1.2) {$E$};
  \foreach \u/\v in {A/B,A/D,B/C,C/E,D/E} \draw[hell] (\u) -- (\v);
  \draw[very thick,->] (C) -- (A) node[gw,midway] {2};
  \draw[very thick,->] (A) -- (E) node[gw,midway] {1};
  \draw[very thick,->] (E) -- (B) node[gw,midway] {2};
  \draw[very thick,->] (B) -- (D) node[gw,midway] {3};
  \draw[very thick,->] (D) -- (C) node[gw,midway] {2};
  \node at (0,-1.9) {\scriptsize (4) Tour, L\"ange 10};
\end{tikzpicture}
\end{center}

\textbf{b)} $\Delta$TSP1 berechnet eine Rundreise (TSP-Tour) mit Güte 2. Der
Graph muss vollständig sein, die Distanzen symmetrisch und die
Dreiecksungleichung $d(i,j) \le d(i,k) + d(k,j)$ erfüllen -- sonst kann das
Abkürzen die Tour verlängern.

\textbf{c)} Drei Schritte: (1) $w(T) \le \mathrm{OPT}$, denn eine optimale
Tour ohne eine Kante ist ein Spannbaum und $T$ ist minimal. (2) Der Eulerkreis
hat Länge $2\,w(T) \le 2\,\mathrm{OPT}$. (3) Abkürzen verlängert wegen der
Dreiecksungleichung nicht. Also $d(R) \le 2\,\mathrm{OPT}$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{Christofides anwenden}{Klausur SS23-N, A1, 3+7 P.}
Gegeben sei folgender Graph $G = (V,E)$:
\begin{center}
\begin{tikzpicture}[gw/.style={fill=white,inner sep=1pt,font=\small}]
  \node[knoten] (a) at (0,2.4)   {$a$};
  \node[knoten] (b) at (2.4,2.4) {$b$};
  \node[knoten] (c) at (2.4,0)   {$c$};
  \node[knoten] (d) at (0,0)     {$d$};
  \draw (a) -- (b) node[gw,midway] {1};
  \draw (b) -- (c) node[gw,midway] {2};
  \draw (c) -- (d) node[gw,midway] {3};
  \draw (d) -- (a) node[gw,midway] {2};
  \draw (a) -- (c) node[gw,pos=0.3] {3};
  \draw (b) -- (d) node[gw,pos=0.3] {3};
\end{tikzpicture}
\end{center}
\begin{enumerate}
\item[a)] Was berechnet Christofides' Algorithmus, welche Güte hat er, und
welche Eigenschaft müssen die Distanzen neben der Symmetrie erfüllen?
\item[b)] Wenden Sie den Algorithmus auf den Graphen $G$ mit Startknoten
$a$ an; geben Sie alle Zwischengraphen an -- auch Schritte, die nichts
ändern.
\end{enumerate}

\emph{Hinweis (Christofides):} (1) MST $T$ berechnen; (2) $X$ = Knoten mit
ungeradem Grad in $T$; (3) minimales perfektes Matching $K$ auf $X$;
(4) Eulerkreis im Multigraphen $T + K$; (5) Abkürzen.

\lsg
\textbf{a)} Christofides berechnet eine TSP-Rundreise mit Güte $\frac32$. Die
Distanzen müssen zusätzlich die Dreiecksungleichung erfüllen.

\textbf{b)}
\begin{itemize}
\item[(1)] MST (Kruskal): $\{a,b\}$ (1), $\{b,c\}$ (2), $\{a,d\}$ (2);
Gewicht 5.
\item[(2)] Ungerade Grade im MST: $a{:}\,2$, $b{:}\,2$, $c{:}\,1$, $d{:}\,1$
$\Rightarrow X = \{c, d\}$.
\item[(3)] Minimales perfektes Matching auf $X$: einzige Möglichkeit
$K = \{\{c,d\}\}$, Kosten 3.
\item[(4)] Multigraph $T + K$: alle Grade gerade. Eulerkreis ab $a$:
$[a, b, c, d, a]$, Kosten $1 + 2 + 3 + 2 = 8$.
\item[(5)] Abkürzen: kein Knoten kommt doppelt vor -- dieser Schritt ändert
nichts, wird aber geprüft. Tour $R = [a, b, c, d, a]$, Länge 8 (hier sogar
optimal).
\end{itemize}
\begin{center}
\begin{tikzpicture}[gw/.style={fill=white,inner sep=1pt,font=\scriptsize},
                    hell/.style={draw=black!20}]
  \node[knoten] (a) at (0,1.7)   {$a$};
  \node[knoten] (b) at (1.7,1.7) {$b$};
  \node[knoten] (c) at (1.7,0)   {$c$};
  \node[knoten] (d) at (0,0)     {$d$};
  \foreach \u/\v in {c/d,a/c,b/d} \draw[hell] (\u) -- (\v);
  \draw[very thick] (a) -- (b) node[gw,midway] {1};
  \draw[very thick] (b) -- (c) node[gw,midway] {2};
  \draw[very thick] (a) -- (d) node[gw,midway] {2};
  \node at (0.85,-0.75) {\scriptsize (1) MST, Gewicht 5};
\end{tikzpicture}\hspace{3mm}%
\begin{tikzpicture}[hell/.style={draw=black!20}]
  \node[knoten]  (a) at (0,1.7)   {$a$};
  \node[knoten]  (b) at (1.7,1.7) {$b$};
  \node[kndick]  (c) at (1.7,0)   {$c$};
  \node[kndick]  (d) at (0,0)     {$d$};
  \foreach \u/\v in {c/d,a/c,b/d} \draw[hell] (\u) -- (\v);
  \draw[very thick] (a) -- (b);
  \draw[very thick] (b) -- (c);
  \draw[very thick] (a) -- (d);
  \node at (0.85,-0.75) {\scriptsize (2) $X=\{c,d\}$};
\end{tikzpicture}\hspace{3mm}%
\begin{tikzpicture}[gw/.style={fill=white,inner sep=1pt,font=\scriptsize}]
  \node[knoten]  (a) at (0,1.7)   {$a$};
  \node[knoten]  (b) at (1.7,1.7) {$b$};
  \node[kndick]  (c) at (1.7,0)   {$c$};
  \node[kndick]  (d) at (0,0)     {$d$};
  \draw[very thick] (a) -- (b);
  \draw[very thick] (b) -- (c);
  \draw[very thick] (a) -- (d);
  \draw[very thick,dashed] (c) -- (d) node[gw,midway] {3};
  \node at (0.85,-0.75) {\scriptsize (3) Matching $\{c,d\}$};
\end{tikzpicture}\hspace{3mm}%
\begin{tikzpicture}[gw/.style={fill=white,inner sep=1pt,font=\scriptsize},
                    hell/.style={draw=black!20}]
  \node[knoten] (a) at (0,1.7)   {$a$};
  \node[knoten] (b) at (1.7,1.7) {$b$};
  \node[knoten] (c) at (1.7,0)   {$c$};
  \node[knoten] (d) at (0,0)     {$d$};
  \foreach \u/\v in {a/c,b/d} \draw[hell] (\u) -- (\v);
  \draw[very thick,->] (a) -- (b) node[gw,midway] {1};
  \draw[very thick,->] (b) -- (c) node[gw,midway] {2};
  \draw[very thick,->] (c) -- (d) node[gw,midway] {3};
  \draw[very thick,->] (d) -- (a) node[gw,midway] {2};
  \node at (0.85,-0.75) {\scriptsize (4) Tour, L\"ange 8};
\end{tikzpicture}
\end{center}
\hfill$\square$

\newpage
% ==================================================================
\katkopf{2ApproxVC hat Güte 2}{Präsenz 13.1}
Algorithmus \textbf{2ApproxCV}: Gehe alle Kanten durch; sind beide Endpunkte
noch nicht in $C$, füge beide zu $C$ hinzu. Beweisen Sie die Güte 2.

\lsg
Sei $A$ die Menge der Kanten, für die beide Endpunkte aufgenommen wurden. Dann
gilt $|C| = 2|A|$.

Die Kanten in $A$ sind paarweise knotendisjunkt: Hätten zwei Kanten aus $A$
einen gemeinsamen Endpunkt, wäre bei der später betrachteten dieser Endpunkt
schon in $C$ gewesen -- sie wäre nicht aufgenommen worden. $A$ ist also ein
Matching.
\begin{center}
\begin{tikzpicture}
  \node[kndick] (a) at (0,1.5)   {$a$};
  \node[kndick] (b) at (2,1.5)   {$b$};
  \node[kndick] (c) at (4,1.5)   {$c$};
  \node[kndick] (d) at (6,1.5)   {$d$};
  \node[knoten] (e) at (1,0)     {$e$};
  \node[knoten] (f) at (5,0)     {$f$};
  \draw[very thick] (a) -- (b);
  \draw (b) -- (c);
  \draw[very thick] (c) -- (d);
  \draw (b) -- (e);
  \draw (d) -- (f);
  \node at (3,-0.9) {\small dick $= A$, gef\"ullt $= C$:\quad
    $|C| = 2|A| = 4$};
\end{tikzpicture}
\end{center}

Sei $C^*$ ein minimales Vertex Cover. $C^*$ enthält von jeder Kante aus $A$
mindestens einen Endpunkt, und da die Kanten aus $A$ knotendisjunkt sind,
braucht es für jede einen \emph{eigenen} Knoten: $|C^*| \ge |A|$.

Zusammen: $|C| = 2|A| \le 2|C^*|$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{MAX-3-SAT: Güte 2 + scharfe Instanz}{HA 13.1 / Klausur SS23-H A3, 6+4 P.}
\problem{MAX-3-SAT}: Gegeben eine Formel $\varphi$ in KNF mit drei Literalen
pro Klausel; gesucht eine Belegung $\beta$, die die Anzahl $v(\beta)$ der
erfüllten Klauseln maximiert.

Algorithmus $A$: Werte $\beta_0$ (alle false) und $\beta_1$ (alle true) aus,
gib die bessere Belegung zurück.
\begin{enumerate}
\item[a)] Zeigen Sie $v(A(\varphi)) \ge \frac12 v(\mathrm{OPT}(\varphi))$ für
alle $\varphi$.
\item[b)] Geben Sie eine Formel an, bei der $A$ genau die Hälfte der maximal
erfüllbaren Klauseln erfüllt (Begründung).
\end{enumerate}

\lsg
\textbf{a)} Zu zeigen ist, dass $A$ die Güte 2 hat, also
\[
v(A(\varphi)) \;\ge\; \tfrac12\, v(\mathrm{OPT}(\varphi))
\quad\text{für alle } \varphi .
\]
Sei $\varphi$ eine Formel mit $m$ Klauseln. Betrachte die beiden Belegungen
$\beta_0$ (alle false) und $\beta_1$ (alle true):
\begin{itemize}
\item Unter $\beta_0$ ist jedes negative Literal wahr.
\item Unter $\beta_1$ ist jedes positive Literal wahr.
\end{itemize}
Jedes Literal ist positiv oder negativ, und jede Klausel enthält mindestens
ein Literal. Also wird jede Klausel von $\beta_0$ oder von $\beta_1$ (oder
von beiden) erfüllt. Da damit jede Klausel zu $v(\beta_0)$ oder zu
$v(\beta_1)$ zählt, gilt
\[
v(\beta_0) + v(\beta_1) \;\ge\; m .
\]
Der Algorithmus wählt die bessere der beiden Belegungen. Das Optimum erfüllt
höchstens alle $m$ Klauseln, also $v(\mathrm{OPT}(\varphi)) \le m$. Damit
folgt
\[
v(A(\varphi)) \;=\; \max\{v(\beta_0), v(\beta_1)\}
\;\ge\; \frac{v(\beta_0) + v(\beta_1)}{2}
\;\ge\; \frac{m}{2}
\;\ge\; \frac{v(\mathrm{OPT}(\varphi))}{2} .
\]
Somit hat $A$ die Güte 2.

\textbf{b)} $\varphi = (x_1 \vee x_2 \vee x_3) \wedge
(\neg x_1 \vee \neg x_2 \vee \neg x_3)$. Mit $x_1 = \true$,
$x_2 = x_3 = \false$ sind beide Klauseln erfüllt: $\mathrm{OPT} = 2$.
Aber $\beta_0$ erfüllt nur die zweite Klausel, $\beta_1$ nur die erste:
$v(A(\varphi)) = 1 = \frac12 \cdot \mathrm{OPT}$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{ApproximateSubsetSum: Worst Case + Güte 2}{Klausur SS24-H, A4, 3+7 P.}
\problem{ApproximateSubsetSum}: Zahlen $a_1, \dots, a_n \le T$ mit
$\sum a_i > T$; maximiere $\sum_{j\in S} a_j \le T$. Algorithmus GA: sortiere
absteigend, nimm der Reihe nach, \emph{stoppe} beim ersten nicht mehr
passenden Element.
\begin{enumerate}
\item[a)] Konstruktionsvorschrift für Instanzen, mit denen GA beliebig nah an
Güte 2 kommt.
\item[b)] Zeigen Sie $\mathrm{GA}(I) \ge \mathrm{OPT}(I)/2$.
\end{enumerate}

\lsg
\textbf{a)} Für gerades $T$: $a_1 = \frac T2 + 1$, $a_2 = a_3 = \frac T2$. GA
nimmt $a_1$ und stoppt, denn $a_1 + a_2 > T$: $\mathrm{GA} = \frac T2 + 1$.
Optimal ist $a_2 + a_3 = T$. Rate
$\frac{T}{T/2+1} \to 2$ für $T \to \infty$.
\begin{center}
\begin{tikzpicture}[x=0.85cm,y=1cm]
  \node[left,font=\small] at (-0.3,1.5) {GA};
  \draw[fill=black!25] (0,1.2) rectangle (4.5,1.8);
  \node at (2.25,1.5) {\small $a_1 = \tfrac T2 + 1$};
  \draw (4.5,1.2) rectangle (8,1.8);
  \node[font=\scriptsize,black!60] at (6.25,1.5) {$a_2$ passt nicht mehr};
  \node[left,font=\small] at (-0.3,0.3) {OPT};
  \draw[fill=black!10] (0,0) rectangle (4,0.6);
  \node at (2,0.3) {\small $a_2 = \tfrac T2$};
  \draw[fill=black!10] (4,0) rectangle (8,0.6);
  \node at (6,0.3) {\small $a_3 = \tfrac T2$};
  \draw[thin] (0,-0.35) -- (8,-0.35);
  \draw[thin] (0,-0.42) -- (0,-0.28);
  \draw[thin] (8,-0.42) -- (8,-0.28);
  \node[below,font=\small] at (0,-0.42) {$0$};
  \node[below,font=\small] at (8,-0.42) {$T$};
\end{tikzpicture}
\end{center}

\textbf{b)} Sei $a_\ell$ das erste Element, das nicht mehr passte (existiert
wegen $\sum a_i > T$). Dann gilt
\[
\mathrm{GA}(I) + a_\ell > T \ge \mathrm{OPT}(I).
\]
Wegen der absteigenden Sortierung enthält die GA-Auswahl ein Element
$a_j \ge a_\ell$, also $\mathrm{GA}(I) \ge a_\ell$. Einsetzen:
$2\,\mathrm{GA}(I) \ge \mathrm{GA}(I) + a_\ell > T \ge \mathrm{OPT}(I)$, somit
$\mathrm{GA}(I) \ge \mathrm{OPT}(I)/2$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{RoundRobin: Güte 2 + Worst Case}{Klausur SS24-N, A4, 10+(10) P.}
RoundRobin sortiert die Jobs absteigend und verteilt sie reihum
($J_j$ auf Maschine $((j-1) \bmod m) + 1$).
\begin{enumerate}
\item[a)] Zeigen Sie per Widerspruch, dass RoundRobin Güte 2 hat.
\item[b)] \textbf{Bonus:} Konstruktionsvorschrift für Instanzen mit Rate
$\to 2 - \frac1m$ bei beliebigem festen $m$ (mit OPT- und RR-Wert).
\end{enumerate}

\lsg
\textbf{a)} Angenommen $\mathrm{RR}(I) > 2\,\mathrm{OPT}(I)$. Sei $M_i$ die
Maschine mit maximaler Last; sie trägt die Jobs $J_i, J_{i+m}, J_{i+2m},
\dots$ Wegen der absteigenden Sortierung gilt für $l \ge 1$:
$p_{i+lm} \le p_j$ für alle $j \le lm$, insbesondere
\[
p_{i+lm} \;\le\; \frac1m \sum_{j=(l-1)m+1}^{lm} p_j .
\]
Summieren über $l \ge 1$ ergibt
$\mathrm{RR}(I) - p_i \le \frac1m \sum_j p_j \le \mathrm{OPT}(I)$. Mit
$p_i \le p_1 \le \mathrm{OPT}(I)$ folgt
$\mathrm{RR}(I) \le 2\,\mathrm{OPT}(I)$ -- Widerspruch zur Annahme.

\textbf{b)} Ein Job der Größe $m$ und $m(m-1)$ Jobs der Größe 1 (absteigend
sortiert steht der große zuerst). RoundRobin gibt Maschine 1 den großen Job
und danach reihum jede $m$-te Eins -- $m-1$ weitere:
$\mathrm{RR} = m + (m-1) = 2m - 1$. Optimal: großer Job allein, die
$m(m-1)$ Einsen auf die übrigen $m-1$ Maschinen (je $m$):
$\mathrm{OPT} = m$. Rate $\frac{2m-1}{m} = 2 - \frac1m$. (Für $m = 3$:
$\mathrm{RR} = 5$, $\mathrm{OPT} = 3$, Rate $\frac53$.)
\begin{center}
\begin{tikzpicture}[x=0.7cm,y=1cm]
  \node[left] at (-0.2,1.775) {\small $M_1$};
  \draw[fill=black!25] (0,1.5) rectangle (3,2.05); \node at (1.5,1.775) {\small $3$};
  \draw[fill=black!10] (3,1.5) rectangle (4,2.05); \node at (3.5,1.775) {\small $1$};
  \draw[fill=black!10] (4,1.5) rectangle (5,2.05); \node at (4.5,1.775) {\small $1$};
  \node[left] at (-0.2,1.025) {\small $M_2$};
  \draw[fill=black!10] (0,0.75) rectangle (1,1.3); \node at (0.5,1.025) {\small $1$};
  \draw[fill=black!10] (1,0.75) rectangle (2,1.3); \node at (1.5,1.025) {\small $1$};
  \node[left] at (-0.2,0.275) {\small $M_3$};
  \draw[fill=black!10] (0,0) rectangle (1,0.55); \node at (0.5,0.275) {\small $1$};
  \draw[fill=black!10] (1,0) rectangle (2,0.55); \node at (1.5,0.275) {\small $1$};
  \draw[dashed,thin] (5,-0.1) -- (5,2.05);
  \node at (2.5,-0.55) {\small RoundRobin: $\mathrm{RR}=5$};
  \begin{scope}[xshift=6.5cm]
  \node[left] at (-0.2,1.775) {\small $M_1$};
  \draw[fill=black!25] (0,1.5) rectangle (3,2.05); \node at (1.5,1.775) {\small $3$};
  \node[left] at (-0.2,1.025) {\small $M_2$};
  \node[left] at (-0.2,0.275) {\small $M_3$};
  \foreach \x in {0,1,2} {
    \draw[fill=black!10] (\x,0.75) rectangle (\x+1,1.3); \node at (\x+0.5,1.025) {\small $1$};
    \draw[fill=black!10] (\x,0) rectangle (\x+1,0.55); \node at (\x+0.5,0.275) {\small $1$};}
  \draw[dashed,thin] (3,-0.1) -- (3,2.05);
  \node at (1.5,-0.55) {\small Optimum: $\mathrm{OPT}=3$};
  \end{scope}
\end{tikzpicture}
\end{center}
\hfill$\square$

\newpage
% ==================================================================
\katkopf{Min-Edge-Cover: Güte 2 + Worst Case im Kreis}{Klausur SS23-N, A3, 6+4 P.}
\problem{Min-Edge-Cover}: Finde eine kleinste Kantenmenge $C$, sodass jeder
Knoten zu einer Kante aus $C$ inzident ist ($G$ zusammenhängend). Algorithmus
$A$: Gehe die Knoten in beliebiger Reihenfolge durch; ist der aktuelle Knoten
$v$ unbedeckt, füge eine beliebige zu $v$ inzidente Kante hinzu.
\begin{enumerate}
\item[a)] Zeigen Sie $A(G) \le 2\,\mathrm{OPT}(G)$.
\item[b)] Kreisgraph $G_n$ ($n \ge 4$ gerade): Größe eines Min-Edge-Covers?
Schlechteste Approximationsrate von $A$? Geben Sie Reihenfolge und
Kantenwahl an.
\end{enumerate}

\lsg
\textbf{a)} Der Algorithmus fügt höchstens eine Kante pro Knoten hinzu, also
$A(G) \le |V|$. Jede Kante deckt höchstens zwei Knoten, also braucht jedes
Edge Cover mindestens $|V|/2$ Kanten: $\mathrm{OPT}(G) \ge |V|/2$. Zusammen:
$A(G) \le |V| \le 2\,\mathrm{OPT}(G)$.

\textbf{b)} Im Kreis $G_n$ bilden $n/2$ paarweise disjunkte Kanten (jede
zweite Kreiskante) ein Edge Cover -- weniger geht nicht, also
$\mathrm{OPT} = n/2$.

Schlechteste Ausführung: Reihenfolge $1, 3, 4, 5, \dots, n$.
\begin{itemize}
\item Knoten 1 wählt $\{1,2\}$ -- deckt die zwei neuen Knoten 1 und 2.
\item Knoten 3 wählt $\{3,2\}$ -- 2 ist schon gedeckt, die Kante deckt nur
den neuen Knoten 3.
\item Knoten 4 wählt $\{4,3\}$ -- deckt nur den neuen Knoten 4.
\item Knoten 5 wählt $\{5,4\}$ -- deckt nur den neuen Knoten 5.
\item So weiter bis Knoten $n$: Er wählt $\{n, n-1\}$ -- deckt nur den neuen
Knoten $n$.
\end{itemize}
Nach der ersten Kante deckt jede weitere nur einen neuen Knoten: insgesamt
$1 + (n-2) = n - 1$ Kanten. Rate
\[
\frac{n-1}{n/2} = 2 - \frac2n \;\longrightarrow\; 2 .
\]
\begin{center}
\begin{tikzpicture}[scale=1]
  \foreach \i in {1,...,8}
    \node[knoten] (l\i) at ({90-(\i-1)*45}:1.7) {\small $\i$};
  \draw[black!50] (l8) -- (l1);
  \foreach \i/\j in {1/2,2/3,3/4,4/5,5/6,6/7,7/8}
    \draw[very thick] (l\i) -- (l\j);
  \node at (0,-2.7) {\small $A$: $n-1 = 7$ Kanten};
  \begin{scope}[xshift=7cm]
  \foreach \i in {1,...,8}
    \node[knoten] (r\i) at ({90-(\i-1)*45}:1.7) {\small $\i$};
  \foreach \i/\j in {2/3,4/5,6/7,8/1}
    \draw[black!50] (r\i) -- (r\j);
  \foreach \i/\j in {1/2,3/4,5/6,7/8}
    \draw[very thick] (r\i) -- (r\j);
  \node at (0,-2.7) {\small $\mathrm{OPT}$: $n/2 = 4$ Kanten};
  \end{scope}
\end{tikzpicture}
\end{center}
\hfill$\square$

\newpage
% ==================================================================
\katkopf{Christofides-Rate $3/2$ ist scharf}{Präsenz 13.2}
Leitergraph: $K_n$ ($n \bmod 4 = 2$), Kanten
$E_2 = \{\{i, i+2\}\} \cup \{\{2i+1, 2i+2\}\}$ mit Gewicht 1; alle übrigen
Distanzen $=$ kürzester Weg. Zeigen Sie: (a) $\mathrm{OPT} = n$; (b) es gibt
eine Ausführung von $\Delta$TSP2 mit Tourlänge $(n-1) + n/2$.

\emph{Hinweis ($\Delta$TSP2, Christofides):} (1) MST $T$; (2) $X$ = Knoten
mit ungeradem Grad in $T$; (3) minimales perfektes Matching $K$ auf $X$;
(4) Eulerkreis in $T + K$; (5) Abkürzen. Bei Gleichständen (mehrere MSTs,
mehrere Eulerkreise) darf die Ausführung beliebig -- auch ungünstigst --
gewählt werden.

\lsg
\textbf{a)} Die Tour \glqq oben hin, unten zurück\grqq{} --
$1, 3, 5, \dots, n-1, n, n-2, \dots, 2, 1$ -- benutzt $n$ Kanten vom Gewicht 1,
also $\mathrm{OPT} \le n$. Weniger geht nicht ($n$ Knoten brauchen $n$
Tourkanten vom Gewicht $\ge 1$): $\mathrm{OPT} = n$.

\textbf{b)} Bei Gleichständen darf die Ausführung (MST-Wahl,
Knotenreihenfolge) adversariell gewählt werden. Wähle den Zickzack-MST
\[
1\text{--}2,\ 2\text{--}4,\ 4\text{--}3,\ 3\text{--}5,\ 5\text{--}6,\
6\text{--}8,\ 8\text{--}7,\ \dots,\ \{n-1, n\}
\]
mit $n-1$ Kanten vom Gewicht 1: $d(T) = n - 1$. In diesem Baum haben nur die
Knoten 1 und $n$ ungeraden Grad, also ist das Matching $K = \{\{1, n\}\}$ --
Kosten $= $ kürzester Weg von 1 nach $n$ $= n/2$. Die Tour aus Eulerkreis und
Abkürzen hat damit Länge $d(T) + d(K) = (n-1) + n/2$.
\begin{center}
\begin{tikzpicture}[hell/.style={draw=black!20}]
  \node[knoten] (1) at (0,1.4)   {$1$};
  \node[knoten] (3) at (1.3,1.4) {$3$};
  \node[knoten] (5) at (2.6,1.4) {$5$};
  \node[knoten] (2) at (0,0)     {$2$};
  \node[knoten] (4) at (1.3,0)   {$4$};
  \node[knoten] (6) at (2.6,0)   {$6$};
  \draw[hell] (3) -- (4);
  \draw[very thick] (1) -- (3) -- (5) -- (6) -- (4) -- (2) -- (1);
  \node[align=center] at (1.3,-0.85)
    {\scriptsize opt.\ Tour (alle Kanten Gew.\ 1)\\[-2pt]
     \scriptsize $\mathrm{OPT}=n=6$};
\end{tikzpicture}\hspace{2mm}%
\begin{tikzpicture}[hell/.style={draw=black!20}]
  \node[kndick] (1) at (0,1.4)   {$1$};
  \node[knoten] (3) at (1.3,1.4) {$3$};
  \node[knoten] (5) at (2.6,1.4) {$5$};
  \node[knoten] (2) at (0,0)     {$2$};
  \node[knoten] (4) at (1.3,0)   {$4$};
  \node[kndick] (6) at (2.6,0)   {$6$};
  \foreach \u/\v in {1/3,3/5,2/4,4/6,3/4} \draw[hell] (\u) -- (\v);
  \draw[very thick] (1) -- (2) -- (4) -- (3) -- (5) -- (6);
  \node[align=center] at (1.3,-0.85)
    {\scriptsize Zickzack-MST, $d(T)=n{-}1=5$\\[-2pt]
     \scriptsize ungerade Grade nur bei $1$ und $n$};
\end{tikzpicture}\hspace{2mm}%
\begin{tikzpicture}[gw/.style={fill=white,inner sep=1pt,font=\scriptsize},
                    hell/.style={draw=black!20}]
  \node[kndick] (1) at (0,1.4)   {$1$};
  \node[knoten] (3) at (1.3,1.4) {$3$};
  \node[knoten] (5) at (2.6,1.4) {$5$};
  \node[knoten] (2) at (0,0)     {$2$};
  \node[knoten] (4) at (1.3,0)   {$4$};
  \node[kndick] (6) at (2.6,0)   {$6$};
  \foreach \u/\v in {1/3,3/5,2/4,4/6,3/4} \draw[hell] (\u) -- (\v);
  \draw[very thick] (1) -- (2) -- (4) -- (3) -- (5) -- (6);
  \draw[very thick,dashed] (1) .. controls (0.3,2.9) and (4.4,2.5) ..
    node[gw,pos=0.35,above] {$d(K)=n/2=3$} (6);
  \node[align=center] at (1.3,-0.85)
    {\scriptsize Matching $K=\{\{1,n\}\}$\\[-2pt]
     \scriptsize Tour: $(n{-}1)+n/2=8$};
\end{tikzpicture}
\end{center}

Rate: $\frac{n - 1 + n/2}{n} = \frac32 - \frac1n \to \frac32$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{Christofides anwenden ($K_4$)}{Klausur SS25-H, A1, 6+4 P.}
Gegeben sei folgender Graph $G = (V,E)$:
\begin{center}
\begin{tikzpicture}[gw/.style={fill=white,inner sep=1pt,font=\small}]
  \node[knoten] (a) at (0,2.4)   {$a$};
  \node[knoten] (b) at (2.4,2.4) {$b$};
  \node[knoten] (d) at (2.4,0)   {$d$};
  \node[knoten] (c) at (0,0)     {$c$};
  \draw (a) -- (b) node[gw,midway] {1};
  \draw (b) -- (d) node[gw,midway] {3};
  \draw (d) -- (c) node[gw,midway] {4};
  \draw (c) -- (a) node[gw,midway] {2};
  \draw (a) -- (d) node[gw,pos=0.3] {4};
  \draw (b) -- (c) node[gw,pos=0.3] {3};
\end{tikzpicture}
\end{center}
\begin{enumerate}
\item[a)] Wenden Sie Christofides ($\Delta$TSP2) auf den Graphen $G$ mit
Startknoten $a$ an; geben Sie alle Zwischengraphen an, auch Schritte ohne
Änderung.
\item[b)] Nennen Sie die zwei Zusatzeigenschaften der Eingabe, die
Christofides braucht, mit je einer verletzenden Eingabe. Geben Sie die Güte
an.
\end{enumerate}

\emph{Hinweis (Christofides):} (1) MST $T$ berechnen; (2) $X$ = Knoten mit
ungeradem Grad in $T$; (3) minimales perfektes Matching $K$ auf $X$;
(4) Eulerkreis im Multigraphen $T + K$; (5) Abkürzen.

\lsg
\textbf{a)}
\begin{itemize}
\item[(1)] MST (Kruskal): $\{a,b\}$ (1), $\{a,c\}$ (2), $\{b,d\}$ (3);
Gewicht 6.
\item[(2)] Ungerade Grade im MST: $a{:}\,2$, $b{:}\,2$, $c{:}\,1$, $d{:}\,1$
$\Rightarrow X = \{c,d\}$.
\item[(3)] Minimales perfektes Matching auf $X$: einzige Möglichkeit
$K = \{\{c,d\}\}$, Kosten 4.
\item[(4)] Multigraph $T + K$: alle Grade gerade. Eulerkreis ab $a$:
$[a, b, d, c, a]$, Kosten $1 + 3 + 4 + 2 = 10$.
\item[(5)] Abkürzen: kein Knoten doppelt -- keine Änderung (wird aber
geprüft). Tour $R = [a, b, d, c, a]$, Länge 10.
\end{itemize}
\begin{center}
\begin{tikzpicture}[gw/.style={fill=white,inner sep=1pt,font=\scriptsize},
                    hell/.style={draw=black!20}]
  \node[knoten] (a) at (0,1.7)   {$a$};
  \node[knoten] (b) at (1.7,1.7) {$b$};
  \node[knoten] (d) at (1.7,0)   {$d$};
  \node[knoten] (c) at (0,0)     {$c$};
  \foreach \u/\v in {c/d,a/d,b/c} \draw[hell] (\u) -- (\v);
  \draw[very thick] (a) -- (b) node[gw,midway] {1};
  \draw[very thick] (a) -- (c) node[gw,midway] {2};
  \draw[very thick] (b) -- (d) node[gw,midway] {3};
  \node at (0.85,-0.75) {\scriptsize (1) MST, Gewicht 6};
\end{tikzpicture}\hspace{3mm}%
\begin{tikzpicture}[hell/.style={draw=black!20}]
  \node[knoten]  (a) at (0,1.7)   {$a$};
  \node[knoten]  (b) at (1.7,1.7) {$b$};
  \node[kndick]  (d) at (1.7,0)   {$d$};
  \node[kndick]  (c) at (0,0)     {$c$};
  \foreach \u/\v in {c/d,a/d,b/c} \draw[hell] (\u) -- (\v);
  \draw[very thick] (a) -- (b);
  \draw[very thick] (a) -- (c);
  \draw[very thick] (b) -- (d);
  \node at (0.85,-0.75) {\scriptsize (2) $X=\{c,d\}$};
\end{tikzpicture}\hspace{3mm}%
\begin{tikzpicture}[gw/.style={fill=white,inner sep=1pt,font=\scriptsize}]
  \node[knoten]  (a) at (0,1.7)   {$a$};
  \node[knoten]  (b) at (1.7,1.7) {$b$};
  \node[kndick]  (d) at (1.7,0)   {$d$};
  \node[kndick]  (c) at (0,0)     {$c$};
  \draw[very thick] (a) -- (b);
  \draw[very thick] (a) -- (c);
  \draw[very thick] (b) -- (d);
  \draw[very thick,dashed] (c) -- (d) node[gw,midway] {4};
  \node at (0.85,-0.75) {\scriptsize (3) Matching $\{c,d\}$};
\end{tikzpicture}\hspace{3mm}%
\begin{tikzpicture}[gw/.style={fill=white,inner sep=1pt,font=\scriptsize},
                    hell/.style={draw=black!20}]
  \node[knoten] (a) at (0,1.7)   {$a$};
  \node[knoten] (b) at (1.7,1.7) {$b$};
  \node[knoten] (d) at (1.7,0)   {$d$};
  \node[knoten] (c) at (0,0)     {$c$};
  \foreach \u/\v in {a/d,b/c} \draw[hell] (\u) -- (\v);
  \draw[very thick,->] (a) -- (b) node[gw,midway] {1};
  \draw[very thick,->] (b) -- (d) node[gw,midway] {3};
  \draw[very thick,->] (d) -- (c) node[gw,midway] {4};
  \draw[very thick,->] (c) -- (a) node[gw,midway] {2};
  \node at (0.85,-0.75) {\scriptsize (4) Tour, L\"ange 10};
\end{tikzpicture}
\end{center}

\textbf{b)} Benötigt werden \emph{Symmetrie} ($d(u,v) = d(v,u)$) und die
\emph{Dreiecksungleichung} ($d(u,v) \le d(u,w) + d(w,v)$). Verletzende
Eingaben: $d(a,b) = 1$, $d(b,a) = 5$ (asymmetrisch); bzw.\ $d(a,b) = 10$,
$d(a,c) = d(c,b) = 1$ ($\Delta$-Ungleichung verletzt). Güte: $\frac32$.
\hfill$\square$

\newpage
% ==================================================================
\katkopf{$\Delta$TSP1 anwenden + Verständnisfragen}{Klausur SS25-N, A1, 5+1+2+2 P.}
Gegeben sei folgender Graph $G = (V,E)$:
\begin{center}
\begin{tikzpicture}[gw/.style={fill=white,inner sep=1pt,font=\small}]
  \node[knoten] (A) at (  90:2.1) {$A$};
  \node[knoten] (B) at (  18:2.1) {$B$};
  \node[knoten] (C) at ( -54:2.1) {$C$};
  \node[knoten] (D) at (-126:2.1) {$D$};
  \node[knoten] (E) at ( 162:2.1) {$E$};
  \draw (A) -- (B) node[gw,midway] {1};
  \draw (B) -- (C) node[gw,midway] {2};
  \draw (C) -- (D) node[gw,midway] {1};
  \draw (D) -- (E) node[gw,midway] {2};
  \draw (E) -- (A) node[gw,midway] {2};
  \draw (A) -- (C) node[gw,pos=0.25] {2};
  \draw (A) -- (D) node[gw,pos=0.25] {3};
  \draw (B) -- (D) node[gw,pos=0.25] {3};
  \draw (B) -- (E) node[gw,pos=0.25] {3};
  \draw (C) -- (E) node[gw,pos=0.25] {3};
\end{tikzpicture}
\end{center}
\begin{enumerate}
\item[a)] Wenden Sie $\Delta$TSP1 auf den Graphen $G$ ab Startknoten $C$
an; geben Sie alle Zwischengraphen und die Länge der Rundreise an.
\item[b)] Welche Güte hat $\Delta$TSP1?
\item[c)] Ist das Entscheidungsproblem zum TSP in $P$? Kurze Begründung.
\item[d)] Wahr oder falsch: \glqq Güte $1{,}5$ bedeutet
$\frac{d(R)}{\mathrm{OPT}(I)} \ge 1{,}5$ für eine Instanz $I$.\grqq{}
Kurze Begründung.
\end{enumerate}

\emph{Hinweis ($\Delta$TSP1):} (1) MST $T$ berechnen; (2) alle MST-Kanten
verdoppeln; (3) Eulerkreis ab Startknoten; (4) Abkürzen: bereits besuchte
Knoten überspringen.

\lsg
\textbf{a)}
\begin{itemize}
\item[(1)] MST: $A$--$B$ (1), $C$--$D$ (1), $B$--$C$ (2), $A$--$E$ (2);
Gewicht 6.
\item[(2)] Verdoppeln: Multigraph, Gewicht 12.
\item[(3)] Eulerkreis ab $C$: $[C,B,A,E,A,B,C,D,C]$.
\item[(4)] Abkürzen: Tour $[C,B,A,E,D,C]$, Länge \textbf{8}.
\end{itemize}
\begin{center}
\begin{tikzpicture}[gw/.style={fill=white,inner sep=1pt,font=\scriptsize},
                    hell/.style={draw=black!20}]
  \node[knoten] (A) at (  90:1.2) {$A$};
  \node[knoten] (B) at (  18:1.2) {$B$};
  \node[knoten] (C) at ( -54:1.2) {$C$};
  \node[knoten] (D) at (-126:1.2) {$D$};
  \node[knoten] (E) at ( 162:1.2) {$E$};
  \foreach \u/\v in {A/C,A/D,B/D,B/E,C/E,D/E} \draw[hell] (\u) -- (\v);
  \draw[very thick] (A) -- (B) node[gw,midway] {1};
  \draw[very thick] (C) -- (D) node[gw,midway] {1};
  \draw[very thick] (B) -- (C) node[gw,midway] {2};
  \draw[very thick] (A) -- (E) node[gw,midway] {2};
  \node at (0,-1.9) {\scriptsize (1) MST, Gewicht 6};
\end{tikzpicture}\hspace{2mm}%
\begin{tikzpicture}
  \node[knoten] (A) at (  90:1.2) {$A$};
  \node[knoten] (B) at (  18:1.2) {$B$};
  \node[knoten] (C) at ( -54:1.2) {$C$};
  \node[knoten] (D) at (-126:1.2) {$D$};
  \node[knoten] (E) at ( 162:1.2) {$E$};
  \foreach \u/\v in {A/B,C/D,B/C,A/E}{
    \draw[thick] (\u) to[bend left=12] (\v);
    \draw[thick] (\u) to[bend right=12] (\v);}
  \node at (0,-1.9) {\scriptsize (2) verdoppelt, Gewicht 12};
\end{tikzpicture}\hspace{2mm}%
\begin{tikzpicture}[nr/.style={fill=white,inner sep=1pt,font=\scriptsize}]
  \node[knoten] (A) at (  90:1.2) {$A$};
  \node[knoten] (B) at (  18:1.2) {$B$};
  \node[knoten] (C) at ( -54:1.2) {$C$};
  \node[knoten] (D) at (-126:1.2) {$D$};
  \node[knoten] (E) at ( 162:1.2) {$E$};
  \draw[->] (C) to[bend left=18] node[nr] {1} (B);
  \draw[->] (B) to[bend left=18] node[nr] {2} (A);
  \draw[->] (A) to[bend left=18] node[nr] {3} (E);
  \draw[->] (E) to[bend left=18] node[nr] {4} (A);
  \draw[->] (A) to[bend left=18] node[nr] {5} (B);
  \draw[->] (B) to[bend left=18] node[nr] {6} (C);
  \draw[->] (C) to[bend left=18] node[nr] {7} (D);
  \draw[->] (D) to[bend left=18] node[nr] {8} (C);
  \node at (0,-1.9) {\scriptsize (3) Eulerkreis ab $C$};
\end{tikzpicture}\hspace{2mm}%
\begin{tikzpicture}[gw/.style={fill=white,inner sep=1pt,font=\scriptsize},
                    hell/.style={draw=black!20}]
  \node[knoten] (A) at (  90:1.2) {$A$};
  \node[knoten] (B) at (  18:1.2) {$B$};
  \node[knoten] (C) at ( -54:1.2) {$C$};
  \node[knoten] (D) at (-126:1.2) {$D$};
  \node[knoten] (E) at ( 162:1.2) {$E$};
  \foreach \u/\v in {A/C,A/D,B/D,B/E,C/E} \draw[hell] (\u) -- (\v);
  \draw[very thick,->] (C) -- (B) node[gw,midway] {2};
  \draw[very thick,->] (B) -- (A) node[gw,midway] {1};
  \draw[very thick,->] (A) -- (E) node[gw,midway] {2};
  \draw[very thick,->] (E) -- (D) node[gw,midway] {2};
  \draw[very thick,->] (D) -- (C) node[gw,midway] {1};
  \node at (0,-1.9) {\scriptsize (4) Tour, L\"ange 8};
\end{tikzpicture}
\end{center}

\textbf{b)} Güte 2.

\textbf{c)} Nein (außer $P = NP$): Das TSP-Entscheidungsproblem ist
NP-vollständig -- \problem{HamiltonianCycle} reduziert darauf (Kanten Distanz
1, Nicht-Kanten $|V|{+}1$, $L = |V|$). Läge es in $P$, folgte $P = NP$.

\textbf{d)} Falsch. Multiplikative Güte $\alpha$ ist eine \emph{obere}
Schranke für alle Instanzen: $d(R) \le \alpha \cdot \mathrm{OPT}(I)$ für
\emph{jede} Instanz $I$ -- nicht eine untere Schranke $\ge$ für eine Instanz.
\hfill$\square$

\newpage
% ==================================================================
\katkopf{Parallel-Task-Scheduling}{Klausur SS25-H, A5, 1+1+8+(10) P.}
Jobs belegen $q_j \in [m]$ Maschinen gleichzeitig für Zeit $p_j$.
ListScheduling platziert die Jobs der Reihe nach zum frühestmöglichen
Zeitpunkt auf den $q_j$ am wenigsten belasteten Maschinen.
\begin{enumerate}
\item[a)] Anwendung: $m = 3$; Jobs $(p, q)$: $(1,1), (1,3), (2,2), (3,1)$.
Geben Sie den Schedule an.
\item[b)] Worst-Case-Güte für $q_j = 1$?
\item[c)] Zeigen Sie $\mathrm{LS}(I) \le \mathrm{OPT}(I) + \frac12 p_{\max}$
für alle $I$ mit $\frac m3 < q_j \le \frac m2$.
\item[d)] \textbf{Bonus:} Güte für $\frac{m}{k+1} < q_j \le \frac mk$
($k \ge 2$)? Beweis.
\end{enumerate}

\lsg
\textbf{a)} Start mit Lasten $C = (0,0,0)$:
\begin{itemize}
\item Job 1 $(1,1)$: startet bei 0 auf einer Maschine -- $C = (1,0,0)$.
\item Job 2 $(1,3)$: braucht alle 3 Maschinen, frühester Start
$\max C = 1$, läuft $[1,2]$ -- $C = (2,2,2)$.
\item Job 3 $(2,2)$: Start 2 auf zwei Maschinen, läuft $[2,4]$ --
$C = (4,4,2)$.
\item Job 4 $(3,1)$: leerste Maschine hat Last 2, Start 2, läuft $[2,5]$ --
$C = (5,4,4)$.
\end{itemize}
\textbf{Makespan 5.}
\begin{center}
\begin{tikzpicture}[x=1.3cm,y=1cm]
  \node[left] at (-0.15,2.0) {\small $M_1$};
  \node[left] at (-0.15,1.2) {\small $M_2$};
  \node[left] at (-0.15,0.4) {\small $M_3$};
  \draw[black!40,thin] (0,0.8) rectangle (1,1.6);
  \draw[black!40,thin] (0,0) rectangle (1,0.8);
  \draw[black!40,thin] (4,1.6) rectangle (5,2.4);
  \draw[black!40,thin] (4,0.8) rectangle (5,1.6);
  \draw[fill=black!10] (0,1.6) rectangle (1,2.4);
  \node at (0.5,2.0) {\small $J_1$};
  \draw[fill=black!25] (1,0) rectangle (2,2.4);
  \node at (1.5,1.2) {\small $J_2$};
  \draw[fill=black!10] (2,0.8) rectangle (4,2.4);
  \node at (3,1.6) {\small $J_3$};
  \draw[fill=black!25] (2,0) rectangle (5,0.8);
  \node at (3.5,0.4) {\small $J_4$};
  \draw[dashed,thin] (5,-0.35) -- (5,2.6);
  \node[above] at (5,2.6) {\small $C_{\max}=5$};
  \draw[->,thin] (0,-0.35) -- (5.6,-0.35) node[below] {\small $t$};
  \foreach \x in {0,1,2,3,4,5} {
    \draw[thin] (\x,-0.42) -- (\x,-0.28);
    \node[below] at (\x,-0.45) {\small $\x$};}
\end{tikzpicture}
\end{center}

\textbf{b)} Für $q_j = 1$ ist es das klassische ListScheduling: Güte
$2 - \frac1m$.

\textbf{c)} Sei $j$ ein Job, der den Makespan bestimmt, mit Startzeit
$s = \mathrm{LS} - p_j$. Zu jedem Zeitpunkt $t < s$ sind weniger als $q_j \le
\frac m2$ Maschinen frei (sonst wäre $j$ früher platziert worden), also mehr
als $\frac m2$ belegt. Da jeder Job höchstens $\frac m2$ Maschinen belegt,
laufen dann mindestens zwei Jobs; da jeder \emph{mehr} als $\frac m3$ belegt,
laufen höchstens zwei. Also laufen in $[0, s)$ stets \emph{genau zwei} Jobs.
Damit ist
\[
2s = \int_0^s \#\text{laufende Jobs}\, dt \;\le\; \sum_i p_i - p_j .
\]
Im Optimum laufen ebenfalls nie drei Jobs gleichzeitig (drei Jobs belegen
zusammen mehr als $3 \cdot \frac m3 = m$ Maschinen -- mehr als vorhanden),
also $\sum_i p_i \le 2\,\mathrm{OPT}$. Einsetzen:
$s \le \frac12(\sum_i p_i - p_j) \le \mathrm{OPT} - \frac12 p_j$, folglich
\[
\mathrm{LS} = s + p_j \;\le\; \mathrm{OPT} + \tfrac12 p_j
\;\le\; \mathrm{OPT} + \tfrac12 p_{\max}.
\]

\textbf{d)} Güte $2 - \frac1k$. Analog: Vor dem Start von $j$ sind mehr als
$m - \frac mk = \frac{(k-1)m}{k}$ Maschinen belegt; jeder Job belegt
$\le \frac mk$, also laufen $\ge k$ Jobs -- und $\le k$, da jeder
$> \frac{m}{k+1}$ belegt. Genau $k$ Jobs: $k s \le \sum_i p_i - p_j$. Im
Optimum laufen $\le k$ Jobs parallel, also
$\sum_i p_i \le k\,\mathrm{OPT}$. Daraus
$s \le \mathrm{OPT} - \frac1k p_j$ und
$\mathrm{LS} \le \mathrm{OPT} + (1 - \frac1k) p_j \le \mathrm{OPT} +
(1 - \frac1k) p_{\max} \le (2 - \frac1k)\,\mathrm{OPT}$ (mit
$p_{\max} \le \mathrm{OPT}$). \hfill$\square$

\newpage
% ==================================================================
\katkopf{Strip Packing: NFDH}{Klausur SS25-N, A5, 2+3+5+(10) P.}
\problem{StripPacking}: Rechtecke (nach Höhe absteigend sortiert) in einen
Streifen der Breite 1 packen, Höhe minimieren. NFDH packt stufenweise von
links; passt ein Rechteck nicht mehr, beginnt eine neue Stufe.
\begin{enumerate}
\item[a)] Instanz: fünf Rechtecke der Höhe 1 mit Breiten
$\frac12, \frac14, \frac12, \frac14, \frac12$; NFDH braucht Höhe 3. Geben Sie
eine optimale Packung und die Approximationsrate an.
\item[b)] Zeigen Sie: Es gibt $L_n$ mit
$\lim_{n\to\infty} \mathrm{NFDH}(L_n)/\mathrm{OPT}(L_n) = 2$.
\item[c)] Zeigen Sie für Instanzen mit $h(r_i) = 1$:
$\mathrm{NFDH}(L) \le 2\,\mathrm{OPT}(L) + 1$.
\item[d)] \textbf{Bonus:} Zeigen Sie dieselbe Schranke für $h(r_i) \le 1$.
\end{enumerate}

\lsg
\textbf{a)} Optimal: Stufe 1 mit $\frac12 + \frac12 = 1$ (Rechtecke 1 und 3),
Stufe 2 mit $\frac12 + \frac14 + \frac14 = 1$ (Rechtecke 5, 2, 4) -- Höhe
$\mathrm{OPT} = 2$. Rate: $\frac{3}{2}$.
\begin{center}
\begin{tikzpicture}[x=4.2cm,y=0.85cm]
  \draw[thin] (0,3.35) -- (0,0) -- (1,0) -- (1,3.35);
  \draw[fill=black!25] (0,0) rectangle (0.5,1);
  \node at (0.25,0.5) {\small $r_1\,(\tfrac12)$};
  \draw[fill=black!10] (0.5,0) rectangle (0.75,1);
  \node at (0.625,0.5) {\scriptsize $r_2\,(\tfrac14)$};
  \draw[fill=black!25] (0,1) rectangle (0.5,2);
  \node at (0.25,1.5) {\small $r_3\,(\tfrac12)$};
  \draw[fill=black!10] (0.5,1) rectangle (0.75,2);
  \node at (0.625,1.5) {\scriptsize $r_4\,(\tfrac14)$};
  \draw[fill=black!25] (0,2) rectangle (0.5,3);
  \node at (0.25,2.5) {\small $r_5\,(\tfrac12)$};
  \draw[dashed,thin] (0,3) -- (1,3);
  \node[right] at (1.03,3) {\small $\mathrm{NFDH}=3$};
  \node at (0.5,-0.55) {\small Breite $1$};
  \begin{scope}[xshift=8.8cm]
  \draw[thin] (0,3.35) -- (0,0) -- (1,0) -- (1,3.35);
  \draw[fill=black!25] (0,0) rectangle (0.5,1);
  \node at (0.25,0.5) {\small $r_1\,(\tfrac12)$};
  \draw[fill=black!25] (0.5,0) rectangle (1,1);
  \node at (0.75,0.5) {\small $r_3\,(\tfrac12)$};
  \draw[fill=black!25] (0,1) rectangle (0.5,2);
  \node at (0.25,1.5) {\small $r_5\,(\tfrac12)$};
  \draw[fill=black!10] (0.5,1) rectangle (0.75,2);
  \node at (0.625,1.5) {\scriptsize $r_2\,(\tfrac14)$};
  \draw[fill=black!10] (0.75,1) rectangle (1,2);
  \node at (0.875,1.5) {\scriptsize $r_4\,(\tfrac14)$};
  \draw[dashed,thin] (0,2) -- (1,2);
  \node[right] at (1.03,2) {\small $\mathrm{OPT}=2$};
  \node at (0.5,-0.55) {\small Breite $1$};
  \end{scope}
\end{tikzpicture}
\end{center}

\textbf{b)} $L_n$ ($n = 2t$): alle Höhen 1; Breiten abwechselnd $1$ und
$\varepsilon$. NFDH: Jedes Breite-1-Rechteck füllt seine Stufe komplett, jedes
$\varepsilon$-Rechteck eröffnet eine neue Stufe, auf die das nächste
Breite-1-Rechteck nicht mehr passt -- $2t$ Stufen, $\mathrm{NFDH} = 2t$.
Optimal: die $t$ Breite-1-Rechtecke je eigene Stufe, alle $t$
$\varepsilon$-Rechtecke zusammen auf eine Stufe -- $\mathrm{OPT} \le t + 1$.
Rate $\frac{2t}{t+1} \to 2$.
\begin{center}
\begin{tikzpicture}[x=4.0cm,y=0.55cm]
  \draw[thin] (0,6.5) -- (0,0) -- (1,0) -- (1,6.5);
  \foreach \y in {0,2,4} {
    \draw[fill=black!25] (0,\y) rectangle (1,\y+1);
    \node at (0.5,\y+0.5) {\small $1$};
    \draw[fill=black!10] (0,\y+1) rectangle (0.06,\y+2);
    \node[right] at (0.09,\y+1.5) {\small $\varepsilon$};}
  \draw[dashed,thin] (0,6) -- (1,6);
  \node[right] at (1.03,6) {\small $\mathrm{NFDH}=2t$};
  \node at (0.5,-1.0) {\small NFDH: jede Stufe ein Rechteck};
  \begin{scope}[xshift=8.8cm]
  \draw[thin] (0,6.5) -- (0,0) -- (1,0) -- (1,6.5);
  \foreach \y in {0,1,2} {
    \draw[fill=black!25] (0,\y) rectangle (1,\y+1);
    \node at (0.5,\y+0.5) {\small $1$};}
  \foreach \x in {0,0.09,0.18}
    \draw[fill=black!10] (\x,3) rectangle (\x+0.06,4);
  \node[right] at (0.28,3.5) {\small $t$ mal $\varepsilon$};
  \draw[dashed,thin] (0,4) -- (1,4);
  \node[right] at (1.03,4) {\small $\mathrm{OPT}\le t+1$};
  \node at (0.5,-1.0) {\small OPT: alle $\varepsilon$ auf eine Stufe};
  \end{scope}
\end{tikzpicture}
\end{center}

\textbf{c)} Seien $W_1, \dots, W_S$ die Gesamtbreiten der NFDH-Stufen;
$\mathrm{NFDH} = S$. Für $i < S$ gilt $W_i + W_{i+1} > 1$: Das erste Rechteck
der Stufe $i{+}1$ (Breite $\le W_{i+1}$) passte nicht mehr auf Stufe $i$.
Summieren über $i = 1, \dots, S-1$:
\[
2 \sum_i W_i \;\ge\; \sum_{i=1}^{S-1} (W_i + W_{i+1}) \;>\; S - 1 .
\]
Die Gesamtfläche ist $\sum_i W_i$ (Höhen 1) und passt in einen Streifen der
Breite 1: $\mathrm{OPT} \ge \sum_i W_i$. Also $2\,\mathrm{OPT} > S - 1$,
d.\,h.\ $\mathrm{NFDH} = S \le 2\,\mathrm{OPT} + 1$.

\textbf{d)} Zu zeigen ist $\mathrm{NFDH}(L) \le 2\,\mathrm{OPT}(L) + 1$
auch für Höhen $h(r_i) \le 1$. Sei $H_i$ die Höhe der Stufe $i$ ($=$ Höhe
ihres ersten Rechtecks), $W_i$ ihre Gesamtbreite und $A_i$ ihre
Rechteck-Gesamtfläche.

\textbf{Erstens:} Jedes Rechteck der Stufe $i$ hat Höhe $\ge H_{i+1}$
(absteigende Sortierung). Die Rechtecke der Stufe $i$ haben zusammen die
Breite $W_i$, also
\[
A_i \;\ge\; W_i \cdot H_{i+1} .
\]

\textbf{Zweitens:} Das \emph{erste} Rechteck der Stufe $i{+}1$ passte nicht
mehr auf Stufe $i$. Es hat also Breite $> 1 - W_i$ und Höhe $H_{i+1}$,
folglich
\[
\text{Fläche des ersten Rechtecks von Stufe } i{+}1 \;>\; (1 - W_i)\, H_{i+1} .
\]

\textbf{Kombination:} Zerlege $H_{i+1}$ in die beiden Anteile und setze
Erstens und Zweitens ein:
\[
H_{i+1} \;=\; W_i H_{i+1} + (1 - W_i) H_{i+1}
\;<\; A_i + \bigl(\text{Fläche des ersten Rechtecks von Stufe } i{+}1\bigr).
\]

\textbf{Summierung:} Summiere die Kombination über $i \ge 1$. Dabei zählt
jede Stufe höchstens zweimal: einmal als $A_i$ und einmal über ihr erstes
Rechteck. Also
\[
\sum_{i \ge 2} H_i \;<\; 2 \cdot \text{Gesamtfläche} \;\le\; 2\,\mathrm{OPT} .
\]

\textbf{Fazit:} Die erste Stufe hat Höhe $H_1 \le 1$. Damit folgt
\[
\mathrm{NFDH} \;=\; \sum_i H_i \;\le\; 2\,\mathrm{OPT} + 1 .
\]
\hfill$\square$

\newpage
% ##################################################################
\section{Wahr oder falsch?}
% ##################################################################

% ==================================================================
\katkopf{Fragen über Fragen I}{Präsenz 10.1}
Diskutieren Sie:
\begin{enumerate}
\item[(i)] Für jede Sprache, die eine NDTM in polynomieller Zeit akzeptiert,
existiert eine DTM, die sie in polynomieller Zeit akzeptiert.
\item[(ii)] $A$ ist NP-schwer $\implies A \in P$.
\end{enumerate}

\lsg
\textbf{(i)} Gilt genau dann, wenn $P = NP$: Dann liegen alle NDTM-polynomiell
lösbaren Probleme ($= \NP$) auch in $P$. Falls $P \ne NP$, gilt sie nicht --
ein Problem aus $\NP \setminus P$ wäre sonst per DTM-Simulation in $P$.

\textbf{(ii)} Falsch. Es gibt NP-schwere Probleme, die nicht einmal in $\NP$
liegen, z.\,B.\ das Halteproblem -- diese liegen erst recht nicht in $P$.
(NP-schwer ist eine untere Schranke, $\in \NP$ eine obere; beides zusammen
ist NP-vollständig.) \hfill$\square$

\newpage
% ==================================================================
\katkopf{Fragen über Fragen II}{Präsenz 11.1}
Wahr oder falsch?
\begin{enumerate}
\item[a)] Für $L \in \NP$ gilt: aus $L \redp \problem{3-SAT}$ folgt, dass $L$
NP-vollständig ist.
\item[b)] Gilt $L \redp \problem{3-SAT}$ und $\problem{3-SAT} \redp L$, dann
ist $L$ NP-vollständig.
\item[c)] Sei $L$ NP-vollständig. Dann gilt $L \in P \iff P = NP$.
\item[d)] Es ist möglich, dass $\problem{3-SAT} \in P$ und
$\problem{Clique} \notin P$.
\end{enumerate}

\lsg
\textbf{a)} Falsch. Gegenbeispiel $L = \emptyset \in \NP$: $L \redp
\problem{3-SAT}$ sagt nur, dass sich $L$ \emph{auf} 3-SAT reduzieren lässt --
nicht umgekehrt, also keine Schwere.

\textbf{b)} Wahr. $\problem{3-SAT} \redp L$ gibt die NP-Schwere (3-SAT ist
NP-vollständig, Transitivität); $L \redp \problem{3-SAT}$ gibt $L \in \NP$.
Das ist die Definition von NP-vollständig.

\textbf{c)} Wahr. Jedes $L' \in \NP$ reduziert auf $L$; liegt $L$ in $P$, dann
auch jedes $L'$ -- also $P = NP$. Umgekehrt folgt aus $P = NP$ sofort
$L \in P$, da $L \in \NP$.

\textbf{d)} Falsch. \problem{Clique} $\in \NP$ reduziert auf das
NP-vollständige \problem{3-SAT}; aus $\problem{3-SAT} \in P$ folgt also
$\problem{Clique} \in P$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{Wenn die ETH fehlschlägt, gilt $P = NP$?}{Klausur SS24-H, A6 (Bonus), 10 P.}
Die \emph{Exponentialzeithypothese} (ETH) besagt: \problem{3-SAT} mit $n$
Variablen ist nicht in Zeit $2^{o(n)} \cdot |I|^{O(1)}$ lösbar.

Beweisen oder widerlegen Sie: Wenn die ETH fehlschlägt, gilt $P = NP$.

\lsg
\textbf{Die Aussage ist falsch} (nicht beweisbar; die Implikation gilt nicht).

\glqq ETH fehlschlägt\grqq{} bedeutet nur: \problem{3-SAT} ist in
$2^{o(n)} \cdot |I|^{O(1)}$ lösbar -- also subexponentiell mal ein Polynom.
Subexponentiell ist
nicht polynomiell: Eine Laufzeit wie $2^{\sqrt{n}}$ erfüllt $2^{o(n)}$, ist
aber superpolynomiell. Ein Fehlschlagen der ETH wäre also damit verträglich,
dass \problem{3-SAT} (und damit alle NP-Probleme) zwar in $2^{\sqrt n}$, aber
nicht in Polynomialzeit lösbar sind -- $P \ne NP$ bliebe möglich.
\begin{center}
\begin{tikzpicture}[plab/.style={font=\scriptsize,align=center}]
  \draw[->] (0,0) -- (12.2,0) node[below right,plab] {Wachstum};
  \foreach \x/\l in {1.6/{$n^c$ (polynomiell)}, 6.0/{$2^{\sqrt n}$}, 10.4/{$2^n$ (exponentiell)}} {
    \draw (\x,-0.08) -- (\x,0.08);
    \node[above,font=\small] at (\x,0.15) {\l};
  }
  \node[font=\small] at (3.8,0.4) {$\ll$};
  \node[font=\small] at (8.2,0.4) {$\ll$};
  \draw (0.2,-0.5) -- (0.2,-0.7) -- (3.0,-0.7) -- (3.0,-0.5);
  \node[below,plab] at (1.6,-0.75) {$P$};
  \draw (0.2,-1.5) -- (0.2,-1.7) -- (7.4,-1.7) -- (7.4,-1.5);
  \node[below,plab] at (3.8,-1.75) {$2^{o(n)}\cdot|I|^{O(1)}$ --- hier landet 3-SAT, wenn die ETH fehlschl\"agt};
  \draw[->] (6.0,1.6) -- (6.0,0.75);
  \node[above,plab] at (6.0,1.65) {subexponentiell, aber NICHT polynomiell\\
    $\Rightarrow$ ETH kann fehlschlagen, ohne dass $P=NP$ gilt};
\end{tikzpicture}
\end{center}

Die Umkehrung gilt dagegen: Aus $P = NP$ folgt \problem{3-SAT} $\in P
\subseteq 2^{o(n)}$, also wäre die ETH falsch. Die behauptete Richtung folgt
daraus nicht. \hfill$\square$

\newpage
% ##################################################################
\section{Turingmaschinen}
% ##################################################################

% ==================================================================
\katkopf{TM für Palindrome}{Hausaufgabe 10.2, 5 P.}
Entwerfen Sie eine Turingmaschine (Einband-TM) für
$L = \{w \in \Sigma^* \mid w \text{ ist ein Palindrom}\}$ und geben Sie die
Laufzeit an (mit Begründung von Korrektheit und Laufzeit).

\bspkopf{TM für Palindrome}
\textbf{Instanz.} Eingabe $w=\mathtt{abba}$ (ein Palindrom).

\textbf{Kern.} Die Maschine vergleicht wiederholt den ersten und den letzten
unmarkierten Buchstaben und ersetzt gleiche Paare durch $x$. Der Bandinhalt
läuft über $\mathtt{abba}\to\mathtt{xbbx}\to\mathtt{xxxx}$; kein unmarkierter
Buchstabe bleibt übrig -- die Maschine akzeptiert.


\lsg
\textbf{Die Maschine:}
\begin{enumerate}
\item[(1)] Falls kein Wort auf dem Band steht, akzeptiere.
\item[(2)] Falls nur ein Buchstabe auf dem Band steht, akzeptiere.
\item[(3)] Lies den ersten Buchstaben, bewege den Kopf zum letzten. Sind beide
verschieden, verwirf. Sonst ersetze beide durch ein neues Symbol $x$ (erst den
letzten, dann zurück zum ersten).
\item[(4)] Gehe zu Schritt (1).
\end{enumerate}

\textbf{Korrektheit:} Die Maschine vergleicht wiederholt den ersten und den
letzten (unmarkierten) Buchstaben und streicht beide. Bei Ungleichheit ist das
Wort kein Palindrom -- verwerfen. Sonst endet sie in der Mitte mit einem oder
keinem Buchstaben -- in beiden Fällen ein Palindrom, akzeptieren.

\textbf{Laufzeit:} Die Schritte (1)--(3) kosten je $O(n)$. Pro Durchlauf
werden zwei Buchstaben gestrichen, also gibt es höchstens
$\lfloor n/2 \rfloor$ Durchläufe. Insgesamt $O(n^2)$. \hfill$\square$

\newpage
% ==================================================================
\katkopf{TM für $L = \{0^{2^n}\}$ + RAM-Vergleich}{Präsenz 10.3}
Entwerfen Sie eine Turingmaschine (Einband-TM) für
$L = \{0^{2^n} \mid n \in \mathbb{N}\}$ über $\Sigma = \{0\}$; begründen Sie
Korrektheit und Laufzeit. Diskutieren Sie die Laufzeit im Vergleich zu einem
RAM-Algorithmus.

\bspkopf{TM für $L=\{0^{2^n}\}$}
\textbf{Instanz.} Eingabe $w=\mathtt{0000}$ ($=0^{2^2}$, also in $L$).

\textbf{Kern.} Jeder Durchlauf ersetzt jede zweite $0$ durch $x$ und halbiert
so die Anzahl der Nullen: $\mathtt{0000}\to\mathtt{0x0x}\to\mathtt{0xxx}$.
Nie tritt eine ungerade Anzahl $>1$ auf, am Ende bleibt genau eine $0$ --
die Maschine akzeptiert.


\lsg
\textbf{Die Maschine:}
\begin{enumerate}
\item[(1)] Falls genau eine 0 auf dem Band steht, akzeptiere.
\item[(2)] Laufe über das Band und ersetze jede zweite 0 durch $x$.
\item[(3)] Falls das letzte Symbol eine 0 war (ungerade Anzahl), verwirf.
\item[(4)] Gehe zu Schritt (1).
\end{enumerate}

\textbf{Korrektheit:} Eine Zahl ist genau dann eine Zweierpotenz, wenn
wiederholtes Halbieren bei 1 endet, ohne je auf eine ungerade Zahl $> 1$ zu
treffen. Genau das prüft die Maschine: Jeder Durchlauf halbiert die Anzahl der
Nullen; eine ungerade Anzahl $> 1$ führt zum Verwerfen.

\textbf{Laufzeit:} Jeder Durchlauf kostet $O(n)$; die Anzahl halbiert sich pro
Durchlauf, also $O(\log n)$ Durchläufe. Insgesamt $O(n \log n)$.

\textbf{RAM-Vergleich:} Ein RAM-Algorithmus zählt die Nullen ($O(n)$) und
prüft, ob die Anzahl eine Zweierpotenz ist ($O(\log n)$) -- Laufzeit $O(n)$.
Der wahlfreie Speicherzugriff erlaubt es, die Aufgabe schneller zu lösen als
die kopfbewegungsgebundene Turingmaschine. \hfill$\square$

\end{document}
