Parallel pats and maximum matching
This commit is contained in:
parent
99c1706277
commit
c65bbed2f3
290
luku20.tex
290
luku20.tex
|
@ -554,15 +554,17 @@ as a cut in the graph.
|
||||||
Thus, the flow has to be a maximum flow,
|
Thus, the flow has to be a maximum flow,
|
||||||
and the cut has to be a minimum cut.
|
and the cut has to be a minimum cut.
|
||||||
|
|
||||||
\section{Rinnakkaiset polut}
|
\section{Parallel paths}
|
||||||
|
|
||||||
Ensimmäisenä virtauslaskennan sovelluksena tarkastelemme
|
As a first application for flows,
|
||||||
tehtävää, jossa tavoitteena on muodostaa mahdollisimman
|
we consider a problem where the task is to
|
||||||
monta rinnakkaista polkua verkon alkusolmusta loppusolmuun.
|
form as many parallel paths as possible
|
||||||
Vaatimuksena on, että jokainen verkon kaari esiintyy
|
from the starting node of the graph
|
||||||
enintään yhdellä polulla.
|
to the ending node.
|
||||||
|
It is required that no edge appears
|
||||||
|
in more than one path.
|
||||||
|
|
||||||
Esimerkiksi verkossa
|
For example, in the graph
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.9]
|
\begin{tikzpicture}[scale=0.9]
|
||||||
\node[draw, circle] (1) at (1,2) {$1$};
|
\node[draw, circle] (1) at (1,2) {$1$};
|
||||||
|
@ -582,10 +584,10 @@ Esimerkiksi verkossa
|
||||||
\path[draw,thick,->] (5) -- (6);
|
\path[draw,thick,->] (5) -- (6);
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
pystyy muodostamaan kaksi rinnakkaista polkua solmusta 1 solmuun 6.
|
we can form two parallel paths from node 1 to node 6.
|
||||||
Tämä toteutuu valitsemalla polut
|
This can be done by choosing paths
|
||||||
$1 \rightarrow 2 \rightarrow 4 \rightarrow 3 \rightarrow 6$
|
$1 \rightarrow 2 \rightarrow 4 \rightarrow 3 \rightarrow 6$
|
||||||
ja $1 \rightarrow 4 \rightarrow 5 \rightarrow 6$:
|
and $1 \rightarrow 4 \rightarrow 5 \rightarrow 6$:
|
||||||
|
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.9]
|
\begin{tikzpicture}[scale=0.9]
|
||||||
|
@ -616,20 +618,19 @@ ja $1 \rightarrow 4 \rightarrow 5 \rightarrow 6$:
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
Osoittautuu, että suurin rinnakkaisten polkujen määrä
|
It turns out that the maximum number of parallel paths
|
||||||
on yhtä suuri kuin maksimivirtaus verkossa,
|
equals the maximum flow in the graph when the weight
|
||||||
jossa jokaisen kaaren kapasiteetti on 1.
|
of each edge is 1.
|
||||||
Kun maksimivirtaus on muodostettu,
|
After the maximum flow has been constructed,
|
||||||
rinnakkaiset polut voi löytää
|
the parallel paths can be found greedily by finding
|
||||||
ahneesti etsimällä alkusolmusta loppusolmuun
|
paths from the starting node to the ending node.
|
||||||
kulkevia polkuja.
|
|
||||||
|
|
||||||
Tarkastellaan sitten tehtävän muunnelmaa,
|
Let's then consider a variation for the problem
|
||||||
jossa jokainen solmu (alku- ja loppusolmua lukuun ottamatta)
|
where each node (except for the starting and ending nodes)
|
||||||
saa esiintyä enintään yhdellä polulla.
|
can appear in at most one path.
|
||||||
Tämän rajoituksen seurauksena äskeisessä verkossa
|
After this restriction, we can construct only one path
|
||||||
voi muodostaa vain yhden polun,
|
in the above graph, because node 4 can't appear
|
||||||
koska solmu 4 ei voi esiintyä monella polulla:
|
in more than one path:
|
||||||
|
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}
|
\begin{tikzpicture}
|
||||||
|
@ -656,14 +657,14 @@ koska solmu 4 ei voi esiintyä monella polulla:
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
Tavallinen keino rajoittaa solmun kautta kulkevaa
|
A standard way to restrict the flow through a node
|
||||||
virtausta on jakaa solmu tulosolmuksi ja lähtösolmuksi.
|
is to divide the node into two parts.
|
||||||
Kaikki solmuun tulevat kaaret saapuvat tulosolmuun
|
All incoming edges are connected to the first part,
|
||||||
ja kaikki solmusta lähtevät kaaret poistuvat lähtösolmusta.
|
and all outgoing edges are connected to the second part.
|
||||||
Lisäksi tulosolmusta lähtösolmuun on kaari,
|
In addition, there is an edge from the first part
|
||||||
jossa on haluttu kapasiteetti.
|
to the second part.
|
||||||
|
|
||||||
Tässä tapauksessa verkosta tulee seuraava:
|
In the current example, the graph becomes as follows:
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}
|
\begin{tikzpicture}
|
||||||
\node[draw, circle] (1) at (1,2) {$1$};
|
\node[draw, circle] (1) at (1,2) {$1$};
|
||||||
|
@ -697,7 +698,7 @@ Tässä tapauksessa verkosta tulee seuraava:
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
Tämän verkon maksimivirtaus on:
|
The maximum flow for the graph is as follows:
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}
|
\begin{tikzpicture}
|
||||||
\node[draw, circle] (1) at (1,2) {$1$};
|
\node[draw, circle] (1) at (1,2) {$1$};
|
||||||
|
@ -739,35 +740,35 @@ Tämän verkon maksimivirtaus on:
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
Tämä tarkoittaa, että verkossa on mahdollista muodostaa
|
This means that it is possible to form exactly
|
||||||
vain yksi polku alkusolmusta lähtösolmuun,
|
one path from the starting node to the ending node
|
||||||
kun sama solmu ei saa esiintyä monessa polussa.
|
when a node can't appear in more than one path.
|
||||||
|
|
||||||
\section{Maksimiparitus}
|
\section{Maximum matching}
|
||||||
|
|
||||||
\index{paritus@paritus}
|
\index{matching}
|
||||||
\index{maksimiparitus@maksimiparitus}
|
\index{maximum matching}
|
||||||
|
|
||||||
\key{Maksimiparitus} on suurin mahdollinen joukko
|
A \key{maximum matching} is the largest possible
|
||||||
verkon solmuista muodostettuja pareja,
|
set of pairs of nodes in a graph
|
||||||
jolle pätee,
|
such that there is an edge between each pair of nodes,
|
||||||
että jokaisen parin välillä on kaari verkossa
|
and each node belongs to at most one pair.
|
||||||
ja jokainen solmu kuuluu enintään yhteen pariin.
|
|
||||||
|
|
||||||
Maksimiparituksen etsimiseen yleisessä
|
There is a polynomial algorithm for finding
|
||||||
verkossa on olemassa polynominen algoritmi,
|
a maximum matching in a general graph,
|
||||||
mutta se on hyvin monimutkainen.
|
but it is very complex.
|
||||||
Tässä luvussa keskitymmekin tilanteeseen,
|
For this reason, we will restrict ourselves to the
|
||||||
jossa verkko on kaksijakoinen.
|
case where the graph is bipartite.
|
||||||
Tällöin maksimiparituksen pystyy etsimään
|
In this case we can easily find the maximum matching
|
||||||
helposti virtauslaskennan avulla.
|
using a maximum flow algorithm.
|
||||||
|
|
||||||
\subsubsection{Maksimiparituksen etsiminen}
|
\subsubsection{Finding a maximum matching}
|
||||||
|
|
||||||
Kaksijakoinen verkko voidaan esittää niin,
|
A bipartite graph can be always presented so
|
||||||
että se muodostuu vasemman ja oikean puolen
|
that it consists of left-side and right-side nodes,
|
||||||
solmuista ja kaikki verkon kaaret kulkevat puolten välillä.
|
and all edges in the graph go between
|
||||||
Tarkastellaan esimerkkinä seuraavaa verkkoa:
|
left and right sides.
|
||||||
|
As an example, consider the following graph:
|
||||||
|
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.60]
|
\begin{tikzpicture}[scale=0.60]
|
||||||
|
@ -789,7 +790,7 @@ Tarkastellaan esimerkkinä seuraavaa verkkoa:
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
Tässä verkossa maksimiparituksen koko on 3:
|
In this graph, the size of a maximum matching is 3:
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.60]
|
\begin{tikzpicture}[scale=0.60]
|
||||||
\node[draw, circle] (1) at (2,4.5) {1};
|
\node[draw, circle] (1) at (2,4.5) {1};
|
||||||
|
@ -814,16 +815,16 @@ Tässä verkossa maksimiparituksen koko on 3:
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
Kaksijakoisen verkon maksimiparitus
|
A maximum matching in a bipartite graph
|
||||||
vastaa maksimivirtausta verkossa,
|
corresponds to a maximum flow in an extended graph
|
||||||
johon on lisätty alkusolmu ja loppusolmu.
|
that contains a starting node,
|
||||||
Alkusolmusta on kaari jokaiseen vasemman
|
an ending node and all the nodes of the original graph.
|
||||||
puolen solmuun, ja vastaavasti loppusolmuun
|
There is an edge from the starting node to
|
||||||
on kaari jokaisesta oikean puolen solmusta.
|
each left-side node, and an edge from
|
||||||
Jokaisen kaaren kapasiteettina on 1.
|
each right-side node to the ending node.
|
||||||
|
The capacity of each edge is 1.
|
||||||
Esimerkissä tuloksena on seuraava verkko:
|
|
||||||
|
|
||||||
|
In the example graph, the result is as follows:
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.60]
|
\begin{tikzpicture}[scale=0.60]
|
||||||
\node[draw, circle] (1) at (2,4.5) {1};
|
\node[draw, circle] (1) at (2,4.5) {1};
|
||||||
|
@ -856,37 +857,36 @@ Esimerkissä tuloksena on seuraava verkko:
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
Tämän verkon maksimivirtaus on yhtä suuri kuin
|
The size of a maximum flow in this graph
|
||||||
alkuperäisen verkon maksimiparitus,
|
equals the size of a maximum matching
|
||||||
koska virtaus muodostuu joukosta polkuja
|
in the original graph,
|
||||||
alkusolmusta loppusolmuun ja jokainen
|
because each path from the starting node
|
||||||
polku ottaa mukaan uuden kaaren paritukseen.
|
to the ending node adds one edge to the matching.
|
||||||
Tässä tapauksessa maksimivirtaus on 3,
|
In this graph, the maximum flow is 3,
|
||||||
joten maksimiparitus on myös 3.
|
so the maximum matching is also 3.
|
||||||
|
|
||||||
\subsubsection{Hallin lause}
|
\subsubsection{Hall's theorem}
|
||||||
|
|
||||||
\index{Hallin lause@Hallin lause}
|
\index{Hall's theorem}
|
||||||
\index{txydellinen paritus@täydellinen paritus}
|
\index{perfect matching}
|
||||||
|
|
||||||
\key{Hallin lause} antaa ehdon, milloin kaksijakoiseen
|
\key{Hall's theorem} describes when a bipartite graph
|
||||||
verkkoon voidaan muodostaa paritus,
|
has a matching that contains all nodes
|
||||||
joka sisältää kaikki toisen puolen solmut.
|
in one side of the graph.
|
||||||
Jos kummallakin puolella on yhtä monta solmua,
|
If both sides contain the same number of nodes,
|
||||||
Hallin lause kertoo, voidaanko muodostaa
|
Hall's theorem tells us if it's possible to
|
||||||
\key{täydellinen paritus},
|
construct a \key{perfect matching} where
|
||||||
jossa kaikki solmut paritetaan keskenään.
|
all nodes are paired with each other.
|
||||||
|
|
||||||
Oletetaan, että haluamme muodostaa parituksen,
|
Assume that we want to construct a matching
|
||||||
johon kuuluvat kaikki vasemman puolen solmut.
|
that contains all left-side nodes.
|
||||||
Olkoon $X$ jokin joukko vasemman puolen solmuja
|
Let $X$ be a set of left-side nodes,
|
||||||
ja $f(X)$ näiden solmujen naapurien joukko.
|
and let $f(X)$ be the set of their neighbors.
|
||||||
Hallin lauseen mukaan paritus on mahdollinen,
|
According to Hall's theorem, a such matching exists
|
||||||
kun jokaiselle joukolle $X$
|
exactly when for each $X$, the condition $|X| \le |f(X)|$ holds.
|
||||||
pätee $|X| \le |f(X)|$.
|
|
||||||
|
|
||||||
Tarkastellaan Hallin lauseen merkitystä esimerkkiverkossa.
|
Let's study Hall's theorem in the example graph.
|
||||||
Valitaan ensin $X=\{1,3\}$, jolloin $f(X)=\{5,6,8\}$:
|
First, let $X=\{1,3\}$ and $f(X)=\{5,6,8\}$:
|
||||||
|
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.60]
|
\begin{tikzpicture}[scale=0.60]
|
||||||
|
@ -908,8 +908,9 @@ Valitaan ensin $X=\{1,3\}$, jolloin $f(X)=\{5,6,8\}$:
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
Tämä täyttää Hallin lauseen ehdon, koska $|X|=2$ ja $|f(X)|=3$.
|
The condition of Hall's theorem holds, because
|
||||||
Valitaan sitten $X=\{2,4\}$, jolloin $f(X)=\{7\}$:
|
$|X|=2$ and $|f(X)|=3$.
|
||||||
|
Next, let $X=\{2,4\}$ and $f(X)=\{7\}$:
|
||||||
|
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.60]
|
\begin{tikzpicture}[scale=0.60]
|
||||||
|
@ -931,43 +932,44 @@ Valitaan sitten $X=\{2,4\}$, jolloin $f(X)=\{7\}$:
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
Tässä tapauksessa $|X|=2$ ja $|f(X)|=1$, joten Hallin lauseen ehto
|
In this case, $|X|=2$ and $|f(X)|=1$,
|
||||||
ei ole voimassa.
|
so the condition of Hall's theorem doesn't hold.
|
||||||
Tämä tarkoittaa, että verkossa
|
This means that it's not possible to form
|
||||||
ei ole mahdollista muodostaa täydellistä paritusta,
|
a perfect matching in the graph.
|
||||||
johon kuuluvat kaikki vasemman puolen solmut.
|
This result is not surprising, because we already
|
||||||
Tämä on myös odotettu tulos, koska verkon maksimiparitus on 3 eikä 4.
|
knew that the maximum matching in the graph is 3 and not 4.
|
||||||
|
|
||||||
Jos Hallin lauseen ehto ei päde, osajoukko $X$
|
If the condition of Hall's theorem doesn't hold,
|
||||||
kertoo syyn sille, miksi paritusta ei voi muodostaa.
|
the set $X$ provides an explanation why we can't form a matching.
|
||||||
Koska $X$ sisältää enemmän solmuja kuin $f(X)$,
|
Since $X$ contains more nodes than $f(X)$,
|
||||||
kaikille $X$:n solmuille ei riitä paria oikealta.
|
there is no pair for all nodes in $X$.
|
||||||
Esimerkiksi yllä molemmat solmut 2 ja 4 tulisi
|
For example, in the above graph, both nodes 2 and 4
|
||||||
yhdistää solmuun 7, mutta tämä ei ole mahdollista.
|
should be connected to node 7 which is not possible.
|
||||||
|
|
||||||
\subsubsection{Kőnigin lause}
|
\subsubsection{Kőnig's theorem}
|
||||||
|
|
||||||
\index{Kőnigin lause}
|
\index{Kőnig's theorem}
|
||||||
\index{solmupeite@solmupeite}
|
\index{node cover}
|
||||||
\index{pienin solmupeite@pienin solmupeite}
|
\index{minimum node cover}
|
||||||
|
|
||||||
\key{Kőnigin lause} tarjoaa tehokkaan
|
\key{Kőnig's theorem} provides an efficient way
|
||||||
tavan muodostaa kaksijakoiselle verkolle
|
to construct a \key{minimum node cover} for a
|
||||||
\key{pienin solmupeite} eli pienin sellainen
|
bipartite graph.
|
||||||
solmujen joukko, että jokaisesta verkon kaaresta ainakin
|
This is a minimum set of nodes such that
|
||||||
toinen päätesolmuista kuuluu joukkoon.
|
each edge in the graph is connected to at least
|
||||||
|
one node in the set.
|
||||||
|
|
||||||
Yleisessä verkossa pienimmän solmupeitteen
|
In a general graph, finding a minimum node cover
|
||||||
etsiminen on NP-vaikea ongelma.
|
is a NP-hard problem.
|
||||||
Sen sijaan kaksijakoisessa verkossa
|
However, in a bipartite graph,
|
||||||
Kőnigin lauseen nojalla maksimiparitus ja
|
the size of
|
||||||
pienin solmupeite ovat aina yhtä suuria,
|
a maximum matching and a minimum node cover
|
||||||
minkä ansiosta
|
is always the same, according to Kőnig's theorem.
|
||||||
pienimmän solmupeitteen voi
|
Thus, we can efficiently find a minimum node cover
|
||||||
etsiä tehokkaasti virtauslaskennan avulla.
|
using a maximum flow algorithm.
|
||||||
|
|
||||||
Tarkastellaan taas seuraavaa verkkoa,
|
Let's consider the following graph
|
||||||
jonka maksimiparituksen koko on 3:
|
with a maximum matching of size 3:
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.60]
|
\begin{tikzpicture}[scale=0.60]
|
||||||
\node[draw, circle] (1) at (2,4.5) {1};
|
\node[draw, circle] (1) at (2,4.5) {1};
|
||||||
|
@ -991,9 +993,9 @@ jonka maksimiparituksen koko on 3:
|
||||||
\path[draw=red,thick,-,line width=2pt] (3) -- (6);
|
\path[draw=red,thick,-,line width=2pt] (3) -- (6);
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
Kőnigin lauseen ansiosta tiedämme nyt,
|
Using Kőnig's theorem, we know that the size
|
||||||
että myös pienimmän solmupeitteen koko on 3.
|
of a minimum node cover is also 3.
|
||||||
Solmupeite voidaan muodostaa seuraavasti:
|
It can be constructed as follows:
|
||||||
|
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.60]
|
\begin{tikzpicture}[scale=0.60]
|
||||||
|
@ -1014,27 +1016,25 @@ Solmupeite voidaan muodostaa seuraavasti:
|
||||||
\path[draw,thick,-] (4) -- (7);
|
\path[draw,thick,-] (4) -- (7);
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
Pienin solmupeite muodostuu aina niin,
|
For each edge in the maximum matching,
|
||||||
että jokaisesta maksimiparituksen kaaresta
|
exactly one of its end nodes belongs to
|
||||||
toinen kaaren päätesolmuista kuuluu peitteeseen.
|
the minimum node cover.
|
||||||
|
|
||||||
\index{riippumaton joukko@riippumaton joukko}
|
\index{independent set}
|
||||||
\index{suurin riippumaton joukko@suurin riippumaton joukko}
|
\index{maximum independent set}
|
||||||
|
|
||||||
Kun verkosta valitaan kaikki solmut,
|
The set of all nodes that do \emph{not}
|
||||||
jotka \emph{eivät} kuulu pienimpään
|
belong to a minimum node cover
|
||||||
solmupeitteeseen, syntyy
|
is a \key{maximum independent set}.
|
||||||
\key{suurin riippumaton joukko}.
|
This is the largest possible set of nodes
|
||||||
Tämä on suurin mahdollinen joukko solmuja,
|
where there is no edge between any two nodes
|
||||||
jossa minkään kahden solmun
|
in the graph.
|
||||||
välillä ei ole kaarta.
|
Once again, finding a maximum independent
|
||||||
Pienimmän solmupeitteen tavoin
|
set in a general graph is a NP-hard problem,
|
||||||
riippumattoman joukon muodostaminen on
|
but in a bipartite graph we can use
|
||||||
NP-vaikea ongelma yleisessä verkossa,
|
Kőnig's theorem to solve the problem efficiently.
|
||||||
mutta Kőnigin lauseen avulla
|
In the example graph, the maximum independent
|
||||||
ongelma on mahdollista ratkaista
|
set is as follows:
|
||||||
tehokkaasti kaksijakoisessa verkossa.
|
|
||||||
Esimerkkiverkossa suurin riippumaton joukko on seuraava:
|
|
||||||
|
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.60]
|
\begin{tikzpicture}[scale=0.60]
|
||||||
|
|
Loading…
Reference in New Issue