\documentclass[11pt]{article} \input{style_guide.tex} \linespread{1.05} \setlength{\parskip}{0.4em} \title{\textbf{\Huge Die 7 Aufgabentypen}\\[0.5em] \large Musterlösungen, Rezepte und Bewertungshinweise\\ \normalsize \textit{Analyse von Algorithmen und Komplexität} -- CAU Kiel, SS 2026\\[0.2em] \normalsize Schritt 3: die Muster kennen und richtig anwenden} \author{} \date{} \begin{document} \maketitle \thispagestyle{empty} \begin{center}\itshape\large Jeder Klausur-Aufgabentyp einmal vorgemacht --\\ mit Rezept, kompletter Musterlösung und dem, worauf der Korrektor achtet. \end{center} \vfill \noindent\textbf{Wofür dieses Heft.} Du hast das Fundament verstanden. Jetzt lernst du, es \emph{anzuwenden}. Alle bisherigen Klausuren, Haus- und Präsenzaufgaben lassen sich auf \textbf{sieben Aufgabentypen} zurückführen. Zu jedem zeigt dieses Heft: ein \emph{Rezept} (Schritt für Schritt), eine \emph{vollständig gelöste} Musteraufgabe im richtigen Stil, die \emph{Bewertungslogik} und die \emph{häufigen Fehler}. \medskip \noindent\textbf{Die Reihenfolge ist Absicht.} Die Typen bauen aufeinander auf. Arbeite sie von vorne nach hinten durch: \begin{center}\small \begin{tabular}{rll} \toprule \# & Aufgabentyp & baut auf \\ \midrule 1 & NP-Zugehörigkeit zeigen & Grundbaustein\\ 2 & Reduktion konstruieren (NP-Schwere) & braucht 1\\ 3 & Wahr oder falsch? & festigt 1+2\\ 4 & ETH-Schranke herleiten & braucht 2\\ 5 & Approximationsalgorithmus anwenden & neues Teilgebiet\\ 6 & Güte beweisen + Worst-Case-Instanz & braucht 5\\ 7 & Turingmaschine entwerfen & eigenständig\\ \bottomrule \end{tabular} \end{center} \medskip \noindent\textbf{Der Stil ist echt.} Die Musterlösungen sind im Stil bewerteter Abgaben gehalten: knapp, formal, jeder Schritt sichtbar begründet. Die Bewertungshinweise stammen aus echten Punkteschemata und Korrektor-Anmerkungen. \vfill \newpage \tableofcontents \newpage % ################################################################## \section{NP-Zugehörigkeit zeigen} % ################################################################## \begin{ziel} Der erste und einfachste Typ. Du zeigst, dass ein Problem in $\NP$ liegt -- indem du ein Zertifikat angibst und beschreibst, wie man es prüft. Dieser Baustein steckt später in \emph{jedem} NP-Vollständigkeitsbeweis. \end{ziel} \subsection{Woran du diesen Typ erkennst} Die Aufgabe klingt so (wörtlich aus der Klausur SS23): \glqq Zeigen Sie auf \emph{verschiedene Weisen}, dass das Problem in NP liegt: (a) geben Sie ein Zertifikat an, (b) beschreiben Sie einen Verifizierer mit konkreter Laufzeit, (c) beschreiben Sie in Worten eine nichtdeterministische Turingmaschine.\grqq \subsection{Das Rezept} \begin{rezept}{Der NP-Dreischritt} \textbf{(a) Zertifikat.} Nenne die \glqq Lösung\grqq{} als Objekt (Teilmenge, Belegung, Reihenfolge). Sage, wie sie kodiert ist und dass sie \emph{polynomiell lang} ist.\\[0.4em] \textbf{(b) Verifizierer.} Ein deterministischer Algorithmus, der (Instanz, Zertifikat) bekommt. Hake drei Punkte ab: \begin{enumerate} \item \emph{Beschreibung}: Welche Prüfungen laufen in welcher Reihenfolge? \item \emph{Korrektheit -- beide Richtungen}: Ja-Instanz $\Rightarrow$ es gibt ein akzeptiertes Zertifikat; Nein-Instanz $\Rightarrow$ keines wird akzeptiert. \item \emph{Laufzeit}: konkret in $O$-Notation, nicht nur \glqq polynomiell\grqq. \end{enumerate} \textbf{(c) NTM.} \glqq Rate und prüfe.\grqq{} Rate das Zertifikat Stück für Stück nichtdeterministisch, prüfe dann deterministisch wie in (b). \end{rezept} \subsection{Musteraufgabe} \begin{aufgabe}{Longest Path (Klausur SS23, Aufgabe 2)} Gegeben ein Graph $G = (V,E)$ und eine Zahl $k$. Gibt es einen \emph{einfachen} Pfad (kein Knoten doppelt) der Länge $\ge k$? Zeigen Sie auf drei Weisen, dass \problem{Longest Path} in $\NP$ liegt. \end{aufgabe} \begin{loesung} \textbf{(a) Zertifikat.} Eine Folge von $k+1$ paarweise verschiedenen Knoten $(v_0, v_1, \dots, v_k)$ -- der behauptete Pfad. Jeder Knoten braucht $O(\log |V|)$ Bits, die Folge also $O(k \log |V|)$ Bits. Das ist polynomiell in der Eingabegröße. \medskip \textbf{(b) Verifizierer.} Er bekommt $(G, k)$ und ein Zertifikat $(v_0, \dots, v_k)$ und prüft: \begin{itemize} \item ob alle $v_i$ \emph{paarweise verschieden} sind -- $O(k^2)$ Vergleiche (oder $O(k \log k)$ durch Sortieren); \item ob $\{v_i, v_{i+1}\} \in E$ für alle $i = 0, \dots, k-1$ gilt -- das sind $k$ Nachschläge in der Adjazenzmatrix zu je $O(1)$, also $O(k)$. \end{itemize} Akzeptiere genau dann, wenn beide Prüfungen bestehen. \emph{Korrektheit (beide Richtungen).} Hat $G$ einen einfachen Pfad der Länge $\ge k$, so bilden seine ersten $k+1$ Knoten ein Zertifikat, das akzeptiert wird. Wird umgekehrt ein Zertifikat akzeptiert, so ist es eine Folge verschiedener Knoten mit lauter echten Kanten -- also ein einfacher Pfad der Länge $k$. \emph{Laufzeit.} Gesamt $O(k^2) \subseteq O(|V|^2)$, polynomiell. Somit ist dies ein polynomieller Verifizierer, und $\problem{Longest Path} \in \NP$. \medskip \textbf{(c) NTM.} Rate nacheinander $k+1$ Knoten auf ein Arbeitsband ($O(k \log |V|)$ nichtdeterministische Schritte). Prüfe danach \emph{deterministisch} die Verschiedenheit und die Kantenbedingung wie in (b). Laufzeit: Raten $O(k \log |V|)$ plus Prüfen $\poly(|V|)$ -- insgesamt polynomiell. \hfill$\square$ \end{loesung} \subsection{Bewertung und häufige Fehler} \begin{bewertung} Typisches Punkteschema pro Teil: \emph{Beschreibung} 2\,P., \emph{Korrektheit} 1\,P., \emph{Laufzeit} 1\,P. Der Korrektor will sehen: \begin{itemize} \item eine \emph{konkrete} $O$-Notation -- \glqq polynomiell\grqq{} allein reicht nicht; \item \emph{beide} Korrektheitsrichtungen, nicht nur \glqq Pfad $\Rightarrow$ Zertifikat\grqq; \item dass die \emph{Kardinalität} ($|C| \le k$ bzw.\ Länge $\ge k$) mitgeprüft wird. \end{itemize} \end{bewertung} \begin{stolper} Die drei Klassiker: (1) nur \glqq polynomiell\grqq{} schreiben, wo eine konkrete Schranke verlangt ist. (2) Die Rückrichtung der Korrektheit weglassen. (3) Beim Verifizierer vergessen, die Größe zu prüfen -- ein Zertifikat könnte sonst \glqq zu klein\grqq{} oder \glqq zu groß\grqq{} sein und würde trotzdem akzeptiert. \end{stolper} \subsection{Zweite Variante (kurz): Knapsack $\in$ NP} Damit du das Muster auf ein Zahlenproblem überträgst: \begin{loesung} \textbf{Zertifikat:} eine Teilmenge $S \subseteq \{1,\dots,n\}$ der Gegenstände (ein Bit pro Gegenstand). \textbf{Verifizierer:} berechne $\sum_{i \in S} w_i$ und $\sum_{i \in S} p_i$, prüfe $\sum_{i \in S} w_i \le B$ und $\sum_{i \in S} p_i \ge P$; akzeptiere entsprechend. Beide Summen und Vergleiche in $O(n)$. \textbf{Korrektheit:} Existiert eine zulässige Auswahl mit genügend Profit, wird sie akzeptiert; sonst keine. Also $\problem{Knapsack} \in \NP$. \hfill$\square$ \end{loesung} % ################################################################## \section{Reduktion konstruieren (NP-Schwere)} % ################################################################## \begin{ziel} Der zentrale und häufigste Klausurtyp. Du beweist, dass ein \emph{neues} Problem schwer ist, indem du ein bekannt schweres Problem darauf reduzierst. Fast immer ist das neue Problem eine \emph{Variante} eines Standardproblems. \end{ziel} \subsection{Woran du diesen Typ erkennst} \glqq Zeigen Sie, dass \problem{X} NP-vollständig (oder NP-schwer) ist.\grqq{} Meist ist \problem{X} ein leicht abgewandeltes bekanntes Problem -- mit einer Zusatzeigenschaft, gerichtet statt ungerichtet, mit einer Nebenbedingung. \subsection{Das Rezept} \begin{rezept}{NP-Vollständigkeit in 6 Schritten} \textbf{1. $\in$ NP.} Verifizierer angeben (oft: \glqq wie beim Originalproblem\grqq). Bei reiner NP-\emph{Schwere} entfällt dieser Schritt.\\[0.3em] \textbf{2. Quellproblem wählen.} Ein bekanntes NP-vollständiges $X$, das dem Ziel $Y$ ähnlich ist. \textbf{Richtung: $X \redp Y$} (bekannt $\redp$ neu).\\[0.3em] \textbf{3. Konstruktion.} Wie wird aus einer $X$-Instanz eine $Y$-Instanz? Präzise, mit \emph{allen} Parametern -- auch die Schranke $k$ anpassen!\\[0.3em] \textbf{4. Polynomialität.} Ein Satz: \glqq Die Konstruktion läuft in $O(\cdot)$.\grqq\\[0.3em] \textbf{5. Korrektheit, beide Richtungen.} $\Rightarrow$: Ja-Instanz von $X$ liefert Ja-Instanz von $Y$. $\Leftarrow$: Ja-Instanz von $Y$ liefert Ja-Instanz von $X$.\\[0.3em] \textbf{6. Schlusssatz.} \glqq Da $X$ NP-vollständig, $X \redp Y$ und $Y \in \NP$: $Y$ ist NP-vollständig.\grqq \end{rezept} \subsection{Musteraufgabe 1} \begin{aufgabe}{Feedback Vertex Set (Hausaufgabe 10.1)} \problem{Feedback Vertex Set (FVS)}: Gegeben ein \emph{gerichteter} Graph $G = (V,E)$ und $k$. Gibt es $X \subseteq V$ mit $|X| \le k$, sodass $G \setminus X$ \emph{kreisfrei} ist? Zeigen Sie: \problem{FVS} ist NP-vollständig. \end{aufgabe} \begin{loesung} \textbf{1. $\in$ NP.} Zertifikat $X \subseteq V$. Der Verifizierer prüft $|X| \le k$ und ob $G \setminus X$ kreisfrei ist -- Letzteres mit dem Algorithmus zur \emph{topologischen Sortierung} (findet genau dann eine Sortierung, wenn der Graph kreisfrei ist). Beides in $O(|V| + |E|)$, also $\problem{FVS} \in \NP$. \medskip \textbf{2. Quellproblem.} \problem{Vertex Cover} ist NP-vollständig. Wir zeigen $\problem{VC} \redp \problem{FVS}$. \medskip \textbf{3. Konstruktion.} Sei $(G = (V,E), k)$ eine \problem{VC}-Instanz (ungerichtet). Baue den gerichteten Graphen $G' = (V, E')$ mit \[ E' = \{\, (u,v),\ (v,u) \ \mid\ \{u,v\} \in E \,\}, \] also: \emph{jede ungerichtete Kante wird zu zwei antiparallelen Bögen} (einem gerichteten Kreis der Länge 2). Die Schranke bleibt $k' = k$. Ausgabe $(G', k)$. \begin{center} \setlength{\unitlength}{1cm} \begin{picture}(9,1.7)(0,-0.4) \put(0.6,0.5){\circle*{0.14}}\put(0.3,0.7){\small $u$} \put(2.6,0.5){\circle*{0.14}}\put(2.75,0.7){\small $v$} \put(0.6,0.5){\line(1,0){2}} \put(1.2,-0.05){\small ungerichtet in $G$} \put(3.3,0.45){\small $\leadsto$} \put(5.0,0.5){\circle*{0.14}}\put(4.7,0.7){\small $u$} \put(7.0,0.5){\circle*{0.14}}\put(7.15,0.7){\small $v$} \put(5.15,0.68){\vector(1,0){1.7}} \put(6.85,0.32){\vector(-1,0){1.7}} \put(5.0,-0.05){\small zwei antiparallele Bögen in $G'$} \end{picture} \end{center} \textbf{4. Polynomialität.} Pro Kante werden zwei Bögen erzeugt, also $O(|E|)$ -- polynomiell. \medskip \textbf{5. Korrektheit.} \begin{itemize} \item[$\Rightarrow$] Sei $C$ ein Vertex Cover mit $|C| \le k$. Dann berührt $C$ jede Kante, also enthält $G \setminus C$ keine Kante. Damit enthält $G' \setminus C$ keinen Bogen und erst recht keinen Kreis -- $C$ ist ein FVS. \item[$\Leftarrow$] Sei $X$ ein FVS mit $|X| \le k$. Angenommen, $X$ wäre \emph{kein} Vertex Cover. Dann gäbe es eine Kante $\{u,v\} \in E$ mit $u \notin X$ und $v \notin X$. In $G'$ bleiben dann beide Bögen $(u,v)$ und $(v,u)$ übrig -- also der Kreis $(u, v, u)$ in $G' \setminus X$. Das ist ein Widerspruch dazu, dass $X$ ein FVS ist. Also ist $X$ ein Vertex Cover. \end{itemize} \textbf{6. Schluss.} Da \problem{VC} NP-vollständig ist, $\problem{VC} \redp \problem{FVS}$ gilt und $\problem{FVS} \in \NP$, ist \problem{FVS} NP-vollständig. \hfill$\square$ \end{loesung} \subsection{Musteraufgabe 2 (kurz): Clique $\redp$ Vertex Cover} Die kürzeste Reduktion überhaupt -- reine Komplement-Umformung, kein Gadget. \begin{loesung} \textbf{Konstruktion.} Aus der \problem{Clique}-Instanz $(G, k)$ mit $n = |V|$ mache die \problem{VC}-Instanz $(\bar G, n - k)$: nimm den Komplementgraphen und setze die Schranke auf $n - k$. \textbf{Korrektheit.} $\Rightarrow$ Ist $C$ eine Clique der Größe $\ge k$ in $G$, so ist $C$ ein Independent Set in $\bar G$, und $V \setminus C$ ein Vertex Cover in $\bar G$ der Größe $\le n - k$. $\Leftarrow$ Ist $D$ ein Vertex Cover der Größe $\le n-k$ in $\bar G$, so ist $V \setminus D$ ein Independent Set der Größe $\ge k$ in $\bar G$ -- also eine Clique der Größe $\ge k$ in $G$. \textbf{Laufzeit.} Komplementgraph in $O(n^2)$. \hfill$\square$ \end{loesung} \subsection{Bewertung und häufige Fehler} \begin{bewertung} Punkteschema (aus Hausaufgabe 11.1): Verifizierer $1{+}0{,}5{+}0{,}5$\,P.; Angabe der Reduktion 1\,P.; \emph{Korrektheit 3\,P.} -- davon \textbf{1,5 pro Richtung}; Laufzeit 1\,P.; Beweisführung 1\,P. Merke: Die Rückrichtung zu vergessen kostet also glatt 1,5 Punkte. \end{bewertung} \begin{stolper} \textbf{Die vier teuren Fehler:} \begin{itemize} \item \emph{Falsche Richtung.} Immer \textbf{bekannt $\redp$ neu} ($X_{\text{bekannt}} \redp Y_{\text{neu}}$), nie umgekehrt. \item \emph{Rückrichtung vergessen} -- kostet 1,5 von 5 Punkten. \item \emph{Zusatzeigenschaft nicht hergestellt.} Prüfe, dass jede konstruierte $Y$-Instanz die geforderte Sonderstruktur wirklich hat (universeller Knoten, Grad-Bedingung, \dots). \item \textbf{Nicht \emph{alle} Fälle in der Korrektheit.} Siehe der echte Punktabzug unten. \end{itemize} \end{stolper} \begin{bewertung} \textbf{Echter Punktabzug (Hausaufgabe 11.1, 9/10).} Bei der Reduktion $\problem{VC} \redp \Delta\text{-}\problem{Cover}$ (jede Kante $e=\{u,v\}$ wird zum Dreieck $\{v_e, u, v\}$ aufgeblasen) stand im Beweis: \glqq \emph{jedes} Dreieck in $G'$ hat die Form $\{v_e, u, v\}$\grqq. Das ist falsch: Weil $E \subseteq E'$ gilt, \emph{erbt} $G'$ auch alle Dreiecke, die $G$ schon hatte (drei paarweise verbundene Original-Knoten). Diese haben \emph{nicht} die Gadget-Form. Der Beweis muss zusätzlich zeigen, dass auch so ein geerbtes Dreieck $\{a,b,c\}$ vom Cover getroffen wird -- was aus dem Vertex Cover folgt (die Kante $\{a,b\}$ ist gedeckt, also $a \in C$ oder $b \in C$). \emph{Lehre: In der Korrektheit immer \textbf{alle} Objekte abdecken, auch die aus dem Originalgraphen geerbten.} \end{bewertung} % ################################################################## \section{Wahr oder falsch? Mit Begründung} % ################################################################## \begin{ziel} Dieser Typ testet, ob du die Begriffe wirklich beherrschst. Du bekommst mehrere Aussagen über P, NP, Reduktionen und Vollständigkeit und musst jede als wahr oder falsch \emph{begründen}. Er festigt genau das, was du in Kapitel 1 und 2 gelernt hast. \end{ziel} \subsection{Das Rezept} \begin{rezept}{So knackst du jede Aussage} \textbf{1.} Führe die Aussage auf die \emph{Definitionen} zurück. Zwei Merksätze reichen fast immer: \begin{itemize} \item \emph{NP-schwer} = untere Schranke (\glqq mindestens so schwer wie alles in NP\grqq). \emph{$\in$ NP} = obere Schranke. \item $A \redp B$ heißt \glqq $B$ mindestens so schwer wie $A$\grqq. Die Richtung ist alles. \end{itemize} \textbf{2.} Ist die Aussage \emph{falsch}, gib ein \textbf{konkretes Gegenbeispiel} (oft $L = \emptyset$ oder ein triviales $L \in \Pclass$).\\ \textbf{3.} Ist sie \emph{wahr}, begründe in einem Satz aus der Definition. \end{rezept} \subsection{Musteraufgabe} \begin{aufgabe}{Fragen über Fragen (Präsenz 11.1)} Entscheide jeweils wahr/falsch und begründe. Sei $L$ eine Sprache. \begin{enumerate} \item[(a)] $L \in \NP$ und $L \redp \problem{3-SAT}$ $\Rightarrow$ $L$ ist NP-vollständig. \item[(b)] $L \redp \problem{3-SAT}$ und $\problem{3-SAT} \redp L$ $\Rightarrow$ $L$ ist NP-vollständig. \item[(c)] $L$ NP-vollständig $\Rightarrow$ ($L \in \Pclass \iff \Pclass = \NP$). \item[(d)] Es ist möglich, dass $\problem{3-SAT} \in \Pclass$ und $\problem{Clique} \notin \Pclass$. \end{enumerate} \end{aufgabe} \begin{loesung} \textbf{(a) Falsch.} $L \redp \problem{3-SAT}$ heißt nur, dass sich $L$ \emph{auf} 3-SAT reduziert -- das macht $L$ \emph{nicht} schwer, sondern höchstens \glqq so leicht wie 3-SAT\grqq. Gegenbeispiel: $L = \emptyset$. Es liegt in $\NP$ und ist auf 3-SAT reduzierbar, aber sicher nicht NP-vollständig. Für NP-Schwere bräuchte man die \emph{andere} Richtung $\problem{3-SAT} \redp L$. \medskip \textbf{(b) Wahr.} Das ist genau die Definition. Aus $\problem{3-SAT} \redp L$ folgt, dass $L$ NP-schwer ist (3-SAT ist NP-vollständig, Schwere vererbt sich). Aus $L \redp \problem{3-SAT}$ folgt $L \in \NP$ (denn 3-SAT $\in \NP$, und die Reduktion überträgt die Zugehörigkeit). Schwer und in NP $=$ NP-vollständig. \medskip \textbf{(c) Wahr.} Ist $L$ NP-vollständig, so reduziert sich jedes $L' \in \NP$ auf $L$. Läge $L$ in $\Pclass$, wäre damit jedes $L' \in \Pclass$, also $\Pclass = \NP$. Umgekehrt folgt aus $\Pclass = \NP$ trivial $L \in \Pclass$. (Das ist der zentrale Satz über NP-vollständige Probleme.) \medskip \textbf{(d) Falsch.} \problem{Clique} lässt sich auf \problem{3-SAT} reduzieren (3-SAT ist NP-vollständig, also ist jedes NP-Problem auf es reduzierbar). Läge \problem{3-SAT} in $\Pclass$, folgte über diese Reduktion auch $\problem{Clique} \in \Pclass$. Die beschriebene Situation kann es also nicht geben. \hfill$\square$ \end{loesung} \subsection{Zweite Variante (kurz): Präsenz 10.1} \begin{loesung} \textbf{(i)} \glqq Löst eine NDTM ein Problem in Polyzeit, dann auch eine gewöhnliche DTM.\grqq{} -- \emph{Nicht beweisbar wahr}: Das würde $\Pclass = \NP$ bedeuten, und das ist offen.\\[0.3em] \textbf{(ii)} \glqq $A$ NP-schwer $\Rightarrow A \in \Pclass$ ausgeschlossen / $A \in \NP$.\grqq{} -- \emph{Falsch}: NP-schwer sagt nichts über die Zugehörigkeit zu NP. Das \problem{Halteproblem} ist NP-schwer, liegt aber nicht in $\NP$ (es ist nicht einmal entscheidbar). \hfill$\square$ \end{loesung} \subsection{Bewertung und häufige Fehler} \begin{bewertung} Hier zählt \emph{ausschließlich die Begründung}, nicht das Kreuz. Ein richtiges \glqq falsch\grqq{} ohne Gegenbeispiel gibt kaum Punkte. Nenne bei falschen Aussagen immer ein \emph{konkretes} Gegenbeispiel; bei wahren die \emph{eine} Definition, aus der es folgt. \end{bewertung} \begin{stolper} Der Dauerbrenner ist die \emph{Reduktionsrichtung}. \glqq $L \redp \problem{3-SAT}$\grqq{} macht $L$ nicht schwer -- es macht $L$ höchstens leicht. Verwechselst du die Richtung, drehst du fast jede Aussage ins Gegenteil. \end{stolper} % ################################################################## \section{ETH-Schranke herleiten} % ################################################################## \begin{ziel} Die typische \emph{letzte} Klausuraufgabe. Aus einer \emph{vorgegebenen} Reduktion leitest du untere Laufzeitschranken her -- unter Annahme der Exponentialzeit-Hypothese (ETH). Du musst hier keine Reduktion erfinden, sondern sauber \emph{rechnen} und argumentieren. \end{ziel} \subsection{Woran du diesen Typ erkennst} \glqq Gegeben die Reduktion \dots. Zeigen Sie unter Annahme der ETH, dass \problem{X} nicht in Zeit $2^{o(p)} \cdot \poly$ lösbar ist -- für die Parameter $p \in \{\dots\}$.\grqq{} Meist sind mehrere Parameter gefragt (Universumsgröße, Mengenzahl, $k$), und bei manchen brauchst du das Sparsification-Lemma, bei anderen nicht. \subsection{Das Rezept} \begin{rezept}{ETH-Schranke in 3 Schritten} \textbf{1. Parameter durch $n$ und $m$ ausdrücken.} Drücke jede gefragte Instanzgröße (Knoten, Mengen, $k$, \dots) durch die Variablenzahl $n$ und die Klauselzahl $m$ der 3-SAT-Formel aus. Nutze $n \le 3m$.\\[0.3em] \textbf{2. Kontrapositions-Baustein hinschreiben.} Für jeden Parameter $p$: \begin{quote}\small\itshape Angenommen, es gäbe einen Algorithmus, der \problem{X} in $2^{o(p)} \cdot |I|^{O(1)}$ löst. Zusammen mit der Reduktion ergäbe das einen Algorithmus für 3-SAT in $2^{o(\,\cdot\,)}$. Nach der ETH (bzw.\ dem Sparsification-Lemma) ist das ausgeschlossen -- Widerspruch. \end{quote} \textbf{3. Das Sparsification-Lemma nur zitieren, wenn nötig.} Hängt $p$ an $n$, brauchst du es \emph{nicht} (die ETH spricht direkt über $n$). Hängt $p$ an $m$, \emph{musst} du es zitieren (die ETH allein verbietet $2^{o(m)}$ nicht). \end{rezept} \subsection{Musteraufgabe} \begin{aufgabe}{Lower Bounds für Hitting Set (Hausaufgabe 12.2)} \problem{Hitting Set}: Universum $U$, Mengen $F_1, \dots, F_r \subseteq U$, Zahl $k$. Gibt es $S \subseteq U$, $|S| \le k$, das jede Menge trifft ($S \cap F_i \ne \emptyset$)? \emph{Gegeben} ist die Reduktion $\problem{3-SAT} \redp \problem{Hitting Set}$: \begin{itemize} \item $U = \{x_1, \bar x_1, \dots, x_n, \bar x_n\}$ (alle Literale), \item für jede Variable $i$ die Menge $F_i = \{x_i, \bar x_i\}$, \item für jede Klausel $j$ die Menge $F_{n+j} = \{\text{Literale von } C_j\}$, \item $k = n$. \end{itemize} Geben Sie (1) die Parameter $|U|, r, k$ an und leiten Sie (2) unter der ETH die unteren Schranken bezüglich $|U|$, $r$ und $k$ her. \end{aufgabe} \begin{loesung} \textbf{Teil 1 -- Parameter.} Es gilt \[ |U| = 2n, \qquad r = n + m, \qquad k = n. \] \textbf{Teil 2 -- untere Schranken.} \emph{Bezüglich $|U|$: kein $2^{o(|U|)}$.} Angenommen, ein Algorithmus löste \problem{Hitting Set} in $2^{o(|U|)} \cdot \poly$. Wegen $|U| = 2n$ wäre das $2^{o(n)}$. Über die Reduktion ergäbe das einen $2^{o(n)}$-Algorithmus für 3-SAT -- Widerspruch \emph{direkt} zur ETH. (Kein Sparsification-Lemma nötig, da $|U|$ nur an $n$ hängt.) \medskip \emph{Bezüglich $r$: kein $2^{o(r)}$.} Hier ist $r = n + m$. Wegen $n \le 3m$ gilt $r \le 4m = O(m)$. Ein $2^{o(r)}$-Algorithmus wäre also ein $2^{o(m)}$-Algorithmus und ergäbe über die Reduktion einen $2^{o(m)}$-Algorithmus für 3-SAT. Nach dem \textbf{Sparsification-Lemma} ist das unter der ETH ausgeschlossen -- Widerspruch. (Hier ist das Lemma \emph{zwingend}, weil der Parameter an $m$ hängt.) \medskip \emph{Bezüglich $k$: kein $2^{o(k)}$.} Wegen $k = n$ ist das genau wie im ersten Fall: $2^{o(k)} = 2^{o(n)}$ ergäbe $2^{o(n)}$ für 3-SAT -- direkter Widerspruch zur ETH. \hfill$\square$ \end{loesung} \subsection{Bewertung und häufige Fehler} \begin{bewertung} Wiederhole den Schluss-Baustein \emph{in jedem} Teilpunkt vollständig -- der Korrektor will pro Parameter das ganze Argument sehen, nicht nur beim ersten. Entscheidend ist, ob du bei jedem Parameter richtig erkennst, \emph{ob} das Sparsification-Lemma gebraucht wird. \end{bewertung} \begin{stolper} Der Kern: \emph{$n$ oder $m$?} Hängt der Parameter an der Variablenzahl $n$, argumentierst du \emph{direkt} mit der ETH. Hängt er an der Klauselzahl $m$ (oder an $n+m$, was $O(m)$ ist), \emph{musst} du das Sparsification-Lemma nennen. Es einfach immer oder nie zu zitieren, kostet Punkte. \end{stolper} % ################################################################## \section{Approximationsalgorithmus anwenden} % ################################################################## \begin{ziel} Ein Themenwechsel: weg von den Härte-Beweisen, hin zur Approximation. Dieser Typ ist eine reine \emph{Rechenaufgabe} -- du lässt einen bekannten Algorithmus Schritt für Schritt auf eine konkrete Instanz laufen. Wenig Kreativität, viel Sorgfalt. \end{ziel} \subsection{Woran du diesen Typ erkennst} \glqq Wenden Sie den Algorithmus \dots auf die folgende Instanz an. Geben Sie alle Zwischenschritte an.\grqq{} Kandidaten: List Scheduling / LPT, $\Delta$TSP$_1$, Christofides, Knapsack-Greedy / Modified Greedy. \subsection{Das Rezept} \begin{rezept}{Was du flüssig können musst} \begin{itemize} \item \textbf{LPT / List Scheduling:} Jobs (bei LPT erst absteigend sortieren) der Reihe nach auf die Maschine mit \emph{kleinster} Last; Schedule als Gantt-Balken zeichnen; Güte nennen. \item \textbf{$\Delta$TSP$_1$:} minimaler Spannbaum $\to$ Kanten verdoppeln $\to$ Eulerkreis $\to$ abkürzen. \item \textbf{Christofides:} MST $\to$ ungerade Knoten $\to$ min.\ Matching darauf $\to$ Eulerkreis $\to$ abkürzen. \emph{Alle Zwischengraphen angeben.} \item \textbf{Knapsack-Greedy / MGA:} nach Profitdichte $p_i/w_i$ sortieren, einpacken was passt; MGA zusätzlich mit dem besten Einzel-Item vergleichen. \end{itemize} \end{rezept} \subsection{Musteraufgabe} \begin{aufgabe}{Knapsack Greedy und Modified Greedy (Klausur SS23, Aufgabe 1)} Kapazität $B = 16$. Gegenstände als $(p_i, w_i)$: \[ (1,4),\ (1,1),\ (1,3),\ (11,13),\ (3,3),\ (5,6),\ (1,5). \] Führen Sie Greedy (GA) und Modified Greedy (MGA) aus und vergleichen Sie mit dem Optimum. \end{aufgabe} \begin{loesung} \textbf{Schritt 1 -- Profitdichten $p_i/w_i$ berechnen und sortieren.} \begin{center}\small \begin{tabular}{lccccccc} \toprule $(p,w)$ & $(1,4)$ & $(1,1)$ & $(1,3)$ & $(11,13)$ & $(3,3)$ & $(5,6)$ & $(1,5)$\\ Dichte & $0{,}25$ & $1$ & $0{,}33$ & $0{,}85$ & $1$ & $0{,}83$ & $0{,}2$\\ \bottomrule \end{tabular} \end{center} Absteigend sortiert: $(1,1),\ (3,3),\ (11,13),\ (5,6),\ (1,3),\ (1,4),\ (1,5)$. \medskip \textbf{Schritt 2 -- Greedy einpacken} (Kapazität $B=16$, laufende Last): \begin{itemize} \item $(1,1)$: passt, Last $1$. \item $(3,3)$: passt, Last $4$. \item $(11,13)$: $4+13 = 17 > 16$ -- \emph{passt nicht}. \item $(5,6)$: $4+6 = 10$, passt, Last $10$. \item $(1,3)$: $10+3 = 13$, passt, Last $13$. \item $(1,4)$: $13+4 = 17 > 16$ -- passt nicht. $(1,5)$: $13+5 = 18$ -- passt nicht. \end{itemize} Greedy-Profit: $\mathrm{GA} = 1 + 3 + 5 + 1 = \mathbf{10}$. \medskip \textbf{Schritt 3 -- Modified Greedy.} Vergleiche mit dem besten Einzel-Item. Das ist $(11,13)$ mit Profit $11 > 10$. Also $\mathrm{MGA} = \mathbf{11}$. \medskip \textbf{Schritt 4 -- Optimum und Vergleich.} Optimal ist $\{(11,13), (3,3)\}$: Gewicht $13 + 3 = 16 \le B$, Profit $\OPT = \mathbf{14}$. Greedy verfehlt das schwere, profitable Item wegen seiner mittelmäßigen Dichte; MGA repariert das teilweise (garantierte Güte 2). \hfill$\square$ \end{loesung} \subsection{Zweite Variante: Christofides mit allen Zwischenschritten} \begin{aufgabe}{Christofides (Klausur SS23-N, Aufgabe 1)} Knoten $a,b,c,d$ mit $d(a,b)=1$, $d(b,c)=2$, $d(a,d)=2$, $d(a,c)=3$, $d(c,d)=3$, $d(b,d)=3$. Wenden Sie Christofides an. \end{aufgabe} \begin{loesung} \textbf{(1) MST} (Kruskal): $\{a,b\}\,(1)$, $\{b,c\}\,(2)$, $\{a,d\}\,(2)$; Gewicht $5$.\\ \textbf{(2) Ungerade Grade im MST:} $a$ hat Grad 2, $b$ Grad 2, $c$ Grad 1, $d$ Grad 1 $\Rightarrow X = \{c, d\}$.\\ \textbf{(3) Minimales perfektes Matching auf $X$:} nur die Kante $\{c,d\}$, Kosten $3$.\\ \textbf{(4) Multigraph $T + K$:} Kanten $a\text{-}b, b\text{-}c, a\text{-}d, c\text{-}d$ -- alle Grade jetzt gerade. \textbf{Eulerkreis} ab $a$: $[a,b,c,d,a]$, Kosten $1+2+3+2 = 8$.\\ \textbf{(5) Abkürzen:} kein Knoten kommt doppelt vor -- dieser Schritt ändert hier \emph{nichts} (trotzdem erwähnen!). Tour $[a,b,c,d,a]$, Länge $8$.\\ Hier ist sogar $8 = \OPT$. Güte-Garantie: $1{,}5$; benötigt Symmetrie \emph{und} Dreiecksungleichung. \hfill$\square$ \end{loesung} \subsection{Bewertung und häufige Fehler} \begin{bewertung} Punkte gibt es für die \emph{Zwischenschritte}, nicht nur das Endergebnis. Bei Christofides: alle Zwischengraphen angeben. Bei Scheduling: den Schedule als Gantt-Diagramm zeichnen. Und stets die \emph{Güte} des Verfahrens dazuschreiben. \end{bewertung} \begin{stolper} Der Klassiker: den \emph{Abkürzen}-Schritt weglassen, wenn er nichts ändert -- er gehört trotzdem hin. Und bei Greedy die Dichte-Sortierung nicht sauber hinschreiben, sodass die Einpack-Reihenfolge nicht nachvollziehbar ist. \end{stolper} % ################################################################## \section{Güte beweisen und Worst-Case-Instanz bauen} % ################################################################## \begin{ziel} Der anspruchsvollste Approximationstyp, fast immer \emph{zweiteilig}: (a) beweise, dass ein Algorithmus eine bestimmte Güte einhält, und (b) konstruiere eine Instanz, die diese Schranke (fast) erreicht -- die also zeigt, dass die Schranke \emph{scharf} ist. \end{ziel} \subsection{Das Rezept} \begin{rezept}{Die zwei Teile} \textbf{Teil (a) -- Güte beweisen.} Meist eines von drei Mustern: \begin{itemize} \item \emph{OPT von unten abschätzen} über eine Struktur (z.\,B.\ ein Matching: jede Optimallösung braucht pro Matching-Kante einen eigenen Knoten). \item \emph{Widerspruch + Zählen} (z.\,B.\ MAX-3-SAT: jede Klausel wird von einer der beiden Belegungen erfüllt). \item \emph{Scheduling-Schranken}: $\OPT \ge \frac1m \sum p_i$ und $\OPT \ge p_{\max}$. \end{itemize} \textbf{Teil (b) -- Worst-Case-Instanz.} \begin{enumerate} \item Zwinge den Algorithmus zu einer lokal guten, global schlechten Entscheidung (Greedy-Falle). \item Parametrisiere die Instanz und berechne $A(I)$ und $\OPT(I)$ \emph{explizit}. \item Zeige $A(I)/\OPT(I) \to$ Schranke -- mit \emph{Grenzwert}. \end{enumerate} \end{rezept} \subsection{Musteraufgabe} \begin{aufgabe}{MAX-3-SAT, Güte 2 (Hausaufgabe 13.1 = Klausur SS23)} Algorithmus $A$: werte die Formel unter $\beta_0$ (alle Variablen \false) und $\beta_1$ (alle \true) aus, gib die bessere zurück. (a) Zeige $v(A(\varphi)) \ge \tfrac12\, v(\OPT(\varphi))$. (b) Gib eine Formel an, bei der $A$ genau die Hälfte des Optimums erreicht. \end{aufgabe} \begin{loesung} \textbf{(a) Güte-Beweis (Widerspruch + Zählen).} Sei $\varphi$ eine Formel mit $m$ Klauseln. \emph{Schlüsselbeobachtung:} Jede Klausel enthält mindestens ein Literal -- ist es positiv, wird die Klausel von $\beta_1$ (alle \true) erfüllt; ist es negativ, von $\beta_0$ (alle \false). Jede Klausel wird also von \emph{mindestens einer} der beiden Belegungen erfüllt. Summiert man: \[ v(\beta_0) + v(\beta_1) \;\ge\; m. \] Also erfüllt die bessere der beiden mindestens $m/2$ Klauseln: $v(A(\varphi)) = \max\{v(\beta_0), v(\beta_1)\} \ge \tfrac{m}{2}$. Da eine optimale Belegung höchstens alle $m$ Klauseln erfüllt, ist $v(\OPT(\varphi)) \le m$. Zusammen: \[ v(A(\varphi)) \;\ge\; \tfrac{m}{2} \;\ge\; \tfrac{1}{2}\, v(\OPT(\varphi)). \] Somit hat $A$ Güte 2. \medskip \textbf{(b) Scharfe Instanz.} Wähle \[ \varphi = (x_1 \vee x_2 \vee x_3) \;\wedge\; (\neg x_0 \vee \neg x_2 \vee \neg x_3). \] Optimum: die Belegung $x_0 = \false$, $x_1 = x_2 = x_3 = \true$ erfüllt \emph{beide} Klauseln, also $\OPT = 2$. Der Algorithmus aber: $\beta_1$ (alle \true) erfüllt nur Klausel 1 (Klausel 2 hat lauter negative Literale, alle falsch); $\beta_0$ (alle \false) erfüllt nur Klausel 2. Also $v(A(\varphi)) = \max\{1,1\} = 1 = \tfrac12 \OPT$. Die Schranke wird exakt erreicht. \emph{Bauprinzip: eine Klausel nur positiv, eine nur negativ.} \hfill$\square$ \end{loesung} \subsection{Zweite Variante: Approximate Subset Sum (Klausur SS24-H)} \begin{aufgabe}{Greedy für Approximate Subset Sum} Maximiere $\sum_{j \in S} a_j \le T$. Algorithmus GA: sortiere absteigend, nimm der Reihe nach, \emph{stoppe} beim ersten Element, das nicht mehr passt. (a) Instanzen, die Güte 2 annähern; (b) zeige $\mathrm{GA}(I) \ge \OPT(I)/2$. \end{aufgabe} \begin{loesung} \textbf{(a) Worst-Case-Familie.} Für gerades $T$: $a_1 = \tfrac{T}{2}+1$, $a_2 = a_3 = \tfrac{T}{2}$. GA nimmt zuerst $a_1$ (das größte) und stoppt, denn $a_2$ passt nicht mehr ($\tfrac T2 + 1 + \tfrac T2 > T$). Also $\mathrm{GA} = \tfrac T2 + 1$. Optimal sind $a_2 + a_3 = T$, also $\OPT = T$. Rate: $\tfrac{T}{T/2+1} \to 2$ für $T \to \infty$. \medskip \textbf{(b) Güte-Beweis.} Sei $S$ die von GA gewählte Menge und $a_\ell$ das erste Element, das nicht mehr passte. Dann ist $\mathrm{GA}(I) + a_\ell > T \ge \OPT(I)$. Wegen der absteigenden Sortierung enthält $S$ 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\; \OPT(I), \] somit $\mathrm{GA}(I) \ge \OPT(I)/2$. \hfill$\square$ \end{loesung} \subsection{Bewertung und häufige Fehler} \begin{bewertung} Beide Teile geben Punkte -- der Güte-Beweis (a) und die Konstruktion (b). Bei (b) reicht keine einzelne Instanz: Gib eine \emph{parametrisierte Familie} an und zeige den \emph{Grenzwert} $A/\OPT \to$ Schranke. $A(I)$ und $\OPT(I)$ müssen \emph{explizit} berechnet sein. \end{bewertung} \begin{stolper} In (a) die beiden $\OPT$-Schranken vergessen (bei Scheduling: Durchschnittslast \emph{und} größter Job). In (b) nur eine feste Instanz angeben statt einer Familie mit Grenzwert -- dann ist die Schärfe nicht gezeigt. \end{stolper} % ################################################################## \section{Turingmaschine entwerfen} % ################################################################## \begin{ziel} Der letzte Typ steht für sich -- er braucht keine der anderen Techniken. Du konstruierst eine Turingmaschine für eine formale Sprache, begründest ihre Korrektheit und schätzt die Laufzeit ab. Manchmal kommt ein Vergleich mit dem RAM-Modell dazu. \end{ziel} \subsection{Das Rezept} \begin{rezept}{TM in drei Teilen} \textbf{1. Die Maschine in Worten.} Beschreibe das Verhalten als nummerierte Schritte (\glqq lies das erste Symbol, laufe nach rechts bis \dots\grqq). Keine formale Zustandstabelle nötig -- eine klare Wortbeschreibung genügt.\\[0.3em] \textbf{2. Korrektheit.} Warum akzeptiert die TM genau die Wörter der Sprache? Ein bis zwei Sätze über die Schleifeninvariante (\glqq nach jedem Durchlauf sind die äußeren Symbole abgearbeitet\grqq).\\[0.3em] \textbf{3. Laufzeit.} Kosten pro Durchlauf $\times$ Anzahl Durchläufe. Denk an die \emph{Randfälle} (leeres Wort, ein Symbol). \end{rezept} \subsection{Musteraufgabe} \begin{aufgabe}{Palindrom-Erkenner (Hausaufgabe 10.2)} Konstruiere eine Turingmaschine für die Sprache $L = \{\, w \mid w \text{ ist ein Palindrom} \,\}$ (liest sich vorwärts wie rückwärts). Gib Korrektheit und Laufzeit an. \end{aufgabe} \begin{loesung} \textbf{Die Maschine.} \begin{enumerate} \item Ist das Band leer, \emph{akzeptiere} (das leere Wort ist ein Palindrom). \item Steht nur noch ein Buchstabe, \emph{akzeptiere}. \item Lies den \emph{ersten} Buchstaben, merke ihn im Zustand, laufe zum \emph{letzten} Buchstaben. Sind die beiden \emph{verschieden}, \emph{verwirf}. Sind sie gleich, ersetze beide durch ein Leersymbol $x$ (erst den letzten, dann laufe zurück zum ersten und lösche ihn). \item Gehe zu Schritt 1. \end{enumerate} \textbf{Korrektheit.} Die Maschine vergleicht wiederholt das äußerste Paar von Buchstaben und streicht es weg. Sie akzeptiert genau dann, wenn bei jedem Vergleich beide Enden gleich waren -- also wenn $w$ symmetrisch ist. Sie endet in der Mitte mit einem oder keinem Buchstaben (beides Palindrome). Bei Ungleichheit verwirft sie sofort. \textbf{Laufzeit.} Ein Durchlauf (Schritte 1--3) kostet $O(n)$: der Kopf läuft einmal von links nach rechts und zurück. Pro Durchlauf werden zwei Buchstaben gestrichen, es gibt also höchstens $\lfloor n/2 \rfloor$ Durchläufe. Insgesamt $O(n) \cdot O(n) = O(n^2)$. \hfill$\square$ \end{loesung} \subsection{Zweite Variante: $L = \{0^{2^n}\}$ (Präsenz 10.3)} Etwas anspruchsvoller, mit RAM-Vergleich. \begin{loesung} \textbf{Die Maschine} (akzeptiert Nullfolgen, deren Länge eine Zweierpotenz ist): \begin{enumerate} \item Steht genau eine $0$ auf dem Band, \emph{akzeptiere}. \item Laufe über das Band und streiche \emph{jede zweite} $0$ (ersetze sie durch $x$). \item War die Anzahl der $0$en \emph{ungerade} (die letzte gelesene war eine $0$, die nicht gepaart wurde), \emph{verwirf}. \item 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: jedes Streichen jeder zweiten $0$ halbiert die Anzahl; eine ungerade Anzahl $> 1$ führt zum Verwerfen. \textbf{Laufzeit.} Jeder Durchlauf kostet $O(n)$, und die Anzahl halbiert sich jedes Mal -- also $O(\log n)$ Durchläufe. Insgesamt $O(n \log n)$. \textbf{RAM-Vergleich.} Ein RAM-Modell könnte die $0$en einfach zählen ($O(n)$) und dann in $O(\log n)$ prüfen, ob die Zahl eine Zweierpotenz ist -- schneller, weil es beliebige Speicherzellen direkt adressiert, während die TM den Kopf über das Band bewegen muss. \hfill$\square$ \end{loesung} \subsection{Bewertung und häufige Fehler} \begin{bewertung} Punkteschema (Hausaufgabe 10.2): \emph{TM-Beschreibung} 2\,P., \emph{Korrektheit} 1\,P., \emph{Laufzeit} 2\,P. Die Laufzeit ist also die Hälfte der Punkte -- rechne sie sauber vor (Kosten pro Durchlauf $\times$ Anzahl Durchläufe). \end{bewertung} \begin{stolper} Die Randfälle vergessen: leeres Wort, ein einzelnes Symbol. Und die Laufzeit nur behaupten statt herzuleiten -- gerade hier steckt die halbe Punktzahl. \end{stolper} \end{document}