diff --git a/algorithmik.pdf b/algorithmik.pdf index 3289de9..ed1aeee 100644 Binary files a/algorithmik.pdf and b/algorithmik.pdf differ diff --git a/chapter03.tex b/chapter03.tex index 5b42256..23b7edd 100644 --- a/chapter03.tex +++ b/chapter03.tex @@ -557,8 +557,7 @@ \section{Flussprobleme} \node (li1) at (3, -0.3) {$\in \beta(v_i)$}; \end{tipi} \\ Analog zu Fall 2. - - \item Fall 4: + \item Fall 4: \begin{tipi}[baseline] \node (v0) at (0, 0) {}; \node (vi) at (2, 0) {$v_i$}; @@ -575,3 +574,138 @@ \section{Flussprobleme} Analog zu Fall 1. \end{itemize} \end{beweis} +\begin{lemma} +Hält der Algorithmus von Fud/Fulkerson an, dann besitzt die zu diesem Zeitpunkt berechnete Flußfunktion f maximalen totalen Fluß. +\end{lemma} +\begin{beweis} +Wenn der Algorithmus anhält, dann tut er dies in Schritt 3 und t wurde nicht erreicht. Sei S die Menge der Knoten, die beim letztes Markieren markiert wurden. Auf jeden Fall ist s $\in$ S und $t \notin S$, $\overline{S} := (V,S)$. + +Sei $x \rightarrow (e)y \in E_{S\overline{S}}$, dann ist f(e) = c(e) weil sonst entlang dieser kante die Markierung festgesetzt werden könnte. x<-(p)y $\in E_{S\overline{S}}$, dann muss $f(e)=0$. + +Mit Lemma 3.1 folgt F=$\sum_{e \in E_{S\overline{S}}} f(e) - \sum_{e \in E_{\overline{S}S}} f(e) = +\sum_{e \in E_{S\overline{S}}} c(e) = c(S)$ + +Mit Lemma 3.3 folgt F maximal. +\end{beweis} + +\begin{lemma} +Ist $c:= E \rightarrow \mathbb{N} $, so hält der Algorithmus immer an. +\end{lemma} + +\begin{beweis} +ist $c:= E \rightarrow \mathbb{N} $ so wird in jedem Durchlauf der totale Fluß um eine natürliche Zahl $\Delta$ erhöht. Andererseits gilt $F \leq c(S)$ für eine beliebige Menge $S \subseteq V$, $s \in S$, $t \notin S$ +\end{beweis} + +\begin{beispiel} +Frage: c: E $\rightarrow$ Reele Zahlen : V + +Beispiel: Kosten können sehr hoch werden im Fall $c:E \rightarrow \mathbb{N} $ +% a +% 10^6/0 10^6/0 +%s 1/0 t F = 2*10^6 +% 10^6/0 10^6/0 +% b + +1. Markierung: $ s \rightarrow a \rightarrow b \rightarrow t, \Delta = 1$ + +2. Markierung: $ s \rightarrow b \rightarrow a \rightarrow t, \Delta = 1$ + +insgesamt $2*10^6$ Markierungssequenzen, d.h. Abhängigkeit von der kapazität. +\end{beispiel} + +\begin{definition} +Satz von Edmond und karp: + +Verwendet BFS beim Markieren und wählt jeweils den kürzesten Anreichungspfad, dann terminiert der Algorithmus in $O(|V|^3*E)$ Schritten. (Vorausgesetzt die vorkommenden reellen Zalen können jeweils in einem Schritt bearbeitet werden. + +\end{definition} + +\begin{beispiel} +x sei große Zahl, $x \in \mathbb{N}$, $\phi:= ( \sqrt{5}-1)/2$ (Lösung von $x^2+x-1=0$). + +Insbesondere gilt: $\phi^2+ \phi-1=0$, also $\phi^(k+1)+ \phi^k = \phi(k-1)$, $k \ge 1$ +% a +% x/phi-> +% x-> 1/phi<- +%s x/1-> b t +% 1/1-phi-> x/1-> +% c +% x-> phi/phi<- x-> +% +% +% d + +$F= 2x +1$ + +$1+2* \sum_{k=1}^{\infty} \phi^k = 1 + 2*(1/(1-\phi)) = 4 + \sqrt{5} <7$ + +Typ0: Weg $s \rightarrow b \rightarrow c \rightarrow t : \Delta =1$ + +Typ1: Weg $s \rightarrow d \rightarrow c \rightarrow b \rightarrow a \rightarrow t 1: \Delta = \phi, 2:\Delta = 1-\phi = \phi^2$ + +Typ2: Weg $s->b->c<-d->t : \Delta = \phi$ + +Typ3: Weg $s->a<-b->c->t : \Delta = 1:\phi^2$ + +Reihung 0,1,2,1,3 + +Berechnet:$ \Delta =1, \Delta = \phi, \Delta = \phi, \Delta = \phi^2, \Delta = \phi^2$ +\end{beispiel} +\begin{definition} +Sei e eine Kante mit Flußwert $f(e)$. e heißt nützlich von u nach v, wenn gilt: +\begin{enumerate} + \item $u \rightarrow^e$ und $f(e) < c(e)$ + \item $u \leftarrow^e v$ und $f(e) > 0$ +\end{enumerate} +Eine Schichtung für ein Netzwerk (mit $G=(V,E)$, $c:E \rightarrow \mathbb{R}$, $s,t \in V$) und eine Flußfunktion $f$ ist definiert wie folgt: +\begin{enumerate} + \item $V_{0}:= {s}$, $i:=0$ + \item T:={$v:v \notin V_{j}$ für $j \le i$ und es existiert eine nützliche Kante von einem Knoten aus $V_{i}$ zu v} + \item ist $T = \emptyset$ dann ist der jetzige totale Fluß (d.h. der von $f$) maximal, halte an. + \item Ist $t \in T$, setzte $l_{i} = i+1$, $V_{l} = {t}$, halte an + \item $V_{i+1} := T$, $i:=i+1$ und gehe zu 2) +\end{enumerate} +\end{definition} +\begin{beispiel} + \begin{center} + \begin{tipi} + \node (s) at (0, 0) [draw, shape=circle] {$s$}; + \node (b) at (1.25, 1.25) [draw, shape=circle] {$b$}; + \node (c) at (3, 1.25) [draw, shape=circle] {$c$}; + \node (d) at (1.25, -1.25) [draw, shape=circle] {$d$}; + \node (e) at (3, -1.25) [draw, shape=circle] {$e$}; + \node (t) at (4.25, 0) [draw, shape=circle] {$t$}; + + \draw[->] (s) -- (b); + \draw[->] (s) -- (d); + \draw[->] (b) -- (d); + \draw[->] (b) -- (c); + \draw[->] (c) -- (d); + \draw[->] (d) -- (e); + \draw[->] (c) -- (t); + \draw[->] (e) -- (t); + \draw[->] (e) -- (c); + + \node (l1) at (0.75, 0.4) {$e_1$}; + \node (l2) at (0.75, -0.4) {$e_2$}; + \node (l3) at (2.125, 1.05) {$e_4$}; + \node (l6) at (2.125, -1.05) {$e_6$}; + \node (l8) at (3.5, -0.4) {$e_8$}; + \node (l4) at (2.75, -0.4) {$e_9$}; + \node (l5) at (1.0, 0.0) {$e_3$}; + \node (l7) at (3.5, 0.4) {$e_7$}; + \node (l9) at (2.125, 0.4) {$e_5$}; + + \node(f1) at (0.25, 0.75) {$\nicefrac{5}{1}$}; + \node(f2) at (0.25, -0.75) {$\nicefrac{4}{1}$}; + \node(f6) at (2.125, -1.55) {$\nicefrac{3}{1}$}; + \node(f4) at (2.125, 1.55) {$\nicefrac{3}{1}$}; + \node(f8) at (3.9, -0.9) {$\nicefrac{5}{1}$}; + \node(f7) at (3.8125, 0.8125) {$\nicefrac{3}{1}$}; + \node(f3) at (1.55, 0.4) {$\nicefrac{1}{0}$}; + \node(f9) at (3.30, 0.0) {$\nicefrac{1}{0}$}; + \node(f5) at (2.1, -0.53) {$\nicefrac{2}{0}$}; + \end{tipi} + \end{center} + Fuer dieses Beispiel sollten die Studenten die Schichtenbildung durchfuehren. +\end{beispiel} \ No newline at end of file