diff --git a/zusammenfassung.pdf b/zusammenfassung.pdf index fa931ab..ae7b7a1 100644 Binary files a/zusammenfassung.pdf and b/zusammenfassung.pdf differ diff --git a/zusammenfassung.tex b/zusammenfassung.tex index f568559..2a6335c 100644 --- a/zusammenfassung.tex +++ b/zusammenfassung.tex @@ -298,6 +298,11 @@ Sei $\Pi$ ein Optimierungsproblem und $A$ ein Approximationsalgorithmus für $\P Da die Werte zulässiger Lösungen immer ganzzahlig sind, folgt $\abs{\opt(I) - A(I, \varepsilon^*)} = 0$, damit also die Optimalität von $A(I, \varepsilon^*)$. \end{proof} +\section{Pseudo-polynomielle Algorithmen} +Sei $\Pi$ ein kombinatorisches Optimierungsproblem, sodass in allen Instanzen $I$ alle vorkommenden Zahlen natürliche Zahlen sind. Sei $\mathrm{maxnr}(I)$ die größte in $I$ vorkommende Zahl. Ein Algorithmus wird als pseudo-polynomiell bezeichnet, falls es ein Polynom $\mathrm{poly}(\cdot, \cdot)$ gibt, sodass für alle Instanzen $I$ seine Laufzeit $\mathrm{poly}(\abs{I}, \mathrm{maxnr}(I))$ ist. + +Kann also das Problem so eingeschränkt werden, dass für alle Instanzen $I$ die größte vorkommende Zahl durch ein Polynom begrenz wird, also $\mathrm{maxnr}(I) \le q(\abs{I})$ mit Polynom $q$ gilt, so ist auch die Laufzeit des Algorithmus polynomiell. + \section{\algo{GreedyIS} für \problem{IS}} \begin{algorithmic}[] \State $U = \emptyset, t = 0, V^{(0)} = V$ @@ -465,6 +470,82 @@ Der Algorithmus von Christofides (\algo{CH}) geht wie folgt vor: TODO \end{zeuge} -\section{\algo{DynRucksack} für \problem{Rucksack}} +\section{Approximationsschema für \problem{Rucksack}} +\subsection{\algo{DynRucksack} zur exakten Lösung von \problem{Rucksack}} +Für eine Instanz $I = \langle W, \mathrm{vol}, p, B\rangle$ kann direkt eine obere und eine untere Grenze für den maximalen Wert der Füllung angegeben werden: +\begin{equation*} + P_{\max} \le \opt(I) \le n \cdot P_{\max} +\end{equation*} +Sei $F_j(\alpha)$, wobei $j \in \{0, 1, \dots, n\} und $$\alpha \in \mathbb{Z}$ gilt, das kleinste benötigte Rucksackvolumen, mit dem man einen Wert von mindestes $\alpha$ erreichen kann, wenn man die ersten $j$ Waren einpacken darf. +Die formale Definition +\begin{equation*} + F_j(\alpha) = \min\{\mathrm{vol}(R)\mid R \subseteq \{1, \dots, j\}, p(R) \ge \alpha\} +\end{equation*} +lässt sich durch die folgende Rekursion ausdrücken: +\begin{equation*} + f_j(\alpha) = \begin{cases*} + 0 & falls $\alpha \le 0$\\ + \infty & falls $\alpha \ge 1, j = 0$\\ + \min\{F_{j-1}(\alpha - p_j) + \mathrm{vol}(j), F_{j-1}(\alpha)\} & sonst (sog. Bellmannsche Optimalitätsgl.) + \end{cases*} +\end{equation*} + +Der Algorithmus \algo{DynRucksack} setzt diese durch dynamische Programmierung um: +\begin{algorithmic}[] + \State $\alpha = 0$ + \Repeat + \State $\alpha = \alpha + 1$ + \For{$j = 1$ to $n$} + \State $F_j(\alpha) = \min\{F_{j-1}(\alpha - p_j) + \mathrm{vol}(j), F_{j-1}(\alpha)\}$ + \EndFor + \Until{$B < F_n(\alpha)$} + \State \Return $\alpha - 1$ +\end{algorithmic} + +\begin{satz} + \algo{DynRucksack} berechnet zur Eingabe $I$ den Wert $\opt(I)$ in Zeit $\mathcal{O}(n \cdot \opt(I)) = \mathcal{O}(n^2 \cdot P_{\max})$. +\end{satz} + +\subsection{\algo{AR\textsubscript{$k$}} zur Approximation mit konstantem relativen Fehler} +Der Algorithmus \algo{AR\textsubscript{$k$}} rechnet mit um den Faktor $k$ reduzierten, gerundeten Preisen: +\begin{algorithmic}[] + \State $p_\mathrm{red}(w) = \left\lfloor\frac{p(w)}{k}\right\rfloor$ + \State $I_\mathrm{red} = \langle W, \mathrm{vol}, p_\mathrm{red}, B \rangle$ + \State $R_k = \Call{\algo{DynRucksack}}{I_\mathrm{red}}$ + \State \Return $R_k$ +\end{algorithmic} + +\begin{satz} + \algo{AR\textsubscript{$k$}} macht bei Eingabe $I$ einen relativen Fehler von $\varepsilon_{\algo{AR\textsubscript{$k$}}} \le \frac{k \cdot n}{P_{\max}}$ und hat eine Laufzeit von $\mathcal{O}(n^2 \cdot \frac{P_{\max}}{k})$. +\end{satz} +\begin{proof} + Sei $R^*$ die Indexmenge einer optimalen Rucksackfüllung für $I$ und $R_k$ die berechnete Indexmenge der Lösung des um $k$ reduzierten Problems $I_\mathrm{red}$. + + Da $R_k$ eine optimale Lösung für $I_\mathrm{red}$ ist, gilt $\opt(I_\mathrm{red}) \geq \sum_{j\in R^*}\left\lfloor\frac{p_j}{k}\right\rfloor$. Weiterhin ist $R_k$ eine zulässige Lösung für $I$. + Es gilt dann: + \begin{align*} + \algo{AR}_k(I) &= p(R_k) \ge k \cdot \sum_{j\in R_k} \left\lfloor \frac{p_j}{k}\right\rfloor = k \cdot \opt(I_\mathrm{red})\\ + &\ge k\cdot \sum_{j\in R^*} \left\lfloor \frac{p_j}{k}\right\rfloor \ge k \cdot \sum_{j\in R^*}\left(\frac{p_j}{k} - 1\right) = \sum_{j\in R^*}\left(p_j - k\right) = p(R^*) - k \cdot \abs{R^*}\\ + &= \opt(I) - k \cdot \abs{R^*} \ge \opt(I) - k \cdot n + \end{align*} + + Damit folgt für den relativen Fehler die zu zeigende Aussage + \begin{equation*} + \varepsilon_{\algo{AR}_k} = \frac{\abs{\algo{AR}_k(I) - \opt(I)}}{\opt(I)} \le \frac{k\cdot n}{\opt(I)} \le \frac{k\cdot n}{P_{\max}} + \end{equation*} +\end{proof} + +\subsection{\algo{FPASRucksack} zur Umwandlung in ein streng polynomielles Approximationsschema} +Um ein FPAS zu erreichen, muss gezeigt werden, dass jedes $\varepsilon \in ]0, 1[$ als relativer Fehler erreichbar ist. +Der Algorithmus \algo{FPASRucksack} verwendet dazu \algo{AR\textsubscript{$k$}} und konstruiert ein passendes $k$: +\begin{algorithmic}[] + \State bestimme $n$ und $P_{\max}$ aus der Eingabe $I$ + \State $k = \varepsilon \cdot \frac{P_{\max}}{n}$ + \State \Return \Call{\algo{AR\textsubscript{$k$}}}{$I$} +\end{algorithmic} + +\begin{satz} + \algo{FPASRucksack} ist ein FPAS für \problem{Rucksack} mit einer Laufzeit von $\mathcal{O}\left(n \cdot \log \frac{1}{\varepsilon} + \frac{1}{\varepsilon^4}\right)$. +\end{satz} \end{document}