Added Graph Algorithms handout
This commit is contained in:
219
Advanced/Graph Algorithms/parts/02 residual.tex
Executable file
219
Advanced/Graph Algorithms/parts/02 residual.tex
Executable file
@ -0,0 +1,219 @@
|
||||
\documentclass[../main.tex]{subfiles}
|
||||
|
||||
|
||||
\begin{document}
|
||||
|
||||
\section{Residual Graphs}
|
||||
As our network gets bigger, finding a maximum flow by hand becomes much more difficult. It will be convenient to have an algorithm that finds a maximal flow in any network.
|
||||
|
||||
\vspace{1ex}
|
||||
|
||||
The first thing we'll need to construct such an algorithm is a \textit{residual graph}.
|
||||
|
||||
\vspace{2ex}
|
||||
\hrule
|
||||
|
||||
\begin{center}
|
||||
\begin{minipage}[t]{0.48\textwidth}
|
||||
We'll start with the following network and flow:
|
||||
\begin{center}
|
||||
\begin{tikzpicture}[node distance = 20mm]
|
||||
% Nodes
|
||||
\begin{scope}[layer = nodes]
|
||||
\node[main] (S) {$S$};
|
||||
\node[main] (A) [above right of = S] {$A$};
|
||||
\node[main] (B) [below right of = S] {$B$};
|
||||
\node[main] (T) [above right of = B] {$T$};
|
||||
\end{scope}
|
||||
|
||||
% Edges
|
||||
\draw[->]
|
||||
(S) edge node[label] {$1$} (A)
|
||||
(A) edge node[label] {$3$} (T)
|
||||
(B) edge node[label] {$2$} (A)
|
||||
(S) edge node[label] {$2$} (B)
|
||||
(B) edge node[label] {$1$} (T)
|
||||
;
|
||||
|
||||
% Flow
|
||||
\draw[path]
|
||||
(S) -- node[above left, flow] {$(1)$} (A)
|
||||
-- node[above right, flow] {$(1)$} (T)
|
||||
;
|
||||
|
||||
\end{tikzpicture}
|
||||
\end{center}
|
||||
\end{minipage}
|
||||
\hfill
|
||||
\begin{minipage}[t]{0.48\textwidth}
|
||||
First, we'll copy all nodes and \say{unused} edges:
|
||||
\begin{center}
|
||||
\begin{tikzpicture}[node distance = 20mm]
|
||||
% Nodes
|
||||
\begin{scope}[layer = nodes]
|
||||
\node[main] (S) {$S$};
|
||||
\node[main] (A) [above right of = S] {$A$};
|
||||
\node[main] (B) [below right of = S] {$B$};
|
||||
\node[main] (T) [above right of = B] {$T$};
|
||||
\end{scope}
|
||||
|
||||
% Edges
|
||||
\draw[->]
|
||||
(B) edge node[label] {$2$} (A)
|
||||
(S) edge node[label] {$2$} (B)
|
||||
(B) edge node[label] {$1$} (T)
|
||||
;
|
||||
\end{tikzpicture}
|
||||
\end{center}
|
||||
\end{minipage}
|
||||
\end{center}
|
||||
|
||||
\hrule
|
||||
|
||||
\begin{center}
|
||||
\begin{minipage}[t]{0.48\textwidth}
|
||||
Then, we'll add the unused capacity of \say{used} edges: (Note that $3 - 1 = 2$)
|
||||
\begin{center}
|
||||
\begin{tikzpicture}[node distance = 20mm]
|
||||
% Nodes
|
||||
\begin{scope}[layer = nodes]
|
||||
\node[main] (S) {$S$};
|
||||
\node[main] (A) [above right of = S] {$A$};
|
||||
\node[main] (B) [below right of = S] {$B$};
|
||||
\node[main] (T) [above right of = B] {$T$};
|
||||
\end{scope}
|
||||
|
||||
% Edges
|
||||
\draw[->]
|
||||
(A) edge node[label] {$2$} (T)
|
||||
(B) edge node[label] {$2$} (A)
|
||||
(S) edge node[label] {$2$} (B)
|
||||
(B) edge node[label] {$1$} (T)
|
||||
;
|
||||
\end{tikzpicture}
|
||||
\end{center}
|
||||
\end{minipage}
|
||||
\hfill
|
||||
\begin{minipage}[t]{0.48\textwidth}
|
||||
Finally, we'll add \say{used} capacity as edges in the opposite direction:
|
||||
\begin{center}
|
||||
\begin{tikzpicture}[node distance = 20mm]
|
||||
% Nodes
|
||||
\begin{scope}[layer = nodes]
|
||||
\node[main] (S) {$S$};
|
||||
\node[main] (A) [above right of = S] {$A$};
|
||||
\node[main] (B) [below right of = S] {$B$};
|
||||
\node[main] (T) [above right of = B] {$T$};
|
||||
\end{scope}
|
||||
|
||||
% Edges
|
||||
\draw[->]
|
||||
(A) edge node[label] {$1$} (S)
|
||||
(T) edge [bend right] node[label] {$1$} (A)
|
||||
(A) edge [bend right] node[label] {$2$} (T)
|
||||
(B) edge node[label] {$2$} (A)
|
||||
(S) edge node[label] {$2$} (B)
|
||||
(B) edge node[label] {$1$} (T)
|
||||
;
|
||||
\end{tikzpicture}
|
||||
\end{center}
|
||||
This graph is the residual of the original flow.
|
||||
\end{minipage}
|
||||
\end{center}
|
||||
|
||||
\hrule
|
||||
\vspace{3ex}
|
||||
|
||||
You can think of the residual graph as a \say{list of possible changes} to the original flow. \\
|
||||
There are two ways we can change a flow:
|
||||
\begin{itemize}
|
||||
\item We can add flow along a path
|
||||
\item We can remove flow along another path
|
||||
\end{itemize}
|
||||
|
||||
\vspace{1ex}
|
||||
|
||||
A residual graph captures both of these actions, showing us where we can add flow (forward edges) and where we can remove it (reverse edges). Note that \say{removing} flow along an edge is equivalent to adding flow in the opposite direction.
|
||||
|
||||
|
||||
\vfill
|
||||
\pagebreak
|
||||
|
||||
\problem{}<FindResidual>
|
||||
Construct the residual of this flow.
|
||||
|
||||
\begin{center}
|
||||
\begin{tikzpicture}[node distance = 25mm]
|
||||
% Nodes
|
||||
\begin{scope}[layer = nodes]
|
||||
\node[main] (S) {$S$};
|
||||
\node[main] (A) [above right of = S] {$A$};
|
||||
\node[main] (B) [below right of = S] {$B$};
|
||||
\node[main] (T) [above right of = B] {$T$};
|
||||
\end{scope}
|
||||
|
||||
% Edges
|
||||
\draw[->]
|
||||
(S) edge node[label] {$2$} (A)
|
||||
(A) edge node[label] {$1$} (T)
|
||||
(A) edge node[label] {$3$} (B)
|
||||
(S) edge node[label] {$1$} (B)
|
||||
(B) edge node[label] {$2$} (T)
|
||||
;
|
||||
|
||||
% Flow
|
||||
\draw[path]
|
||||
(S)
|
||||
-- node[above left, flow] {$(2)$} (A)
|
||||
-- node[left, flow] {$(2)$} (B)
|
||||
-- node[below right, flow] {$(2)$} (T)
|
||||
;
|
||||
\end{tikzpicture}
|
||||
\end{center}
|
||||
|
||||
\begin{solution}
|
||||
\begin{center}
|
||||
\begin{tikzpicture}[node distance = 25mm]
|
||||
% Nodes
|
||||
\begin{scope}[layer = nodes]
|
||||
\node[main] (S) {$S$};
|
||||
\node[main] (A) [above right of = S] {$A$};
|
||||
\node[main] (B) [below right of = S] {$B$};
|
||||
\node[main] (T) [above right of = B] {$T$};
|
||||
\end{scope}
|
||||
|
||||
% Edges
|
||||
\draw[->]
|
||||
(A) edge node[label] {$2$} (S)
|
||||
(A) edge node[label] {$1$} (T)
|
||||
(A) edge[out=295,in=65] node[label] {$1$} (B)
|
||||
(B) edge[out=115,in=245] node[label] {$2$} (A)
|
||||
(S) edge node[label] {$1$} (B)
|
||||
(T) edge node[label] {$2$} (B)
|
||||
;
|
||||
\end{tikzpicture}
|
||||
\end{center}
|
||||
\end{solution}
|
||||
|
||||
\vfill
|
||||
\problem{}
|
||||
Is the flow in \ref{FindResidual} maximal? \\
|
||||
If it isn't, find a maximal flow. \\
|
||||
\hint{Look at the residual graph. Can we add flow along another path?}
|
||||
|
||||
\vfill
|
||||
\pagebreak
|
||||
|
||||
\problem{}
|
||||
Show that...
|
||||
\begin{enumerate}
|
||||
\item A maximal flow exists in every network with integral\footnotemark{} edge weights.
|
||||
\item Every edge in this flow carries an integral amount of flow
|
||||
\end{enumerate}
|
||||
|
||||
\footnotetext{Integral = \say{integer} as an adjective.}
|
||||
|
||||
\vfill
|
||||
|
||||
|
||||
\end{document}
|
Reference in New Issue
Block a user