% !TeX spellcheck = de_DE
\documentclass[11pt,a4paper,toc]{scrartcl}
\usepackage[a4paper,left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm]{geometry}
\usepackage[ngerman]{babel}
\usepackage{amssymb}
\usepackage{scrextend}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{enumitem}
\usepackage{mathtools}
\usepackage[load=named]{siunitx}
\usepackage{csquotes}
\usepackage[hidelinks]{hyperref}
%\usepackage{listings}
\usepackage{algorithmicx}
\usepackage{algpseudocode}
%\usepackage{pgfplots}
\usepackage{tikz}
%\usetikzlibrary{positioning}
%\usetikzlibrary{arrows.meta}
%\usetikzlibrary{quotes}
%\usetikzlibrary{angles}
%\usetikzlibrary{babel}
%\usetikzlibrary{fit}
%\usepackage{datetime}
%\usepackage{xcolor}

\DeclareMathOperator{\opt}{OPT}
\DeclarePairedDelimiter\abs{\lvert}{\rvert}

\newtheorem*{satz}{Satz}
\newtheorem*{zeuge}{Zeuge}

\newcommand*{\algo}[1]{\textsc{#1}}
\newcommand*{\problem}[1]{\textsc{#1}}

\setlist[enumerate,1]{label={\arabic*.}}
\setlist[enumerate,2]{label={\alph*)}}

\title{Approximationsalgorithmen}
\author{Marco Ammon}
\date{\today}

\makeatletter
\g@addto@macro\bfseries{\boldmath}
\makeatother

\begin{document}
\maketitle

\tableofcontents
\clearpage
\section{Kombinatorisches Optimierungsproblem $\phi$}
\subsection{Definition}
\begin{align*}
	\mathcal{D} &= \text{Menge der Eingaben $I$}\\
	\mathcal{S}(I \in \mathcal{D}) &= \text{Menge der zur Eingabe $I$ zulässigen Lösungen}\\
	f: \mathcal{S}(I) \mapsto \mathbb{N}^{\neq 0} &= \text{Bewertungs-/Kosten-/Maßfunction}\\
	\mathrm{ziel} \in \{\min, \max\}
\end{align*}
\begin{itemize}
	\item Beschränkung auf natürliche Zahlen, weil Vergleich reeller Zahlen bislang nicht beweisbar schnell funktioniert.
	\item Ausschluss der 0 für spätere Definitionen sinnvoll (lässt sich durch Modifikation von $f$ in der Regel trivial erreichen)
\end{itemize}

Gesucht ist zu $I \in \mathcal{D}$ eine zulässige Lösung $\sigma_\mathrm{opt} \in \mathcal{S}(I)$, sodass
\begin{equation*}
	\opt(I) = f(\sigma_\mathrm{opt}) = \mathrm{ziel}\{f(\sigma) \mid \sigma \in \mathcal{S}(I) \}
\end{equation*}

\subsection{Beispiele}
TODO: TSP, Rucksackproblem, etc.

\section{$t(n)$-Zeit-Approximationsalgorithmus $A$}
Für Eingabe $I \in \mathcal{D}$ berechnet $A$ in Zeit $t(\abs{I})$ eine Ausgabe $\sigma_I^A \in \mathcal{S}(I)$. Es gilt die Schreibweise $A(I) = f(\sigma_I^A)$.

\section{Konstante Gütegarantie}
\subsection{Definition}
\begin{itemize}
	\item $A$ hat bei Eingabe $I$ absolute Güte von
	\begin{equation*}
	\kappa_A(I) = \abs{A(I) - \opt(I)}
	\end{equation*}
	\item Die absolute Worst-Case-Güte von $A$ abhängig von der Eingabelänge $n = \abs{I}$ ist die Funktion
	\begin{equation*}
		\kappa_A^{\mathrm{wc}}(n) = \max\{\kappa_A(I) \mid I \in \mathcal{D}, \abs{I} <= n\}
	\end{equation*}
	\item $A$ garantiert eine absolute Güte von $\kappa_A: \mathbb{N} \mapsto \mathbb{N}$, falls für alle $n \in \mathbb{N}$ gilt:
	\begin{equation*}
		\kappa_A^{\mathrm{wc}} \le \kappa_A(n)
	\end{equation*}
	\item $A$ hat eine absolute Abweichung von $\kappa'_A: \mathbb{N} \mapsto \mathbb{N}$, falls für unendlich viele $n$ gilt
	\begin{equation*}
		\kappa'_A(n) \le \kappa_A^{wc}(n)
	\end{equation*}
	Eine unendlich große Menge $\mathcal{D}' \subseteq \mathcal{D}$ heißt $\kappa'_A(n)$-Zeugenmenge gegen $A$, wenn für alle $I \in \mathcal{D}'$ gilt:
	\begin{equation*}
		\kappa_A(I) \ge \kappa'_A(\abs{I})
	\end{equation*}
\end{itemize}

\subsection{Unmöglichkeitsergebnis für das Rucksackproblem}
\begin{satz}
	Falls $P \neq NP$, dann gibt es keine Konstante $n\in \mathbb{N}$, sodass es einen polynomiellen Approximationsalgorithmus $A$ für das Rucksackproblem gibt mit
	\begin{equation*}
		\abs{A(I) - \opt(I)}  \le k
	\end{equation*}
\end{satz}
\begin{proof}[Widerspruchsbeweis]
	Unter der Annahme, dass $A$ und $k$ existieren, kann \problem{Rucksack} in Polynomzeit exakt gelöst werden, was $P = NP$ zur Folge hat:
	
	Konstruiere aus einer Instanz $I = \langle W, \mathrm{vol}, p, B \rangle$ eine neue Probleminstanz $I' = \langle W, \mathrm{vol}, p', B\rangle$ mit $p'(w) = (k + 1) \cdot p(w)$.
	Eine zulässige Lösung $\sigma$ für $I$ ist auch eine zulässige Lösung für $I'$. Gleiches gilt aufgrund der Monotonie der Multiplikation auch für optimale Lösungen.
	Durch die Multiplikation aller Preise mit $k + 1$ beträgt die \enquote{Lücke} zwischen den optimalen und der ersten nicht-optimalen Lösung für $I'$ mindestens $k + 1$.
	
	Da $A$ eine absolute Güte von $k$ garantiert und in Polynomzeit terminiert, kann es nur eine optimale Lösung für $I'$, welche auf optimal für $I$ ist, zurückgeben. Damit ist das $NP$-vollständige \problem{Rucksack} in Polynomzeit exakt lösbar.
\end{proof}

Die hierbei verwendete Vorgehensweise einer Selbstreduktion sowie das \enquote{Aufblasen} des Problems (\enquote{Scaling}, \enquote{Gap Amplification}) lässt sich auch auf viele andere Probleme wie etwa \problem{SetCover} anwenden. Folglich kann eine konstante Gütegarantie nur für vergleichsweise wenig Probleme erreicht werden.


\section{Graphfärbbarkeit}
\subsection{Knotenfärbungsproblem}
\subsubsection{Definition}
\begin{align*}
	\mathcal{D} &= \{\langle G\rangle \mid G = (V, E)\,\text{ein ungerichteter Graph mit mindestens einer Kante}\}\\
	\mathcal{S}(\langle G \rangle) &= \{ c_\mathrm{V} \mid c_\mathrm{V}\, \text{ist eine Knotenfärbung von}\, G\}\\
	f(c_\mathrm{V}) &= \abs{c_\mathrm{V}(V)}\\
	\mathrm{ziel} &= \min
\end{align*}

Die Größe der kleinsten möglichen Knotenfärbung ist die chromatische Zahl $\chi(G)$.
\subsubsection{Algorithmen}
\paragraph{\algo{GreedyCol}}
\begin{algorithmic}[]
	\ForAll{$u_i \in V$}
		\State $c_\mathrm{V}(u_i) = \infty$
	\EndFor
	\ForAll{$i \in [1,\dots, \abs{V}]$}
		\State $c_\mathrm{V}(u_i) = \min\{\mathbb{N}\setminus\{c_\mathrm{V}(\Gamma(u_i))\}\}$
	\EndFor\\
	\Return $c_\mathrm{V}$
\end{algorithmic}

\begin{satz}
	\algo{GreedyCol} berechnet in Zeit $\mathcal{O}(\abs{V} + \abs{E})$ eine Knotenfärbung aus höchstens $\Delta(G) + 1$ Farben.
\end{satz}
\begin{proof}
	Da ein Knoten $u$ maximal $\Delta(G)$ viele Nachbarn haben kann, muss in $[1,\dots,\Delta(G)+1]$ noch mindestens eine Farbe frei sein.
\end{proof}

\begin{satz}
	\algo{GreedyCol} garantiert eine absolute Güte von
	\begin{equation*}
		\kappa_\algo{GreedyCol}(G) = \algo{GreedyCol}(G) - \opt(G) \le \Delta(G) + 1 - 2 = \Delta(G) - 1
	\end{equation*}
	, weil die untere Schranke $\opt(G)\ge 2$ für Graphen mit $\abs{V} \ge 2$ gilt.
\end{satz}

\begin{zeuge}
	$\Delta(G) - 1$-Zeuge gegen \algo{GreedyCol}: TODO (Abbildung 2.1)
\end{zeuge}

\subsection{Kantenfärbungsproblem}
\subsubsection{Definition}
\begin{align*}
\mathcal{D} &= \{\langle G\rangle \mid G = (V, E)\,\text{ein ungerichteter Graph mit mindestens einer Kante}\}\\
\mathcal{S}(\langle G \rangle) &= \{ c_\mathrm{E} \mid c_\mathrm{E}\, \text{ist eine Kantenfärbung von}\, G\}\\
f(c_\mathrm{E}) &= \abs{c_\mathrm{E}(E)}\\
\mathrm{ziel} &= \min
\end{align*}
Die Größe der kleinsten möglichen Kantenfärbung ist der chromatische Index $\chi'(G)$.
\subsubsection{Algorithmen}
TODO: Übung
\end{document}
