2022-11-21 22:01:21 -08:00
\section { The Ford-Fulkerson Algorithm}
We now have all the tools we need to construct an algorithm that finds a maximal flow. \\
It works as follows:
\begin { enumerate}
\item [\texttt{00}] Take a weighted directed graph $ G $ .
\item [\texttt{01}] Find any flow $ F $ in $ G $
\item [\texttt{02}] Calculate $ R $ , the residual of $ F $ .
\item [\texttt{03}] ~~~~If $ S $ and $ T $ are not connected in $ R $ , $ F $ is a maximal flow. \texttt { HALT} .
\item [\texttt{04}] Otherwise, find another flow $ F _ 0 $ in $ R $ .
\item [\texttt{05}] Add $ F _ 0 $ to $ F $
\item [\texttt{06}] \texttt { GOTO 02}
\end { enumerate}
\problem { }
Run the Ford-Fulkerson algorithm on the following graph. \\
There is extra space on the next page.
\begin { center}
\begin { tikzpicture}
% Nodes
\begin { scope} [layer = nodes]
\node [main] (S) at (-5mm, 0mm) { $ S $ } ;
\node [main] (A) at (20mm, 20mm) { $ A $ } ;
\node [main] (B) at (20mm, 0mm) { $ B $ } ;
\node [main] (C) at (20mm, -20mm) { $ C $ } ;
\node [main] (D) at (50mm, 20mm) { $ D $ } ;
\node [main] (E) at (50mm, 0mm) { $ E $ } ;
\node [main] (F) at (50mm, -20mm) { $ F $ } ;
\node [main] (T) at (75mm, 0mm) { $ T $ } ;
\end { scope}
% Edges
\draw [->]
(S) edge node[label] { $ 8 $ } (A)
(S) edge node[label] { $ 7 $ } (B)
(S) edge node[label] { $ 4 $ } (C)
(A) edge node[label] { $ 2 $ } (B)
(B) edge node[label] { $ 5 $ } (C)
(A) edge node[label] { $ 3 $ } (D)
(A) edge node[label] { $ 9 $ } (E)
(B) edge node[label] { $ 6 $ } (E)
(C) edge node[label] { $ 7 $ } (E)
(C) edge node[label] { $ 2 $ } (F)
(E) edge node[label] { $ 3 $ } (D)
(E) edge node[label] { $ 4 $ } (F)
(D) edge node[label] { $ 9 $ } (T)
(E) edge node[label] { $ 5 $ } (T)
(F) edge node[label] { $ 8 $ } (T)
;
\end { tikzpicture}
\end { center}
\begin { solution}
The maximum flow is $ 17 $ .
\end { solution}
\vspace { 5mm}
\pagebreak
\begin { center}
\begin { tikzpicture}
% Nodes
\begin { scope} [layer = nodes]
\node [main] (S) at (-5mm, 0mm) { $ S $ } ;
\node [main] (A) at (20mm, 20mm) { $ A $ } ;
\node [main] (B) at (20mm, 0mm) { $ B $ } ;
\node [main] (C) at (20mm, -20mm) { $ C $ } ;
\node [main] (D) at (50mm, 20mm) { $ D $ } ;
\node [main] (E) at (50mm, 0mm) { $ E $ } ;
\node [main] (F) at (50mm, -20mm) { $ F $ } ;
\node [main] (T) at (75mm, 0mm) { $ T $ } ;
\end { scope}
% Edges
\draw [->]
(S) edge node[label] { $ 8 $ } (A)
(S) edge node[label] { $ 7 $ } (B)
(S) edge node[label] { $ 4 $ } (C)
(A) edge node[label] { $ 2 $ } (B)
(B) edge node[label] { $ 5 $ } (C)
(A) edge node[label] { $ 3 $ } (D)
(A) edge node[label] { $ 9 $ } (E)
(B) edge node[label] { $ 6 $ } (E)
(C) edge node[label] { $ 7 $ } (E)
(C) edge node[label] { $ 2 $ } (F)
(E) edge node[label] { $ 3 $ } (D)
(E) edge node[label] { $ 4 $ } (F)
(D) edge node[label] { $ 9 $ } (T)
(E) edge node[label] { $ 5 $ } (T)
(F) edge node[label] { $ 8 $ } (T)
;
\end { tikzpicture}
\end { center}
\vfill
\pagebreak
\problem { }
2023-01-08 09:10:54 -08:00
You are given a large network. How can you quickly find an upper bound for the number of iterations the Ford-Fulkerson algorithm will need to find a maximum flow?
2022-11-21 22:01:21 -08:00
\begin { solution}
Each iteration adds at least one unit of flow. So, we will find a maximum flow in at most $ \min ( \text { flow out of } S,~ \text { flow into } T ) $ iterations.
\vspace { 2ex}
A simpler answer could only count the flow on $ S $ .
\end { solution}
\vfill
\pagebreak