180 lines
3.8 KiB
TeX
Executable File

% https://git.betalupi.com/Mark/latex-packages
% use [nosolutions] flag to hide solutions.
% use [solutions] flag to show solutions.
% Last built with version 1.1.0
\documentclass[
solutions
]{ormc_handout}
\usepackage{subfiles}
\usetikzlibrary{arrows.meta}
\usetikzlibrary{shapes.geometric}
% We put nodes in a separate layer, so we can
% slightly overlap with paths for a perfect fit
\pgfdeclarelayer{nodes}
\pgfdeclarelayer{path}
\pgfsetlayers{main,nodes}
% Layer settings
\tikzset{
% Layer hack, lets us write
% later = * in scopes.
layer/.style = {
execute at begin scope={\pgfonlayer{#1}},
execute at end scope={\endpgfonlayer}
},
%
% Arrowhead tweaks
>={Latex[ width=2mm, length=2mm ]},
label/.style = {
circle,
% For automatic red background in solutions
fill = \ORMCbgcolor,
draw = none
},
%
% Nodes
main/.style = {
draw,
circle,
fill = white
},
%
% Flow annotations
flow/.style = {
opacity = 1,
thin,
inner xsep = 2.5mm,
inner ysep = 2.5mm
},
%
% Paths
path/.style = {
line width = 4mm,
draw = black,
% Lengthen paths so they're
% completely under nodes.
line cap = rect,
opacity = 0.3
}
}
\begin{document}
\maketitle
<Advanced 2>
<Fall 2022>
{Algorithms on Graphs: Flow}
<Part 1: Flow>
{
Prepared by Mark on \today
}
\subfile{parts/00 review}
\subfile{parts/01 flow}
\subfile{parts/02 residual}
\subfile{parts/03 fulkerson}
\problem{Maximum Cardinality Matching}
A \textit{matching} is a subset of edges in a bipartite graph. Nodes in a matching must not have more than one edge connected to them. \\
A matching is \textit{maximal} if it has more edges than any other matching.
\vspace{5mm}
\begin{minipage}[t]{0.48\textwidth}
\begin{center}
Initial Graph \\
\vspace{2mm}
\begin{tikzpicture}
% Nodes
\begin{scope}[layer = nodes]
\node[main] (A1) at (0mm, 24mm) {};
\node[main] (A2) at (0mm, 18mm) {};
\node[main] (A3) at (0mm, 12mm) {};
\node[main] (A4) at (0mm, 6mm) {};
\node[main] (A5) at (0mm, 0mm) {};
\node[main] (B1) at (20mm, 24mm) {};
\node[main] (B2) at (20mm, 18mm) {};
\node[main] (B3) at (20mm, 12mm) {};
\node[main] (B4) at (20mm, 6mm) {};
\node[main] (B5) at (20mm, 0mm) {};
\end{scope}
% Edges
\draw
(A1) edge (B2)
(A1) edge (B3)
(A2) edge (B1)
(A2) edge (B4)
(A4) edge (B3)
(A2) edge (B3)
(A5) edge (B3)
(A5) edge (B4)
;
\end{tikzpicture}
\end{center}
\end{minipage}
\hfill
\begin{minipage}[t]{0.48\textwidth}
\begin{center}
Maximal Matching \\
\vspace{2mm}
\begin{tikzpicture}
% Nodes
\begin{scope}[layer = nodes]
\node[main] (A1) at (0mm, 24mm) {};
\node[main] (A2) at (0mm, 18mm) {};
\node[main] (A3) at (0mm, 12mm) {};
\node[main] (A4) at (0mm, 6mm) {};
\node[main] (A5) at (0mm, 0mm) {};
\node[main] (B1) at (20mm, 24mm) {};
\node[main] (B2) at (20mm, 18mm) {};
\node[main] (B3) at (20mm, 12mm) {};
\node[main] (B4) at (20mm, 6mm) {};
\node[main] (B5) at (20mm, 0mm) {};
\end{scope}
% Edges
\draw[opacity = 0.4]
(A1) edge (B2)
(A1) edge (B3)
(A2) edge (B1)
(A2) edge (B4)
(A4) edge (B3)
(A4) edge (B3)
(A5) edge (B3)
(A5) edge (B4)
;
\draw
(A1) edge (B2)
(A2) edge (B1)
(A4) edge (B3)
(A5) edge (B4)
;
\end{tikzpicture}
\end{center}
\end{minipage}
\vspace{5mm}
Devise an algorithm to find a maximal matching in any bipartite graph. \\
Find an upper bound for its runtime.
\begin{solution}
Turn this into a maximum flow problem and use FF. \\
Connect a node $S$ to all nodes in the left group and a node $T$ to all nodes in the right group. All edges have capacity 1.
\vspace{2ex}
Just like FF, this algorithm will take at most $\min(\# \text{ left nodes}, \# \text{ right nodes})$ iterations.
\end{solution}
\end{document}