\documentclass[11pt]{article} \input{style_guide.tex} \setlength{\parskip}{0.4em} % 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{Gültiges Zertifikat} $S = \{1,2\}$ -- die Entscheidungsfolge $(\text{ja}, \text{ja}, \text{nein})$ der NTM wählt genau diese Menge. Der Verifizierer rechnet \[ \sum_{i\in S} w_i = 2+3 = 5 \le K, \qquad \sum_{i\in S} p_i = 3+4 = 7 \ge P, \] beide Bedingungen erfüllt -- er \emph{akzeptiert}. \textbf{Ungültige Zertifikate.} \begin{itemize} \item $S = \{1,2,3\}$: Gewicht $2+3+5 = 10 > 5$ -- Kapazität verletzt, verworfen. \item $S = \{3\}$: Profit $6 < 7$ -- Zielprofit verfehlt, verworfen. \end{itemize} \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{Gültiges Zertifikat} $C=\{1,3\}$ (grau markiert) -- die Entscheidungsfolge $(\text{ja},\text{nein},\text{ja},\text{nein})$ des nichtdeterministischen Algorithmus wählt genau diese Menge. Der Verifizierer prüft jede Kante auf einen Endpunkt in $C$: \[ \{1,2\}\colon 1\in C,\quad \{2,3\}\colon 3\in C,\quad \{3,4\}\colon 3\in C,\quad \{4,1\}\colon 1\in C. \] Jede Kante gedeckt und $|C|=2\le k$ -- er \emph{akzeptiert}. \textbf{Ungültige Zertifikate.} \begin{itemize} \item $C=\{1,2\}$: Kante $\{3,4\}$ ungedeckt ($3\notin C$, $4\notin C$) -- verworfen. \item $C=\{2\}$: zwar $|C|\le k$, aber $\{3,4\}$ und $\{4,1\}$ ungedeckt -- verworfen. \end{itemize} \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{Gültiges Zertifikat} $X=\{2\}$ (grau markiert). In $G\setminus X$ bleiben nur $3{\to}1$ und $3{\to}4$; die topologische Sortierung $(3,1,4)$ gelingt -- $G\setminus X$ ist kreisfrei und $|X|=1\le k$ -- \emph{akzeptiert}. \textbf{Ungültige Zertifikate.} \begin{itemize} \item $X=\{4\}$: 4 liegt auf keinem Kreis, der Kreis $1{\to}2{\to}3{\to}1$ bleibt -- die topologische Sortierung scheitert -- verworfen. \item $X=\emptyset$: $|X|\le k$, aber der Kreis bleibt -- verworfen. \end{itemize} \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{Gültiges Zertifikat} $(1,2,3,4)$ (fetter Pfad). Der Verifizierer prüft: alle vier Knoten paarweise verschieden, und die Kanten $\{1,2\},\{2,3\},\{3,4\}$ existieren -- \emph{akzeptiert} (einfacher Pfad der Länge $3\ge k$). \textbf{Ungültige Zertifikate.} \begin{itemize} \item $(1,2,4,3)$: Kante $\{2,4\}$ existiert nicht -- verworfen. \item $(1,2,2,3)$: Knoten 2 doppelt (nicht paarweise verschieden) -- verworfen. \end{itemize} \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{Gültiges Zertifikat} $D=\{1\}$ (grau markiert) -- die Entscheidungsfolge $(\text{ja}, \text{nein}, \text{nein}, \text{nein})$ der NTM wählt genau diese Menge. Der Verifizierer prüft jeden Knoten: $1\in D$; die Blätter $2,3,4$ sind je zu $1\in D$ benachbart. Alle Knoten dominiert und $|D|=1\le k$ -- \emph{akzeptiert}. \textbf{Ungültige Zertifikate.} \begin{itemize} \item $D=\{2\}$: 2 dominiert nur sich selbst und 1; die Blätter 3 und 4 bleiben undominiert -- verworfen. \item $D=\emptyset$: kein Knoten dominiert -- verworfen. \end{itemize} \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|)$). Konkreter Graph: \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{Der Verifizierer.} $V(x, c)$ startet die Breitensuche auf $x = (G,s,t)$ und ignoriert $c$ komplett. \textbf{Ja-Instanz} $s = 1$, $t = 4$: Die Breitensuche findet $1 \to 2 \to 4$. $V$ akzeptiert für \emph{jedes} Zertifikat -- für das leere Wort $c = \varepsilon$ genauso wie für ein beliebiges anderes Zertifikat. Ein akzeptiertes Zertifikat existiert also. \textbf{Nein-Instanz} $s = 1$, $t = 3$: Knoten 3 ist isoliert, die Breitensuche erreicht ihn nie. $V$ verwirft für \emph{jedes} $c$ -- egal was der Tipp behauptet, die Breitensuche entscheidet selbst. \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} Die NDTM rät die Knotenmenge $C \subseteq V$. Der Verifizierer erhält $C$ als Zertifikat und prüft mit denselben Schritten -- das Raten ist durch das Zertifikat ersetzt. \textbf{Gültiges Zertifikat} $C=\{1,2\}$. Der Verifizierer prüft jede Kante gedeckt und $|C|\le k$: \begin{center} $\{1,2\}$: $1\in C$~\ding{52}\quad $\{1,3\}$: $1\in C$~\ding{52}\quad $\{2,3\}$: $2\in C$~\ding{52}\quad $|C|=2\le 2$~\ding{52} \end{center} $\Rightarrow$ \textbf{akzeptiert}: $\{1,2\}$ ist eine Knotenüberdeckung. \textbf{Ungültiges Zertifikat} $C=\{1\}$: Kante $\{2,3\}$ ist ungedeckt ($2\notin C,\ 3\notin C$) $\Rightarrow$ \textbf{verworfen}. \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 konkret durchgerechnet} \textbf{Laufzeit mit Zahlen.} Sei $R_1$ eine Reduktion mit Laufzeit $O(n^a)$, $a=2$, und $R_2$ mit $O(n^b)$, $b=3$. Eingabe $x$ der Größe $n=4$: \[ R_1(x)\le 4^2 = 16 \text{ Schritte} \;\Rightarrow\; |x'|\le 16, \qquad R_2(x')\le 16^3 = 4096 \text{ Schritte}. \] Gesamt $\le 16+4096 = 4112$ Schritte $=O(n^{ab})=O(n^{6})$ -- polynomiell. \textbf{Konkrete Reduktionskette} $\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 $\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} Alle drei sind Ja-Instanzen: $x\in\problem{Clique}\iff x'\in\problem{VC}\iff x''\in\problem{FVS}$. Damit ist $f_2\circ f_1$ eine polynomielle Reduktion $\problem{Clique}\redp\problem{FVS}$. \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$ \begin{center} \begin{tikzpicture}[ pbox/.style={draw,rounded corners,minimum height=6mm,inner sep=5pt,font=\small}, plab/.style={font=\scriptsize,align=center}] \node[pbox] (x0) at (0,0) {$x$}; \node[pbox] (x1) at (4.6,0) {$x'=R_1(x)$}; \node[pbox] (x2) at (9.6,0) {$x''=R_2(x')$}; \draw[->] (x0) -- node[above,plab] {$R_1$, Zeit $O(n^a)$} (x1); \draw[->] (x1) -- node[above,plab] {$R_2$, Zeit $O((n^a)^b)$} (x2); \node[plab,anchor=north] at (0,-0.5) {$L_1$-Instanz\\ Gr\"o\ss e $n$}; \node[plab,anchor=north] at (4.6,-0.5) {$L_2$-Instanz\\ Gr\"o\ss e $O(n^a)$}; \node[plab,anchor=north] at (9.6,-0.5) {$L_3$-Instanz\\ Gr\"o\ss e $O(n^{ab})$}; \node[plab] at (4.8,-1.8) {gesamt polynomiell: $O(n^{ab})$; \quad $x\in L_1 \iff x'\in L_2 \iff x''\in L_3$}; \end{tikzpicture} \end{center} \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{Einsetzen:} $L_0 = \problem{VertexCover}$ (NP-vollständig), $L_1 = \problem{FeedbackVertexSet}$ mit der Reduktion $\problem{VertexCover} \redp \problem{FeedbackVertexSet}$ (jede Kante wird zu zwei antiparallelen Bögen) und $\problem{FeedbackVertexSet} \in \NP$ (Verifizierer: Topo-Sortierung auf $G \setminus X$). \textbf{Die Reduktion an einer konkreten Instanz.} VC-Instanz: Pfad $1$--$2$--$3$, $k = 1$ (Ja-Instanz, Cover $\{2\}$). \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} Die Ja-Instanz bleibt Ja: $X = \{2\}$ bricht beide $2$-Kreise. \textbf{Schluss:} \problem{VertexCover} ist NP-vollständig, $\problem{VertexCover} \redp \problem{FeedbackVertexSet}$ und $\problem{FeedbackVertexSet} \in \NP$ -- also ist \problem{FeedbackVertexSet} 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} Annahme: $L_0=\problem{3-SAT}$ ist NP-vollständig \emph{und} es gäbe einen Algorithmus $A$, der $\problem{3-SAT}$ in $O(n^3)$ entscheidet. \textbf{Ein beliebiges $L\in\NP$ wird polynomiell.} Nimm $L=\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)$. Für die Eingabe $x=(K_3,3)$ der Größe $n=10$: \begin{align*} \text{(1) } & f(x)\text{ berechnen:} && \le 10^2=100 \text{ Schritte},\quad |f(x)|=O(n^2)=100.\\ \text{(2) } & A\text{ auf } f(x): && \le (10^2)^3=10^{6} \text{ Schritte}. \end{align*} Gesamt $\le 100+10^6$ Schritte $=O(n^{6})$ -- polynomiell, und korrekt, denn $x\in\problem{Clique}\iff f(x)\in\problem{3-SAT}$ (Reduktionseigenschaft) und $A$ entscheidet $f(x)$ richtig. \lsg Es gilt stets $P \subseteq NP$ (ein Polynomialzeit-Löser ist ein Verifizierer, der das Zertifikat ignoriert). Zu zeigen bleibt $NP \subseteq P$. Sei $A$ ein Algorithmus, der $L_0$ in Zeit $O(n^c)$ entscheidet, und sei $L \in NP$ beliebig. Da $L_0$ NP-vollständig ist, gilt $L \redp L_0$. Sei $f$ die zugehörige Reduktion mit Laufzeit $O(n^a)$. Algorithmus für $L$: Berechne zu einer Eingabe $x$ (Größe $n$) zuerst $f(x)$ -- Zeit $O(n^a)$, Ausgabegröße $O(n^a)$. Wende dann $A$ auf $f(x)$ an -- Zeit $O((n^a)^c) = O(n^{ac})$. Gesamt polynomiell. \textbf{Korrektheit:} $x \in L \iff f(x) \in L_0$ (Reduktionseigenschaft), und $A$ entscheidet $f(x) \in L_0$ korrekt. Also $L \in P$ für jedes $L \in NP$, d.\,h.\ $NP \subseteq P$. 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{Reduktion.} Die Klausel $C=(y_1\vee y_2\vee y_3\vee y_4\vee y_5)$ wird ($\ell=5$, neue Variablen $x_1,x_2$) ersetzt durch \[ \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}. \] \textbf{$C$ erfüllt $\Rightarrow$ Kette erfüllt.} Es sei $y_3=\true$ (Rest $\false$). Regel ($y_i$ mit $i=3$): $x_1=\true$, $x_2=\false$. \begin{align*} K_1 &=(y_1\vee y_2\vee x_1)=(F\vee F\vee \mathbf{T})=\true && \text{(durch } x_1)\\ K_2 &=(\neg x_1\vee y_3\vee x_2)=(F\vee \mathbf{T}\vee F)=\true && \text{(durch } y_3)\\ K_3 &=(\neg x_2\vee y_4\vee y_5)=(\mathbf{T}\vee F\vee F)=\true && \text{(durch } \neg x_2) \end{align*} \textbf{$C$ unerfüllt $\Rightarrow$ Kette unerfüllt.} Setze alle $y_i=\false$ und nimm an, die Kette sei erfüllbar: \begin{align*} K_1 &=(F\vee F\vee x_1) && \Rightarrow\ x_1=\true\\ K_2 &=(\neg x_1\vee F\vee x_2)=(F\vee F\vee x_2) && \Rightarrow\ x_2=\true\\ K_3 &=(\neg x_2\vee F\vee F)=(F\vee F\vee F)=\false && (\bot) \end{align*} Widerspruch: bei $y_1=\dots=y_5=\false$ ist die Kette \emph{nicht} erfüllbar. Also erzwingt jede erfüllende Belegung der Kette ein wahres $y_i$ -- genau dann ist $C$ erfüllt. Kette und $C$ sind erfüllbarkeitsäquivalent. \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: beide Richtungen an Zahlen} Wir nutzen $F_1=(x\vee y),\ F_2=(\neg x\vee z),\ F_3=(\neg y\vee\neg z)$, $k=m=3$. \textbf{SAT $\to$ Clique.} Die Belegung $x=z=\true,\ y=\false$ wählt pro Klausel ein wahres Literal: $[F_1{:}\,x]$, $[F_2{:}\,z]$, $[F_3{:}\,\neg y]$. Je zwei stammen aus verschiedenen Klauseln und sind widerspruchsfrei ($x,z,\neg y$ paarweise verträglich) -- also paarweise verbunden: eine $3$-Clique. \textbf{Clique $\to$ SAT.} Nein-Instanz $F=(x)\wedge(\neg x)$, $k=m=2$. Der Graph hat nur die Knoten $[F_1{:}\,x]$ und $[F_2{:}\,\neg x]$. Da $x$ und $\neg x$ sich widersprechen, gibt es \emph{keine} Kante und damit keine $2$-Clique. Also ist $F$ unerfüllbar. \begin{center} \begin{tikzpicture} \begin{scope} \node[kndick] (x) at (90:1) {$x$}; \node[kndick] (z) at (210:1) {$z$}; \node[kndick] (ny) at (330:1) {$\neg y$}; \draw[very thick] (x)--(z)--(ny)--(x); \node[font=\scriptsize,black!60] at (90:1.5) {$F_1$}; \node[font=\scriptsize,black!60] at (210:1.55) {$F_2$}; \node[font=\scriptsize,black!60] at (330:1.55) {$F_3$}; \node[font=\footnotesize,align=center] at (0,-1.9) {$3$-Clique $\{x,z,\neg y\}$\\ (Ja-Instanz)}; \end{scope} \begin{scope}[xshift=6.2cm] \node[knoten] (a) at (-1.2,0.4) {$x$}; \node[knoten] (b) at (1.2,0.4) {$\neg x$}; \draw[dashed,black!45] (a)--(b); \node[fill=white,inner sep=1.5pt,font=\scriptsize] at (0,0.4) {\ding{55}}; \node[font=\scriptsize,black!60] at (-1.2,1.15) {$F_1$}; \node[font=\scriptsize,black!60] at (1.2,1.15) {$F_2$}; \node[font=\footnotesize,align=center] at (0,-0.5) {keine Kante}; \node[font=\footnotesize,align=center] at (0,-1.9) {$F=(x)\wedge(\neg x)$: keine $2$-Clique\\ (Nein-Instanz)}; \end{scope} \end{tikzpicture} \end{center} \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$. \begin{center} \begin{tikzpicture} \node[align=left,font=\small] at (-4.9,0) {$F_1 = (x \vee y)$\\ $F_2 = (\neg x \vee z)$\\ $F_3 = (\neg y \vee \neg z)$\\[3pt] $k = m = 3$}; \draw[->,thick] (-3.3,0) -- (-2.1,0); \begin{scope}[xshift=1.6cm] \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$}; \node[font=\footnotesize, text width=9.4cm, align=center] at (0,-3.15) {ein Knoten pro Literalvorkommen; Kanten nur zwischen verschiedenen Klauseln ohne Widerspruch ($x$--$\neg x$ fehlt); fette $m$-Clique $\{x,z,\neg y\}$ $\Leftrightarrow$ Belegung $x=z=\true$, $y=\false$}; \end{scope} \end{tikzpicture} \end{center} \textbf{Beweis hin:} \begin{itemize} \item Sei $\psi$ eine erfüllende Belegung von $F$. \item Dann existiert für jedes $i$ ein $r_i$ mit $\psi(y_{ir_i}) = \true$. \item Setze $C = \{[i, r_i] \mid i \in [m]\}$. \item Angenommen, für ein Paar $i \ne j$ wäre $\{[i,r_i],[j,r_j]\} \notin E$. \item Dann müsste $y_{ir_i} = \neg y_{jr_j}$ gelten. \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 Da Knoten derselben Klausel nie verbunden sind, hat $C$ die Form $\{[1,r_1], \dots, [m,r_m]\}$. \item Setze $\psi(y_{ir_i}) = \true$ für alle $i$. \item Das ist widerspruchsfrei, denn $y_{ir_i} \ne \neg y_{jr_j}$ (sonst gäbe es keine Kante). \item Dann ist jede Klausel $F_i$ durch $y_{ir_i}$ erfüllt. \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)$; ein Knoten pro Literalvorkommen, Kanten zwischen widerspruchsfreien Literalen verschiedener Klauseln, $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); \node[font=\scriptsize,black!60] at (0,2.3) {$F_1$: $x$, $y$}; \node[font=\scriptsize,black!60] at (-3.3,-0.9) {$F_2$: $\neg x$, $z$}; \node[font=\scriptsize,black!60] at (3.3,-0.9) {$F_3$: $\neg y$, $\neg z$}; \end{tikzpicture} \end{center} \textbf{Von der Belegung zur Clique.} $x=\true$, $z=\true$, $y=\false$ erfüllt alle drei Klauseln. Die gewählten wahren Literale bilden die dick markierte $3$-Clique. \textbf{Gültiges Zertifikat} $C=\{[F_1{:}\,x],\,[F_2{:}\,z],\,[F_3{:}\,\neg y]\}$. Der Verifizierer testet alle $\binom{3}{2}=3$ Paare auf Adjazenz und $|C|\ge k$: \begin{center}\small \begin{tabular}{lcc} \toprule Paar $\{u,v\}$ & versch.\ Klauseln? & kein Widerspruch? $\Rightarrow$ Kante\\ \midrule $\{x,\,z\}$ & $F_1\ne F_2$ \ding{52} & $x,z$ verträglich \ding{52}\\ $\{x,\,\neg y\}$ & $F_1\ne F_3$ \ding{52} & $x,\neg y$ verträglich \ding{52}\\ $\{z,\,\neg y\}$ & $F_2\ne F_3$ \ding{52} & $z,\neg y$ verträglich \ding{52}\\ \bottomrule \end{tabular} \end{center} Alle drei Paare adjazent \emph{und} $|C|=3\ge k=3$ $\Rightarrow$ \textbf{akzeptiert}. \textbf{Ungültiges Zertifikat} $C'=\{[F_1{:}\,x],\,[F_2{:}\,\neg x]\}$: das Paar $\{x,\neg x\}$ ist ein Widerspruch ($\ell$ und $\neg\ell$), also \emph{keine} Kante -- $C'$ ist keine Clique $\Rightarrow$ \textbf{verworfen}. \lsg \textbf{$\in$ NP:} Zertifikat ist eine Knotenmenge $C \subseteq V$. Der Verifizierer prüft zwei Bedingungen: \begin{itemize} \item Für alle zweielementigen $\{u,v\} \subseteq C$ gilt $\{u,v\} \in E$. \item $|C| \ge k$. \end{itemize} Existiert eine $k$-Clique, wird sie akzeptiert, sonst jedes Zertifikat abgelehnt. Laufzeit: Paartests $O(|V|^2)$, Größentest $O(|V|)$ -- polynomiell. \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} \begin{center} \begin{tikzpicture} \node[align=left,font=\small] at (-4.9,0) {$F_1 = (x \vee y)$\\ $F_2 = (\neg x \vee z)$\\ $F_3 = (\neg y \vee \neg z)$\\[3pt] $k = m = 3$}; \draw[->,thick] (-3.3,0) -- (-2.1,0); \begin{scope}[xshift=1.6cm] \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$}; \node[font=\footnotesize, text width=9.4cm, align=center] at (0,-3.15) {ein Knoten pro Literalvorkommen $[i,j]$; Kanten nur zwischen verschiedenen Klauseln ohne Widerspruch; fette $m$-Clique $\{x,z,\neg y\}$ $\Leftrightarrow$ Belegung $x=z=\true$, $y=\false$}; \end{scope} \end{tikzpicture} \end{center} \textbf{Beweis hin:} \begin{itemize} \item Sei $\psi$ eine erfüllende Belegung von $F$. \item Dann liefert $\psi$ pro Klausel $i$ ein wahres Literal $y_{ir_i}$. \item Die Knoten $[i,r_i]$ stammen aus paarweise verschiedenen Klauseln. \item Ihre Literale sind widerspruchsfrei, denn alle sind unter $\psi$ wahr. \item Somit sind die Knoten paarweise verbunden -- eine $m$-Clique. \end{itemize} \textbf{Beweis zurück:} \begin{itemize} \item Sei $C$ eine $m$-Clique. \item Da Knoten derselben Klausel nie verbunden sind, enthält $C$ aus jeder Klausel genau einen Knoten. \item Die zugehörigen Literale sind widerspruchsfrei, denn sonst fehlte eine Kante zwischen ihren Knoten. \item Setze alle diese Literale wahr -- dann ist jede Klausel erfüllt. \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{Reduktion.} $w_i = p_i = c_i$, $B = P = K$: Die beiden Knapsack-Schranken zwingen die gemeinsame Summe auf exakt $K$. \medskip \textbf{Ja-Instanz bleibt Ja.} $c = (2,3,5)$, $K = 5$ mit Lösung $\{1,2\}$: $2+3 = 5$. Bildinstanz: Gewichte $=$ Profite $= (2,3,5)$, $B = P = 5$. Auswahl $\{1,2\}$: Gewicht $5 \le 5$~\ding{52}, Profit $5 \ge 5$~\ding{52} -- \textbf{Ja}. \medskip \textbf{Nein-Instanz bleibt Nein.} $c = (2,3,5)$, $K = 4$: keine Teilmenge summiert 4. Bildinstanz: $B = P = 4$. Durchprobieren: \begin{itemize} \item $\{1\}$: Profit $2 < 4$ -- verletzt Profitschranke. \item $\{2\}$: Profit $3 < 4$ -- verletzt Profitschranke. \item $\{3\}$: Gewicht $5 > 4$ -- verletzt Kapazität. \item $\{1,2\}$: Gewicht $5 > 4$ -- verletzt Kapazität. \item größere Mengen: Gewicht $\ge 7 > 4$. \end{itemize} Keine Auswahl erfüllt beides -- \textbf{Nein}. \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{Reduktion.} $N = \sum c_j + 1$; Zusatzzahlen $a = N-K$, $b = K+1$; wegen $a + b = N + 1 > N$ trennen sich $a$ und $b$ in jeder Lösung. \medskip \textbf{Ja-Instanz bleibt Ja.} $c = (3,5,8,4)$, $K = 12$ mit Lösung $\{3,5,4\}$. Es ist $\sum c = 20$, also $N = 21$, $a = 21-12 = 9$, $b = 12+1 = 13$. Neue Zahlen: $(3,5,8,4,9,13)$, Gesamtsumme $42$, Hälfte $21$. Partitionslösung: $\{3,5,4\} \cup \{a\}$ mit $3+5+4+9 = 21$; die andere Seite $\{8, 13\}$ mit $8+13 = 21$~\ding{52} -- \textbf{Ja}. \medskip \textbf{Nein-Instanz bleibt Nein.} $c = (3,5,8,4)$, $K = 19$: Die Teilsummen von $(3,5,8,4)$ erreichen maximal $20$ und treffen $19$ nicht (Dreiersummen: $16, 15, 17, 12$; Gesamtsumme $20$). Konstruktion: $N = 21$, $a = 2$, $b = 20$. Neue Zahlen $(3,5,8,4,2,20)$, Hälfte $21$. Die Seite mit $b = 20$ müsste aus den übrigen Zahlen (alle $\ge 2$) exakt die Restsumme $1$ bilden: unmöglich. Die Seite mit $a = 2$ bräuchte $19$ aus den Originalzahlen -- existiert nicht. Keine Partition -- \textbf{Nein}. \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{Ablauf von ListScheduling} (jeder Job auf die Maschine kleinster Last): $J_1\!\to\!M_1$ (Last $1$), $J_2\!\to\!M_2$ (Last $1$), $J_3\!\to\!M_1$ (kleinste Last) $\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{Die Ungleichungen mit Zahlen.} Letzter Job auf $M_1$ ist $J_k=J_3$, $p_k=2$. Bei seiner Zuordnung hatte $M_1$ die kleinste Last $L-p_k=3-2=1$, also alle Maschinen $\ge 1$: \[ \textstyle\sum_i p_i = 1+1+2 = 4 \;\ge\; m(L-p_k)+p_k = 2\cdot 1 + 2 = 4. \] Zwei Optimumsschranken: $\OPT\ge \tfrac1m\sum_i p_i=\tfrac{4}{2}=2$ und $\OPT\ge p_k=2$. Kombination: \[ \OPT \ge \frac{m(L-p_k)+p_k}{m}=L-\Bigl(1-\tfrac1m\Bigr)p_k=3-\tfrac12\cdot2=2, \qquad \frac{\mathrm{LS}}{\OPT}=\frac{3}{2}=2-\tfrac1m. \] Das reale Optimum $\OPT=2$ (Jobs $1,1$ auf $M_1$, Job $2$ auf $M_2$) bestätigt die Schranke -- sie 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{Die Größen an dieser Instanz:} \begin{itemize} \item Greedy packt $(1,1)$ und $(3,3)$ [Last 4]; $(11,13)$ passt nicht -- das ist der Gegenstand $k{+}1$ mit $p_{k+1} = 11$. Danach noch $(5,6)$ und $(1,3)$: $\mathrm{GA} = 10$. \item Bester Einzel-Gegenstand: $p_{\max} = 11$. Also $\mathrm{MGA} = \max\{10, 11\} = 11$. \item Fraktional: Gegenstände $1,2$ ganz (Last 4), vom Gegenstand $k{+}1$ der Anteil $\tfrac{12}{13}$ (Restkapazität 12): $\mathrm{OPT}_f = 1 + 3 + \tfrac{12}{13}\cdot 11 \approx 14{,}15$. \item Echtes Optimum: $\{(11,13), (3,3)\}$ mit $\mathrm{OPT} = 14$. \end{itemize} \textbf{Die Ungleichungskette mit diesen Zahlen:} \[ \underbrace{14}_{\mathrm{OPT}} \;\le\; \underbrace{14{,}15}_{\mathrm{OPT}_f} \;\le\; \underbrace{10 + 11}_{\mathrm{GA} + p_{k+1}} \;\le\; \underbrace{10 + 11}_{\mathrm{GA} + p_{\max}} \;\le\; \underbrace{2 \cdot 11}_{2\,\mathrm{MGA}} = 22. \] Jede Ungleichung stimmt hier nachrechenbar. Die Güte $\mathrm{OPT}/\mathrm{MGA} = 14/11 \approx 1{,}27$ bleibt unter 2. \lsg \textbf{Idee:} Greedy verliert höchstens den Profit \emph{eines} Gegenstands -- des ersten, der nicht mehr passt. Genau den sichert 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.) Da Greedy die Gegenstände $1, \dots, k$ ebenfalls einpackt, gilt \[ \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{Reduktion.} \problem{Clique} $\redp$ \problem{VertexCover}: komplementiere $G$ zu $G'$ und setze $k' = n-k$. Wir verfolgen eine winzige Instanz mit $n=4$ Knoten durch die Konstruktion. \medskip \textbf{Ja-Instanz.} $G$ hat die Clique $C=\{1,2,3\}$, also ist $(G,k)$ mit $k=3$ eine Ja-Instanz. Das Komplement $G'$ enthält genau die Nicht-Kanten von $G$. Ausgabe $(G',\,k')$ mit $k' = n-k = 4-3 = 1$. Es ist $V\setminus C=\{4\}$ ein Vertex Cover von $G'$ (Knoten $4$ deckt beide Kanten) mit $|\{4\}| = 1 \le k'$ -- die Bildinstanz bleibt \textbf{Ja}. \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{Nein-Instanz.} Auf demselben $G$ ist $(G,k)$ mit $k=4$ eine Nein-Instanz: $G$ hat nur $4$ Kanten, also keinen $K_4$. Die Konstruktion liefert dasselbe $G'$, aber $k' = n-k = 4-4 = 0$. Ein Vertex Cover der Größe $0$ ist die leere Menge -- sie deckt die beiden Kanten von $G'$ nicht. Also existiert kein VC mit $|C|\le 0$: die Bildinstanz bleibt \textbf{Nein}. \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{Reduktion.} \problem{Clique} $\redp$ $k$-\problem{CliqueUniversal}: füge einen universellen Knoten $u$ hinzu (verbunden mit allen) und setze $\bar k = k+1$. \medskip \textbf{Ja-Instanz.} $G$ sei der Pfad $1$--$2$--$3$ mit der $2$-Clique $\{1,2\}$, also $(G,k)$ mit $k=2$ eine Ja-Instanz. In $\bar G$ ist $u$ mit $1,2,3$ verbunden, $\bar k = 3$. Dann ist $\{1,2,u\}$ ein Dreieck ($\{1,2\}\in E$ plus die neuen Kanten $\{1,u\},\{2,u\}$), also eine $3$-Clique $\ge \bar k$ -- die Bildinstanz bleibt \textbf{Ja}. \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{Nein-Instanz.} $G$ seien drei isolierte Knoten $1,2,3$ (keine Kanten), $(G,k)$ mit $k=2$ eine Nein-Instanz (keine $2$-Clique). Der universelle $u$ liefert $\bar k = 3$, aber die größte Clique in $\bar G$ ist $\{u,i\}$ der Größe $2 < 3$ (die $i$ sind paarweise nicht benachbart). Also keine $3$-Clique: die Bildinstanz bleibt \textbf{Nein}. \begin{center} \begin{tikzpicture} \node[knoten] (c1) at (0,0) {1}; \node[knoten] (c2) at (1.5,0) {2}; \node[knoten] (c3) at (3,0) {3}; \node[knoten] (cu) at (1.5,1.5) {$u$}; \draw (c1)--(cu) (c2)--(cu) (c3)--(cu); \node[font=\footnotesize] at (1.5,-1.0) {$\bar G$: max.\ Clique $\{u,i\}$ hat Größe $2 < \bar k = 3$}; \end{tikzpicture} \end{center} \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{Reduktion.} \problem{Clique} $\redp$ \problem{Clique-Nomember}: füge einen neuen \emph{isolierten} Knoten $v$ hinzu und gib $(G',v,k)$ aus. Gefragt ist eine $k$-Clique, die $v$ nicht enthält. \medskip \textbf{Ja-Instanz.} $G$ sei das Dreieck $\{1,2,3\}$, also $(G,k)$ mit $k=3$ eine Ja-Instanz. In $G'$ ist $v$ isoliert. Die $3$-Clique $\{1,2,3\}$ liegt ganz in $G$ und enthält $v$ nicht ($v\notin\{1,2,3\}$) -- die Bildinstanz bleibt \textbf{Ja}. \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{Nein-Instanz.} $G$ sei der Pfad $1$--$2$--$3$, $(G,k)$ mit $k=3$ eine Nein-Instanz (keine $3$-Clique). In $G'$ bleibt $v$ isoliert; da nur der isolierte $v$ hinzukam, gibt es weiterhin keine $3$-Clique -- erst recht keine ohne $v$. Die Bildinstanz bleibt \textbf{Nein}. \begin{center} \begin{tikzpicture} \node[knoten] (a1) at (0,0) {1}; \node[knoten] (a2) at (1.4,0) {2}; \node[knoten] (a3) at (2.8,0) {3}; \draw (a1)--(a2) (a2)--(a3); \node[knoten] (v) at (4.4,0) {$v$}; \node[font=\footnotesize] at (2.2,-1.0) {$G'$: Pfad ohne $3$-Clique, $v$ isoliert}; \end{tikzpicture} \end{center} \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{Reduktion.} \problem{Clique} $\redp$ \problem{CliqueAndIndependentSet}: füge $k$ neue isolierte Knoten $u_1,\dots,u_k$ hinzu; $k$ bleibt. Gefragt sind in $G'$ zugleich eine $k$-Clique und ein $k$-Independent-Set. \medskip \textbf{Ja-Instanz.} $G$ sei das Dreieck $\{1,2,3\}$, also $(G,k)$ mit $k=3$ eine Ja-Instanz. $G'$ erhält $u_1,u_2,u_3$. Dann ist $\{1,2,3\}$ eine $3$-Clique \emph{und} $\{u_1,u_2,u_3\}$ ein $3$-Independent-Set (isoliert, paarweise nicht benachbart) -- beides existiert, die Bildinstanz bleibt \textbf{Ja}. \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) {$3$-IS $\{u_1,u_2,u_3\}$}; \end{tikzpicture} \end{center} \textbf{Nein-Instanz.} $G$ sei der Pfad $1$--$2$--$3$, $(G,k)$ mit $k=3$ eine Nein-Instanz (keine $3$-Clique). $G'$ erhält wieder $u_1,u_2,u_3$; ein $3$-Independent-Set existiert nun zwar (z.\,B.\ $\{u_1,u_2,u_3\}$), aber eine $3$-Clique gibt es weiterhin nicht (Pfad hat kein Dreieck, die $u_i$ sind isoliert). Da nicht beides existiert, bleibt die Bildinstanz \textbf{Nein}. \begin{center} \begin{tikzpicture} \node[knoten] (a1) at (0,0) {1}; \node[knoten] (a2) at (1.2,0) {2}; \node[knoten] (a3) at (2.4,0) {3}; \draw (a1)--(a2) (a2)--(a3); \node[knoten] (u1) at (3.6,0.6) {$u_1$}; \node[knoten] (u2) at (4.6,0.6) {$u_2$}; \node[knoten] (u3) at (4.1,-0.5) {$u_3$}; \node[font=\footnotesize] at (1.2,-1.0) {Pfad: keine $3$-Clique}; \end{tikzpicture} \end{center} \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$; für $k \le 1$ ist die Instanz direkt lösbar, Ja genau dann, wenn $V \ne \emptyset$). 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{Reduktion} (von $k$-\problem{Clique}, Fall $k\ge5$). An jeden Knoten $v$ ein privates $K_4$ auf $\{v,a_v,b_v,c_v\}$ anhängen; dann $\deg(v)\ge3$ überall, $k$ bleibt. (Fall $k\le4$ separat: Brute-Force über $O(|V|^k)$ Knotenmengen.) Gadget-Cliquen haben Größe $\le4$, zerstören also keine $k$-Clique mit $k\ge5$ und erzeugen auch keine. \medskip \textbf{Ja-Instanz bleibt Ja.} Basis: $K_5$ auf $\{1,\dots,5\}$ plus ein Pendant-Knoten $6$ mit einziger Kante $\{1,6\}$ -- also $\deg(6) = 1 < 3$, die Instanz braucht das Gadget wirklich. 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} Grade in $G'$: Knoten $6$: $1 + 3 = 4$; Knoten $1$: $5 + 3 = 8$; Knoten $2,\dots,5$: $4 + 3 = 7$; jeder Gadget-Knoten: genau $3$. Alle $\ge 3$ -- gültige Instanz. Die $5$-Clique $\{1,\dots,5\}$ bleibt erhalten. \textbf{Ja.} \medskip \textbf{Nein-Instanz bleibt Nein.} Basis: $C_6$ (6-Kreis $1$--$2$--$\dots$--$6$--$1$; größte Clique $2$, alle Grade $2 < 3$), $k = 5$. \begin{center} \begin{tikzpicture}[scale=0.95] \foreach \i in {1,...,6} \node[knoten,font=\small] (v\i) at ({90+(\i-1)*60}:1.3) {$\i$}; \foreach \a/\b in {1/2,2/3,3/4,4/5,5/6,6/1} \draw (v\a)--(v\b); \node[knoten,minimum size=5mm,font=\scriptsize] (a) at (2.7,1.9) {$a_1$}; \node[knoten,minimum size=5mm,font=\scriptsize] (b) at (3.3,1.15) {$b_1$}; \node[knoten,minimum size=5mm,font=\scriptsize] (c) at (2.6,0.6) {$c_1$}; \draw[black!55] (v1)--(a) (v1)--(b) (v1)--(c) (a)--(b) (a)--(c) (b)--(c); \node[font=\footnotesize, text width=8.5cm, align=center] at (1.0,-2.0) {$C_6$: alle Grade $2 < 3$; jedes Gadget hebt den Grad auf $2+3=5$}; \end{tikzpicture} \end{center} Grade in $G'$: Kreis-Knoten $2 + 3 = 5$, Gadget-Knoten $3$ -- gültige Instanz. Aber keine $5$-Clique: Gadget-Cliquen haben Größe $\le 4 < 5$, im $C_6$-Teil ist die größte Clique eine Kante. \textbf{Nein.} \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{Reduktion.} \problem{VertexCover} $\redp$ \problem{FeedbackVertexSet}: jede ungerichtete Kante $\{u,v\}$ wird zu zwei antiparallelen Bögen $(u,v),(v,u)$ (einem $2$-Kreis); $k$ bleibt. Instanz: der Pfad $1$--$2$--$3$. \medskip \textbf{Ja-Instanz.} Der Pfad hat das Vertex Cover $C=\{2\}$, also ist $(G,k)$ mit $k=1$ eine Ja-Instanz. In $G'$ entstehen die $2$-Kreise $1\rightleftarrows 2$ und $2\rightleftarrows 3$. Die Menge $X=\{2\}$ trifft beide (jeder $2$-Kreis läuft über $2$), ist also ein Feedback Vertex Set mit $|X|=1\le k$ -- die Bildinstanz bleibt \textbf{Ja}. \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{Nein-Instanz.} Auf demselben Pfad ist $(G,k)$ mit $k=0$ eine Nein-Instanz (kein VC der Größe $0$, es gibt Kanten). Die Konstruktion liefert dasselbe $G'$ mit zwei $2$-Kreisen; ein FVS der Größe $0$ (die leere Menge) bricht keinen davon. Also kein FVS mit $|X|\le 0$: die Bildinstanz bleibt \textbf{Nein}. \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{Reduktion.} \problem{VertexCover} $\redp$ $\Delta$-\problem{Cover}: jede Kante $e=\{u,v\}$ wird durch einen neuen Knoten $w_e$ zum Dreieck $\{u,v,w_e\}$ aufgeblasen; $k$ bleibt. Instanz: der Pfad $1$--$2$--$3$ mit Kanten $e_{12}=\{1,2\}$, $e_{23}=\{2,3\}$. \medskip \textbf{Ja-Instanz.} Der Pfad hat das Vertex Cover $C=\{2\}$, also $(G,k)$ mit $k=1$ eine Ja-Instanz. $G'$ erhält $w_{12},w_{23}$ und damit genau die Dreiecke $\{1,2,w_{12}\}$ und $\{2,3,w_{23}\}$. Beide enthalten $2$, also trifft $C_\Delta=\{2\}$ jedes Dreieck mit $|C_\Delta|=1\le k$ -- die Bildinstanz bleibt \textbf{Ja}. \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{Nein-Instanz.} Auf demselben Pfad ist $(G,k)$ mit $k=0$ eine Nein-Instanz (kein VC der Größe $0$). $G'$ hat dieselben zwei Dreiecke; ein $\Delta$-Cover der Größe $0$ (die leere Menge) überdeckt keines. Also kein $\Delta$-Cover mit $|C_\Delta|\le 0$: die Bildinstanz bleibt \textbf{Nein}. \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{Reduktion.} An jeden Knoten $v$ mit $\deg(v)<3$ werden \emph{zwei} Diamant-Gadgets ($D=K_4$ ohne Kante $\{p,s\}$; Kanten $pq,pr,qr,qs,rs$) angehängt, verbunden über $\{v,p\}$ und $\{v,s\}$. Das hebt $\deg(v)$ um $4$; alle Gadget-Knoten bekommen Grad $3$. \medskip \textbf{Ja-Instanz bleibt Ja.} $G=$ ein einzelner Knoten $v$, also $\deg(v)=0$. \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} Gültige 3-Färbung (Farben $1,2,3$): $f(v)=1$; je Gadget $p=s=2$, $q=1$, $r=3$ (analog $p',s'=2$, $q'=1$, $r'=3$). Alle Kanten korrekt. \textbf{Ja.} \medskip \textbf{Nein-Instanz bleibt Nein.} $G=K_4$ ist nicht 3-färbbar -- und hat schon überall Grad $3$, es werden also \emph{keine} Gadgets angehängt, $G'=K_4$. \begin{center} \begin{tikzpicture}[scale=0.9] \node[knoten,font=\small] (1) at (0,1.4) {$1$}; \node[knoten,font=\small] (2) at (1.4,1.4) {$2$}; \node[knoten,font=\small] (3) at (0,0) {$3$}; \node[knoten,font=\small] (4) at (1.4,0) {$4$}; \draw (1)--(2)--(4)--(1) (1)--(3)--(2) (3)--(4); \node[font=\footnotesize] at (0.7,-0.8) {$K_4$: Grade alle $3$, nicht 3-färbbar}; \end{tikzpicture} \end{center} $G'=K_4$ ist nicht 3-färbbar. \textbf{Nein.} \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{Reduktion} (von $k$-\problem{Color}, hier $k=3$). Zu $G$ ein disjunktes $K_k$ mit Knoten $v_1,\dots,v_k$ hinzufügen (keine Kanten nach $G$) und diese vorfärben: $f(v_i)=i$. Da das $K_k$ isoliert ist, erzwingt die Vorfärbung nichts in $G$. \medskip \textbf{Ja-Instanz bleibt Ja.} $G=$ Dreieck $\{A,B,C\}$ (3-färbbar). \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} $G'=G\mathbin{\dot\cup}K_3$: Die 3-Färbung von $G$ plus $f(v_i)=i$ ist gültig. \textbf{Ja.} \medskip \textbf{Nein-Instanz bleibt Nein.} $G=K_4$ (nicht 3-färbbar). \begin{center} \begin{tikzpicture}[scale=0.95] \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 (0,0) {$3$}; \node[knoten,font=\small] (4) at (1.3,0) {$4$}; \draw (1)--(2)--(4)--(1) (1)--(3)--(2) (3)--(4); \node[font=\footnotesize] at (0.65,-0.8) {$G=K_4$: nicht 3-färbbar}; \end{scope} \begin{scope}[xshift=5.2cm] \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] at (0,-1.7) {disjunktes vorgefärbtes $K_3$}; \end{scope} \end{tikzpicture} \end{center} $G'=K_4\mathbin{\dot\cup}K_3$: Der $K_4$-Teil scheitert bereits an $3$ Farben. \textbf{Nein.} \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{Reduktion.} Füge einen universellen Knoten $u$ hinzu, verbunden mit allen $v\in V$. Ein Hamiltonpfad in $G$ schließt sich über $u$ zum Hamiltonkreis in $G'$. \medskip \textbf{Ja-Instanz bleibt Ja.} $G=$ Pfad $1\!-\!2\!-\!3$ (hat HP). \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{Ja.} \medskip \textbf{Nein-Instanz bleibt Nein.} $G=$ Kante $\{1,2\}$ plus isolierter Knoten $3$ (kein HP). \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); \node[font=\footnotesize] at (1.3,-1.4) {kein HP in $G$}; \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); \draw[black!50] (u)--(1) (u)--(2) (u)--(3); \node[font=\footnotesize, text width=5.8cm, align=center] at (1.3,-2.5) {$3$ hängt nur an $u$ (Grad $1$); $u$ wird nur einmal besucht $\Rightarrow$ kein HK}; \end{scope} \end{tikzpicture} \end{center} Knoten $3$ ist im Kreis nur über $u$ erreichbar, doch $u$ liegt in einem Kreis zwischen genau zwei Nachbarn -- $3$ mit Grad $1$ kann nicht auf einem Kreis liegen. \textbf{Nein.} \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{Reduktion.} Wähle einen Knoten $v$; füge einen Zwilling $v^*$ mit denselben Nachbarn wie $v$ hinzu, dazu Grad-1-Pendants $s$ an $v$ und $t$ an $v^*$. Ein HK durch $v$ wird zum HP, indem er bei $v$/$v^*$ aufgetrennt und mit $s,t$ verlängert wird. \medskip \textbf{Ja-Instanz bleibt Ja.} $G=$ Dreieck $\{v,w_1,w_2\}$ (hat HK). \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{Ja.} \medskip \textbf{Nein-Instanz bleibt Nein.} $G=$ Pfad $v\!-\!w_1\!-\!w_2$ (kein HK). Dann ist $v^*$ nur zu $w_1$ benachbart (einziger Nachbar von $v$). \begin{center} \begin{tikzpicture}[scale=0.95] \begin{scope} \node[kndick,font=\small] (v) at (0,0) {$v$}; \node[knoten,font=\small] (w1) at (1.4,0) {$w_1$}; \node[knoten,font=\small] (w2) at (2.8,0) {$w_2$}; \draw[thick] (v)--(w1)--(w2); \node[font=\footnotesize] at (1.4,-1.4) {kein HK in $G$}; \end{scope} \draw[->,thick] (3.6,-0.3) -- (4.8,-0.3); \begin{scope}[xshift=6.0cm] \node[knoten,font=\small] (s) at (-1.3,0) {$s$}; \node[kndick,font=\small] (v) at (0,0) {$v$}; \node[knoten,font=\small] (w1) at (1.3,0) {$w_1$}; \node[knoten,font=\small] (w2) at (2.6,0) {$w_2$}; \node[kndick,font=\small] (vs) at (1.3,-1.3) {$v^*$}; \node[knoten,font=\small] (t) at (2.6,-1.3) {$t$}; \draw[thick] (s)--(v)--(w1)--(w2); \draw[thick] (vs)--(w1) (vs)--(t); \node[font=\footnotesize, text width=6.6cm, align=center] at (0.9,-2.4) {drei Grad-1-Knoten $s,t,w_2$ $\Rightarrow$ ein Pfad hat nur $2$ Enden $\Rightarrow$ kein HP}; \end{scope} \end{tikzpicture} \end{center} $v^*$ ist nur über $w_1$ erreichbar; jeder Versuch, $v^*$ zu erreichen, bräuchte $w_1$ ein zweites Mal. Formal: $s,t,w_2$ haben alle Grad $1$, ein Pfad kann aber höchstens $2$ Endpunkte haben. \textbf{Nein.} \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{Reduktion.} Jeder Knoten von $G$ wird zu einer Clique $K_{43}$ mit den Portalen $v_1,v_{43}$; jede Originalkante dockt nur an den Portalen an. Ein Hamiltonkreis durchläuft jede Clique als \emph{ein} Portal-zu-Portal-Segment. \medskip \textbf{Ja-Instanz bleibt Ja.} Basis: Dreieck $A,B,C$ 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{Konkret:} Die Cliquen haben die Knoten $A_1, \dots, A_{43}$, $B_1, \dots, B_{43}$ und $C_1, \dots, C_{43}$. Jede Originalkante liefert genau vier Portalkanten, z.\,B.\ für $A$--$B$: \[ \{A_1,B_1\},\ \{A_1,B_{43}\},\ \{A_{43},B_1\},\ \{A_{43},B_{43}\} \] (analog für $B$--$C$ und $C$--$A$). Grade: innere Clique-Knoten haben Grad 42; ein Portal wie $A_1$ hat $42 + 4 = 46$ (zwei inzidente Originalkanten mal zwei Portalkanten). Alle Grade $\ge 42$ -- die Instanz ist gültig. Der HK $A\!-\!B\!-\!C\!-\!A$ wird zum konkreten HK in $G'$: \[ A_1 - A_2 - \dots - A_{43} \;\xrightarrow{\{A_{43},B_1\}}\; B_1 - \dots - B_{43} \;\xrightarrow{\{B_{43},C_1\}}\; C_1 - \dots - C_{43} \;\xrightarrow{\{C_{43},A_1\}}\; A_1. \] Jede Clique wird als ein Portal-zu-Portal-Pfad durchlaufen, die Übergänge sind die markierten Portalkanten. \textbf{Ja.} \medskip \textbf{Nein-Instanz bleibt Nein.} Basis: Pfad $A\!-\!B\!-\!C$ (keine Kante $A\!-\!C$), also \emph{kein} Hamiltonkreis. \begin{center} \begin{tikzpicture}[scale=0.95] \node[knoten,font=\small] (A) at (0,0) {$A$}; \node[knoten,font=\small] (B) at (1.4,0) {$B$}; \node[knoten,font=\small] (C) at (2.8,0) {$C$}; \draw[thick] (A)--(B)--(C); \end{tikzpicture} \end{center} Ohne HK in $G$ gibt es keinen in $G'$: Ein Kreis müsste jede Clique einmal Portal-zu-Portal durchlaufen; das Zusammenziehen der Cliquen ergäbe einen HK im Pfad -- den gibt es nicht. \textbf{Nein.} \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{Reduktion.} \problem{SubsetSum} $\redp$ \problem{SubsetSumCardinality}: aus $(c_1,\dots,c_n,K)$ mache $c_i' = c_i+1$ (Shift) für $i\le n$ und $n$ Padding-Items $c_i'=1$ für $i\in\{n+1,\dots,2n\}$; Zielwert $K+n$, verlangte Kardinalität $n$ (also die Hälfte der $2n$ Items). Instanz: $c=(2,3,5)$, $n=3$. \medskip \textbf{Ja-Instanz.} $K=5$ ist eine Ja-Instanz: $\{1,2\}$ mit $2+3=5$. Die Konstruktion liefert $c'=(3,4,6)$ und die Padding-Items $(1,1,1)$ als Items $4,5,6$; Zielwert $K+n=5+3=8$, Kardinalität $3$. Nimm die Bildmenge $\{1,2\}$ und fülle mit einem Padding-Item auf: $\{1,2,4\}$ mit $3+4+1=8$ und genau $3$ Elementen -- die Bildinstanz bleibt \textbf{Ja}. \medskip \textbf{Nein-Instanz.} $K=4$ ist eine Nein-Instanz: keine Teilmenge von $(2,3,5)$ summiert zu $4$. Dieselbe Konstruktion ergibt Items $(3,4,6,1,1,1)$, Zielwert $K+n=4+3=7$, Kardinalität $3$. Ein $3$-elementiges Subset mit $j$ Original- und $3-j$ Padding-Items hat Summe $(\text{Originalsumme}+j)+(3-j)=\text{Originalsumme}+3$; für Summe $7$ wäre eine Originalsumme $4$ nötig -- die es nicht gibt. Kein $3$-Subset trifft $7$ (mögliche Summen: $3,5,6,8,10,11,13$): die Bildinstanz bleibt \textbf{Nein}. \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{Reduktion.} Aus einer \problem{SubsetSum}-Instanz $(c_1,\dots,c_n,K)$ entsteht die neue Instanz mit $a_1=1$, $a_{i+1}=2c_i$ und $T=2K$. Das Original-Item $c_i$ wandert also nach $a_{i+1}$; das aufgesetzte Item $a_1=1$ ist reiner Ballast, damit die Vorbedingung $a_1=1$ erfüllt ist. \medskip \textbf{Ja-Instanz bleibt Ja.} $c=(2,3,5)$, $K=5$ mit Lösung $c_1+c_2=2+3=5$. Transformiert: $a=(1,\;4,\;6,\;10)$, denn $a_2=2\cdot2$, $a_3=2\cdot3$, $a_4=2\cdot5$, und $T=2\cdot5=10$. Die Original-Auswahl $\{c_1,c_2\}$ wird zu $\{a_2,a_3\}$ mit $4+6=10=T$. Das Item $a_1=1$ bleibt ungenutzt. \textbf{Ja.} \medskip \textbf{Nein-Instanz bleibt Nein.} $c=(2,3,5)$, $K=4$: keine Teilmenge von $\{2,3,5\}$ ergibt $4$. Transformiert: $a=(1,4,6,10)$, $T=8$. Ohne $a_1$ ergibt sich aus $\{4,6,10\}$ nie $8$ ($4,\,6,\,10,\;4{+}6{=}10,\;4{+}10{=}14,\;6{+}10{=}16,\;20$). Mit $a_1=1$ wird jede Summe ungerade ($1,\;5,\;7,\;11,\;11,\;15,\;17,\;21$), denn alle übrigen Items sind gerade -- die gerade Zielsumme $T=8$ ist so unerreichbar. \textbf{Nein.} \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{Reduktion} ($\problem{3-ExactCover}\redp\problem{SubsetSum}$). Universum $U=\{u_1,\dots,u_6\}$ ($m=2$, also $|U|=6$), $n=3$ Mengen. 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$ (in Basis $4$: $111111$). \medskip \textbf{Ja-Instanz bleibt Ja.} $S_1=\{u_1,u_2,u_3\}$, $S_2=\{u_4,u_5,u_6\}$, $S_3=\{u_1,u_2,u_4\}$. \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 von $4$, also sind $c_1,c_2,c_3$ paarweise verschieden (jede Größe tritt genau einmal auf -- $\le 2$-mal ist erfüllt). Die exakte Überdeckung $\{S_1,S_2\}$ liefert $c_1+c_2=21+1344=1365=K$ (kein Übertrag in Basis $4$). \textbf{Ja.} \medskip \textbf{Nein-Instanz bleibt Nein.} Gleiches $U$, aber nur $S_1=\{u_1,u_2,u_3\}$, $S_3=\{u_1,u_2,u_4\}$: $u_5,u_6$ sind unüberdeckbar, keine exakte Überdeckung. Größen $c_1=21$, $c_3=69$; jede Teilsumme ($21,\,69,\,90$) bleibt unter $K=1365$. \textbf{Nein.} \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{Reduktion.} Aus $(c_1,\dots,c_n,K)$ entsteht $c_i'=3c_i$, $K'=3K$; dann ist jede Größe durch $3$ teilbar (also die Zusatzbedingung \glqq durch $3$ oder $7$ teilbar\grqq{} erfüllt). \medskip \textbf{Ja-Instanz bleibt Ja.} $c=(2,3,5)$, $K=5$ mit $c_1+c_2=2+3=5$. Transformiert: $c'=(6,9,15)$, $K'=15$. Dieselbe Auswahl: $6+9=15=K'$ (alle Größen durch $3$ teilbar). \textbf{Ja.} \medskip \textbf{Nein-Instanz bleibt Nein.} $c=(2,3,5)$, $K=4$: keine Teilmenge ergibt $4$. Transformiert: $c'=(6,9,15)$, $K'=12$. Teilsummen von $\{6,9,15\}$: $6,\,9,\,15,\;15,\,21,\,24,\,30$ -- $12$ ist nicht dabei. \textbf{Nein.} \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{Reduktion.} Aus $(c_1,\dots,c_n,K)$ entsteht $c_i'=3c_i$, $K'=3K$. Jedes $c_i'$ hat den Primfaktor $3$, ist also keine Zweierpotenz (diese haben nur den Primfaktor $2$) -- die Instanz liegt in der eingeschränkten Menge, auch wenn die Ausgangsgrößen Zweierpotenzen enthalten. \medskip \textbf{Ja-Instanz bleibt Ja.} $c=(1,4,6)$ (mit $1=2^0$, $4=2^2$ Zweierpotenzen!), $K=5$, Lösung $c_1+c_2=1+4=5$. Transformiert: $c'=(3,12,18)$, $K'=15$. Dieselbe Auswahl: $3+12=15=K'$ -- und $3,12,18$ ist keine Zweierpotenz. \textbf{Ja.} \medskip \textbf{Nein-Instanz bleibt Nein.} $c=(1,4,6)$, $K=8$: keine Teilmenge von $\{1,4,6\}$ ergibt $8$. Transformiert: $c'=(3,12,18)$, $K'=24$. Teilsummen von $\{3,12,18\}$: $3,\,12,\,18,\;15,\,21,\,30,\,33$ -- $24$ ist nicht dabei. \textbf{Nein.} \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{Reduktion} (Gap: HK $\to$ TSP). Kante $\to$ Distanz $1$, Nicht-Kante $\to$ $\alpha n+1$. Fest gewählt: $\alpha=2$, $n=4$, also $\alpha n+1=9$ und Schranke $\alpha n=8$. Der Test \glqq$A(I)\le 8$?\grqq{} entscheidet HK. \medskip \textbf{Ja-Instanz.} $G=$ Kreis $1\!-\!2\!-\!3\!-\!4\!-\!1$ (hat HK). $\OPT=n=4$ (Tour nur über echte Kanten), also $A(I)\le\alpha n=8$. \medskip \textbf{Nein-Instanz.} Knoten $1$ hat Grad $1$, also gibt es keinen HK. Jede Tour muss bei $1$ eine Nicht-Kante ($=9$) benutzen, also $\OPT\ge 9+3\cdot1=12>8$, d.\,h.\ $A(I)>8$. \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} Solid $=1$, gestrichelt $=\alpha n+1=9$. Der Gütetest trennt Ja ($\le8$) von Nein ($>8$) und würde HK in Polynomialzeit lösen. \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{Reduktion.} \problem{SAT} $\redp \mathrm{HALT}_{\mathrm{TM}}$: zu einer Formel $\varphi$ entsteht das Paar $\langle M, \langle\varphi\rangle\rangle$. Die feste DTM $M$ probiert auf Eingabe $\langle\varphi\rangle$ nacheinander alle Belegungen von $\varphi$, hält, sobald eine erfüllende gefunden ist, und geht sonst in eine Endlosschleife. \medskip \textbf{Ja-Instanz.} $\varphi=(x_1\vee x_2)\wedge(\neg x_1)$ ist erfüllbar. $M$ probiert zuerst $x_1x_2=00$: die erste Klausel wird $(0\vee 0)=\false$. Als Nächstes probiert $M$ die Belegung $x_1x_2=01$: es gilt $(0\vee 1)=\true$ und $(\neg 0)=\true$ -- beide Klauseln sind wahr, also hält $M$ hier. Damit $\langle M,\langle\varphi\rangle\rangle\in \mathrm{HALT}_{\mathrm{TM}}$: die Bildinstanz bleibt \textbf{Ja}. \medskip \textbf{Nein-Instanz.} $\varphi=(x_1)\wedge(\neg x_1)$ ist unerfüllbar: $x_1=0$ scheitert an der Klausel $(x_1)$, $x_1=1$ an $(\neg x_1)$. $M$ findet keine erfüllende Belegung, geht in die Endlosschleife und hält nie. Also $\langle M,\langle\varphi\rangle\rangle\notin\mathrm{HALT}_{\mathrm{TM}}$: die Bildinstanz bleibt \textbf{Nein}. \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} Wir setzen eine kleine \problem{Clique}-Instanz ein: $G$ mit $|V|=5$, $|E|=6$, gesucht $k=3$. Die Reduktion bildet den Komplementgraphen $\bar G$ und setzt $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} \smallskip \textbf{Parameter der VC-Instanz $(\bar G,k')$:} \[ |V'| = |V| = 5,\qquad |E'| = \tbinom{5}{2}-|E| = 10-6 = 4,\qquad k' = |V|-k = 5-3 = 2. \] \textbf{Kontrapositions-Schluss.} Ein zu schneller VC-Löser ergäbe via dieser Reduktion einen zu schnellen \problem{Clique}-Löser -- und $2^{o(|V|)}$ ist für \problem{Clique} unter der ETH verboten: \begin{itemize} \item $|V'|=|V|=5$: Ein $2^{o(|V'|)}$-Löser wäre ein $2^{o(5)}=2^{o(|V|)}$-Löser für \problem{Clique}. Also \emph{kein} $2^{o(|V'|)}$. \item $\sqrt{|E'|}=\sqrt 4 = 2 = O(|V|)$: Ein $2^{o(\sqrt{|E'|})}$-Löser wäre ein $2^{o(|V|)}$-Löser für \problem{Clique}. Also \emph{kein} $2^{o(\sqrt{|E'|})}$. \item $k'=2\le|V|=5$: Ein $2^{o(k')}$-Löser wäre ein $2^{o(|V|)}$-Löser für \problem{Clique}. Also \emph{kein} $2^{o(k')}$. \end{itemize} Alle drei Schranken für \problem{VertexCover} folgen aus dem einen verbotenen $2^{o(|V|)}$-Algorithmus für \problem{Clique}. \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} Wir setzen die 3-SAT-Formel mit $n=3$, $m=2$ ein: \[ C_1 = (x_1 \vee \bar x_2 \vee x_3),\qquad C_2 = (\bar x_1 \vee x_2 \vee \bar x_3). \] Die Reduktion liefert die \problem{HittingSet}-Instanz $U=\{x_1,\bar x_1,x_2,\bar x_2,x_3,\bar x_3\}$ mit den Mengen $F_i=\{x_i,\bar x_i\}$ (pro Variable) und $F_{n+j}=C_j$ (pro Klausel), $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{Kontrapositions-Schluss} (ETH: \problem{3-SAT} nicht in $2^{o(n)}$; mit Sparsification auch nicht in $2^{o(m)}$; $n\le 3m$): \begin{itemize} \item $|U|=2n=6$: Ein $2^{o(|U|)}$-Löser wäre ein $2^{o(2n)}=2^{o(n)}$-Löser für \problem{3-SAT} -- direkter ETH-Verstoß. Kein $2^{o(|U|)}$. \item $r=n+m=5$: Wegen $n\le 3m$ ist $r=O(m)$; ein $2^{o(r)}$-Löser wäre ein $2^{o(m)}$-Löser -- Verstoß laut Sparsification-Lemma. Kein $2^{o(r)}$. \item $k=n=3$: Ein $2^{o(k)}$-Löser wäre ein $2^{o(n)}$-Löser -- direkter ETH-Verstoß. Kein $2^{o(k)}$. \end{itemize} \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} Wir starten mit einer \problem{3-SAT}-Formel mit $m=4$ Klauseln (unter der ETH mit Sparsification kein $2^{o(m)}=2^{o(4)}$-Löser) und verfolgen die von den Reduktionen erzeugten Instanzgrößen. Zur Illustration setzen wir die $O$-Schranken 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{Exponenten-Verkettung (Kontraposition).} Ein $2^{o(\sqrt[4]{n})}$-Löser für \problem{SubsetSum} hätte bei $n=256$ den Exponenten $\sqrt[4]{256}=4=m$. Über die Kette: \[ 2^{o(\sqrt[4]{n})}\text{-SubsetSum} \;\Rightarrow\; 2^{o(\sqrt[4]{|F|})}\text{-3-EC} \;\Rightarrow\; 2^{o(\sqrt[4]{|T|})}\text{-3-DM} \;\Rightarrow\; 2^{o(m)}\text{-3-SAT}, \] denn $\sqrt[4]{|T|}=\sqrt[4]{m^4}=m$. Ein $2^{o(m)}$-Löser für \problem{3-SAT} ist unter der ETH (Sparsification) verboten -- also existiert keiner der Löser in der Kette. Analog liefert Schritt~(1) über $\sqrt{|E|}=\sqrt{m^2}=m$ und $k=m$ die Clique-Schranken kein $2^{o(\sqrt{|E|})}$, kein $2^{o(k)}$. Schritt~(2) überträgt die $k$-Schranke auf $k$-\problem{IS}: Komplementieren ist polynomiell und $k$ bleibt gleich -- kein $2^{o(k)}$-Löser für $k$-\problem{IS}. \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} Wir setzen $n=3$, $m=2$ ein. Die Reduktion erzeugt die Knotenmenge $V=\{x_i,\bar x_i,v_i \mid i\in[3]\}\cup\{C_1,C_2\}\cup\{z\}$: \[ |V| = 3n+m+1 = 9+2+1 = 12. \] \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} Die Kanten, Gruppe für Gruppe gezählt: \begin{itemize} \item $v$-Clique: $\binom{3}{2} = 3$; \item $v_i$--Literal-Kanten ($v_i$ zu $x_j, \bar x_j$ für $j \ne i$): $3 \cdot 2 \cdot 2 = 12$; \item Variablen-Kanten $x_i$--$\bar x_i$: $3$; \item Klausel-Kanten ($C_j$ zu seinen $\le 3$ Literalen): $2 \cdot 3 = 6$; \item $z$-Kanten (zu allen $v_i$ und $C_j$): $3 + 2 = 5$. \end{itemize} Zusammen $|E| = 3+12+3+6+5 = 29$, also $\sqrt{|E|} = \sqrt{29} \approx 5{,}4$. Wegen $n\le 3m$ (hier $3\le 6$) sind $|V| = O(m)$ und $\sqrt{|E|} = O(m)$. \textbf{Kontrapositions-Schluss} (ETH mit Sparsification: kein $2^{o(m)}$ für \problem{3-SAT}): \begin{itemize} \item $|V|=12=O(m)$: Ein $2^{o(|V|)}$-Löser für $k$-\problem{Color} wäre ein $2^{o(m)}$-Löser für \problem{3-SAT} -- Sparsification-Verstoß. Kein $2^{o(|V|)}$. \item $\sqrt{|E|}=\sqrt{29}=O(m)$: Ein $2^{o(\sqrt{|E|})}$-Löser wäre ebenso ein $2^{o(m)}$-Löser für \problem{3-SAT} -- Verstoß. Kein $2^{o(\sqrt{|E|})}$. \end{itemize} Beide Schranken folgen aus dem verbotenen $2^{o(m)}$-Algorithmus für \problem{3-SAT}. \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} Als \problem{Clique}-Instanz nehmen wir den Dreiecksgraphen $K_3$: $|V|=3$, $|E|=3$ (zusammenhängend). Die Reduktion erzeugt \[ n = 4|V|+3|E| = 12+9 = 21 \text{ Jobs},\qquad T = 2|V|+2|E| = 6+6 = 12 \text{ (Makespan)}. \] \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} Da der Graph zusammenhängend ist ($|V|\le|E|+1$), wachsen $n=4|V|+3|E|$ und $T=2|V|+2|E|$ in der Reduktionsfamilie nur \emph{linear} in $|E|$; an dieser Instanz: $n=21$, $T=12$ bei $|E|=3$. \textbf{Kontrapositions-Schluss} (Clique-Bounds für zusammenhängende Graphen: kein $2^{o(|V|)}$, kein $2^{o(\sqrt{|E|})}$): \begin{itemize} \item $\sqrt{n}=O(\sqrt{|E|})$: Ein $2^{o(\sqrt n)}$-Scheduler wäre via Reduktion ein $2^{o(\sqrt{|E|})}$-Löser für \problem{Clique} -- ETH-Verstoß. Kein $2^{o(\sqrt n)}$. \item $\sqrt{T}=O(\sqrt{|E|})$: analog ergäbe ein $2^{o(\sqrt T)}$-Scheduler einen $2^{o(\sqrt{|E|})}$-Löser für \problem{Clique}. Kein $2^{o(\sqrt T)}$. \end{itemize} Ohne Wurzel (also kein $2^{o(n)}$, kein $2^{o(T)}$) folgt \emph{nichts}: die Clique-Schranke ist selbst nur $2^{o(\sqrt{|E|})}$, und $n,T=O(|E|)$ liefern nur $\sqrt n,\sqrt T=O(\sqrt{|E|})$. \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} Wir setzen $n=3$, $m=2$ ein, mit $C_1=(x_1\vee\bar x_2\vee x_3)$, $C_2=(\bar x_1\vee x_2\vee\bar x_3)$. Pro Variable ein Dreieck $x_i,\bar x_i,d_i$; pro Klausel ein Knoten $C_j$ mit Kanten zu seinen Literalen. \[ |V| = 3n+m = 9+2 = 11,\qquad |E| = 3n+3m = 9+6 = 15\ \ (\text{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.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{Kontrapositions-Schluss} (ETH mit Sparsification: kein $2^{o(m)}$ für \problem{3-SAT}; $n\le 3m$): \begin{itemize} \item $|V|=11=O(m)$: Ein $2^{o(|V|)}$-Löser für \problem{DominatingSet} wäre ein $2^{o(m)}$-Löser für \problem{3-SAT} -- Verstoß. Kein $2^{o(|V|)}$. \item $|E|=15=O(m)$ \emph{linear}: Ein $2^{o(|E|)}$-Löser (\emph{ohne} Wurzel!) wäre ebenso ein $2^{o(m)}$-Löser -- Verstoß. Kein $2^{o(|E|)}$. \end{itemize} Besonderheit: Weil $|E|$ hier nur linear (statt quadratisch) in $m$ wächst, gilt die Schranke \emph{ohne} Wurzel -- $2^{o(|E|)}$ statt $2^{o(\sqrt{|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} \problem{Clique}-Instanz: $N=|V|=4$, $|E|=5$, gesucht $k=3$. Die Reduktion baut ein $k\times k=3\times3$-Gitter: Diagonalzellen $S_{i,i}=\{(a,a)\}$ mit $|S_{i,i}|=N=4$, Nebendiagonalzellen $S_{i,j}=\{(a,b):\{a,b\}\in E\}$ mit $|S_{i,j}|=2|E|=10$. \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{Parameter:} $X=\sum_{(i,j)}|S_{i,j}| = 3\cdot 4 + 6\cdot 10 = 72 = O(N^4)$ und $Y=\max_{(i,j)}|S_{i,j}| = \max(4,10) = 10 = O(N^2)$. \textbf{Kontrapositions-Schluss} (ETH: kein $2^{o(N)}$ für \problem{Clique}): \begin{itemize} \item $\sqrt[4]{X}=\sqrt[4]{72}\approx 2{,}9 = O(N)$: Ein $2^{o(\sqrt[4]{X})}$-Löser für \problem{GridTiling} wäre ein $2^{o(N)}$-Löser für \problem{Clique} -- ETH-Verstoß. Kein $2^{o(\sqrt[4]{X})}$. \item $\sqrt{Y}=\sqrt{10}\approx 3{,}2 = O(N)$: Ein $2^{o(\sqrt{Y})}$-Löser wäre ebenso ein $2^{o(N)}$-Löser für \problem{Clique}. Kein $2^{o(\sqrt{Y})}$. \end{itemize} \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} Instanz: $n=3$, $m=2$, $\varphi=(x_1\vee x_2\vee x_3)\wedge(\bar x_1\vee\bar x_2\vee x_3)$. Wir setzen die Parameter der Reduktion ein. \smallskip \textbf{Anzahl Items:} $2n+2m = 6+4 = 10$ (je Variable $a_i,b_i$, je Klausel $c_j,d_j$). \textbf{Verschiedene Itemgrößen:} Die Klausel-Items $c_j,d_j$ teilen sich je \emph{eine} Größe ($10^{n+j-1}$), also \[ d \le 2n+m = 6+2 = 8 \quad(<10). \] Wegen $n\le 3m$ ist $d=O(m)$. \textbf{Kodierungslänge:} Die größte Größe ist $\Delta < 10^{\,n+m+1} = 10^{6}$, also $L=\log\Delta = O(n+m)=O(m)$; konkret $L<6$ Dezimalstellen. \textbf{Kontrapositions-Schluss} (ETH mit Sparsification: kein $2^{o(m)}$ für \problem{3-SAT}): \begin{itemize} \item $d=8=O(m)$: Ein $2^{o(d)}$-Löser für \problem{SubsetSum} wäre ein $2^{o(m)}$-Löser für \problem{3-SAT} -- Sparsification-Verstoß. Kein $2^{o(d)}$. \item $L=O(m)$: Ein $2^{o(L)}$-Löser wäre ebenso ein $2^{o(m)}$-Löser -- Verstoß. Kein $2^{o(L)}$. \end{itemize} Schärfe der Reduktion: obwohl $10$ Items vorliegen, gibt es nur $d\le 8$ Größen, und die Zahlen bleiben mit $L<6$ Stellen kurz -- beides linear in $m$. \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} \problem{SetCover}-Instanz: $U=\{w_1,w_2,w_3\}$, $F_1=\{w_1,w_2\}$, $F_2=\{w_2,w_3\}$, $k=1$ (also $r=2$ Mengen). Der involutorische Rollentausch $F'_w=\{v : 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} Inzidenz: $F'_{w_1}=\{1\}$, $F'_{w_2}=\{1,2\}$, $F'_{w_3}=\{2\}$. Somit \[ |U| = r' = 3,\qquad r = |U'| = 2. \] \textbf{Kontrapositions-Schluss} (Voraussetzung: \problem{HittingSet} unter der ETH nicht in $2^{o(r')}$ und nicht in $2^{o(|U'|)}$): \begin{itemize} \item $|U|=r'$: Ein $2^{o(|U|)}$-Löser für \problem{SetCover} wäre via Rollentausch ein $2^{o(r')}$-Löser für \problem{HittingSet} -- verboten. Kein $2^{o(|U|)}$. \item $r=|U'|$: Ein $2^{o(r)}$-Löser wäre ein $2^{o(|U'|)}$-Löser für \problem{HittingSet} -- verboten. Kein $2^{o(r)}$. \end{itemize} \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} $n=3$, $m=2$ mit $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 $x_{(\cdot)}$; also $N=2n=6$ Variablen $x_{x_1},x_{\bar x_1},\dots,x_{x_3},x_{\bar x_3}$. \smallskip \textbf{Ungleichungen} ($M=m+2n=2+6=8$ Zeilen): \[ \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} \] Das sind $m=2$ Klausel- plus $2n=6$ Variablen-Zeilen, zusammen $M=8$. \textbf{Kontrapositions-Schluss} (ETH: kein $2^{o(n)}$ für \problem{3-SAT}; mit Sparsification kein $2^{o(m)}$; $n\le 3m$): \begin{itemize} \item $M=8=O(m)$: Ein $2^{o(M)}$-Löser für \problem{ILP-Feasibility} wäre ein $2^{o(m)}$-Löser für \problem{3-SAT} -- Sparsification-Verstoß. Kein $2^{o(M)}$. \item $N=2n=6$: Ein $2^{o(N)}$-Löser wäre ein $2^{o(2n)}=2^{o(n)}$-Löser für \problem{3-SAT} -- direkter ETH-Verstoß. Kein $2^{o(N)}$. \end{itemize} \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} Start: \problem{3-SAT} 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)$. \smallskip \textbf{(a) NAE-4-SAT.} Neue Variable $w$; jede Klausel wird zu $C_i\cup\{w\}$: $C_1'=(x_1\vee x_2\vee x_3\vee w)$, $C_2'=(\bar x_1\vee x_2\vee\bar x_3\vee w)$. Parameter: $n'=n+1=4$, $m'=m=2$. \textbf{(b) Bounds NAE-4-SAT} (ETH: kein $2^{o(n)}$/$2^{o(m)}$ für 3-SAT). Ein $2^{o(n')}$-Löser ergäbe (da $n'=n+1$) einen $2^{o(n)}$-3-SAT-Löser (direkter Verstoß); ein $2^{o(m')}$-Löser ergäbe (da $m'=m$) einen $2^{o(m)}$-3-SAT-Löser (Sparsification-Verstoß). Kein $2^{o(n')}$, kein $2^{o(m')}$. \textbf{(c) SetSplitting.} $S=\{x_i,\bar x_i \mid i\in[3]\}\cup\{w,\bar w\}$, also \[ |S| = 2n' = 8,\qquad r = n'+m' = 4+2 = 6. \] Mengen: die $n'=4$ Paare $\{x_i,\bar x_i\}$ bzw.\ $\{w,\bar w\}$ und die $m'=2$ Klauseln $C_i'$. Die gesuchte Partition $S=S_1\mathbin{\dot\cup}S_2$ (wahr/falsch) schneidet jede Menge. \textbf{(d) Bounds SetSplitting:} \begin{itemize} \item $|S|=8=2n'$: Ein $2^{o(|S|)}$-Löser ergäbe einen $2^{o(n')}$-NAE-Löser und wegen $n'=n+1$ einen $2^{o(n)}$-3-SAT-Löser -- direkter ETH-Verstoß. Kein $2^{o(|S|)}$. \item $r=6$: jede NAE-Klausel hat $\le 4$ Literale, also $n'\le 4m'+1=O(m')$ und $r=n'+m'=O(m')$; ein $2^{o(r)}$-Löser ergäbe einen $2^{o(m')}$-NAE-Löser und wegen $m'=m$ einen $2^{o(m)}$-3-SAT-Löser -- Sparsification-Verstoß. Kein $2^{o(r)}$. \end{itemize} \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{(a) CoverClique} (aus $k$-\problem{Color}, Komplementgraph). Instanz $G=C_4$ (4-Kreis), $k=2$: $|V|=4$, $|E|=4$. Komplement $\bar G$ hat die beiden Nicht-Kanten $\{1,3\},\{2,4\}$, also $|V'|=|V|=4$, $|\bar E|=2$. \textbf{(c) $\Delta$Cover} (aus \problem{VertexCover}). Instanz: eine Kante $\{u,v\}$ ($|V|=2$, $|E|=1$). Pro Kante ein neuer Knoten $v_e$ mit Dreieck: $V'=\{u,v,v_e\}$, $E'=\{uv,uv_e,vv_e\}$, also $|V'|=|V|+|E|=3$, $|E'|=3|E|=3$. \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{(b) Bounds CoverClique} ($k$-\problem{Color} nicht in $2^{o(|V|)}$): $|V'|=|V|$ $\Rightarrow$ ein $2^{o(|V'|)}$-Löser wäre ein $2^{o(|V|)}$-$k$-Color-Löser; $\sqrt{|\bar E|}\le\sqrt{|V|^2}=O(|V|)$ $\Rightarrow$ $2^{o(\sqrt{|\bar E|})}$ ebenso. Kein $2^{o(|V'|)}$, kein $2^{o(\sqrt{|\bar E|})}$. \textbf{(d) Bounds $\Delta$Cover} (\problem{VertexCover} nicht in $2^{o(|V|)}$, nicht in $2^{o(\sqrt{|E|})}$): $|V'|=|V|+|E|=O(|V|^2)$, also $\sqrt{|V'|}=O(|V|)$ $\Rightarrow$ ein $2^{o(\sqrt{|V'|})}$-Löser wäre ein $2^{o(|V|)}$-VC-Löser; $|E'|=3|E|=O(|E|)$, also $\sqrt{|E'|}=O(\sqrt{|E|})$ $\Rightarrow$ ein $2^{o(\sqrt{|E'|})}$-Löser wäre ein $2^{o(\sqrt{|E|})}$-VC-Löser. Kein $2^{o(\sqrt{|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{Eingabe $w=\mathtt{abba}$ (Palindrom).} Die Maschine vergleicht die äußersten unmarkierten Buchstaben und ersetzt gleiche Paare durch $x$; der Bandinhalt entwickelt sich: \begin{center} \begin{tabular}{@{}l@{\qquad}l@{}} \texttt{a\,b\,b\,a} & erstes \texttt{a} $=$ letztes \texttt{a} $\Rightarrow$ beide $\to x$\\ \texttt{x\,b\,b\,x} & \texttt{b} $=$ \texttt{b} $\Rightarrow$ beide $\to x$\\ \texttt{x\,x\,x\,x} & keine unmarkierten Buchstaben $\Rightarrow$ \textbf{akzeptiert}\\ \end{tabular} \end{center} \textbf{Nicht-Palindrom $w=\mathtt{ab}$.} Erster Buchstabe \texttt{a}, letzter \texttt{b}: verschieden $\Rightarrow$ \textbf{verworfen} (Band bleibt \texttt{a\,b}). \textbf{Ungerades Palindrom $w=\mathtt{aba}$.} \begin{center} \begin{tabular}{@{}l@{\qquad}l@{}} \texttt{a\,b\,a} & \texttt{a} $=$ \texttt{a} $\Rightarrow$ beide $\to x$\\ \texttt{x\,b\,x} & ein einzelner Buchstabe (\texttt{b}) in der Mitte $\Rightarrow$ \textbf{akzeptiert}\\ \end{tabular} \end{center} \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{Eingabe $\mathtt{0000}$ ($=2^2$, in $L$).} Jeder Durchlauf ersetzt jede zweite 0 durch $x$, halbiert also die Anzahl der Nullen: \begin{center} \begin{tabular}{@{}l@{\qquad}l@{}} \texttt{0\,0\,0\,0} & 4 Nullen (gerade): jede zweite $\to x$, weiter\\ \texttt{0\,x\,0\,x} & 2 Nullen (gerade): jede zweite $\to x$, weiter\\ \texttt{0\,x\,x\,x} & genau eine 0 $\Rightarrow$ \textbf{akzeptiert}\\ \end{tabular} \end{center} \textbf{Eingabe $\mathtt{000}$ ($=3$, nicht in $L$).} \begin{center} \begin{tabular}{@{}l@{\qquad}l@{}} \texttt{0\,0\,0} & 3 Nullen (ungerade): jede zweite $\to x$\\ \texttt{0\,x\,0} & letztes Symbol ist eine 0 (ungerade Anzahl) $\Rightarrow$ \textbf{verworfen}\\ \end{tabular} \end{center} \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}