Terminology
This commit is contained in:
parent
a999258ce3
commit
ad051fb5c3
288
luku11.tex
288
luku11.tex
|
@ -1,35 +1,35 @@
|
||||||
\chapter{Basics of graphs}
|
\chapter{Basics of graphs}
|
||||||
|
|
||||||
Monen ohjelmointitehtävän voi ratkaista tulkitsemalla
|
Many programming problems can be solved by
|
||||||
tehtävän verkko-on\-gel\-ma\-na ja käyttämällä
|
interpreting the problem as a graph problem
|
||||||
sopivaa verkkoalgoritmia.
|
and using a suitable graph algorithm.
|
||||||
Tyypillinen esimerkki verkosta on tieverkosto,
|
A typical example of a graph is a network
|
||||||
jonka rakenne muistuttaa luonnostaan verkkoa.
|
of roads and cities in a country.
|
||||||
Joskus taas verkko kätkeytyy syvemmälle ongelmaan
|
Sometimes, though, the graph is hidden
|
||||||
ja sitä voi olla vaikeaa huomata.
|
in the problem and it can be difficult to detect it.
|
||||||
|
|
||||||
Tässä kirjan osassa tutustumme verkkojen käsittelyyn
|
This part of the book discusses techniques and algorithms
|
||||||
liittyviin tekniikoihin ja kisakoodauksessa
|
involving graphs
|
||||||
keskeisiin verkkoalgoritmeihin.
|
that are important in competitive programming.
|
||||||
Aloitamme aiheeseen perehtymisen
|
We will first go through graph terminology
|
||||||
käymällä läpi verkkoihin liittyviä käsitteitä
|
and different ways to store graphs in algorithms.
|
||||||
sekä erilaisia tapoja pitää verkkoa muistissa algoritmeissa.
|
|
||||||
|
|
||||||
\section{Käsitteitä}
|
\section{Terminology}
|
||||||
|
|
||||||
\index{verkko@verkko}
|
\index{graph}
|
||||||
\index{solmu@solmu}
|
\index{node}
|
||||||
\index{kaari@kaari}
|
\index{edge}
|
||||||
|
|
||||||
\key{Verkko} muodostuu \key{solmuista}
|
A \key{graph} consists of \key{nodes}
|
||||||
ja niiden välisistä \key{kaarista}.
|
and \key{edges} between them.
|
||||||
Merkitsemme tässä kirjassa
|
In this book,
|
||||||
verkon solmujen määrää
|
the variable $n$ denotes the number of nodes
|
||||||
muuttujalla $n$ ja kaarten määrää muuttujalla $m$.
|
in a graph, and the variable $m$ denotes
|
||||||
Lisäksi numeroimme verkon solmut kokonaisluvuin
|
the number of edges.
|
||||||
$1,2,\ldots,n$.
|
In addition, the nodes are numbered
|
||||||
|
using integers $1,2,\ldots,n$.
|
||||||
|
|
||||||
Esimerkiksi seuraavassa verkossa on 5 solmua ja 7 kaarta:
|
For example, the following graph contains 5 nodes and 7 edges:
|
||||||
|
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.9]
|
\begin{tikzpicture}[scale=0.9]
|
||||||
|
@ -49,30 +49,31 @@ Esimerkiksi seuraavassa verkossa on 5 solmua ja 7 kaarta:
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
\index{polku@polku}
|
\index{path}
|
||||||
|
|
||||||
\key{Polku} on solmusta $a$ solmuun $b$
|
A \key{path} is a route from node $a$ to node $b$
|
||||||
johtava reitti, joka kulkee verkon kaaria pitkin.
|
that goes through the edges in the graph.
|
||||||
Polun \key{pituus} on kaarten määrä polulla.
|
The \key{length} of a path is the number of
|
||||||
Esimerkiksi yllä olevassa verkossa
|
edges in the path.
|
||||||
polkuja solmusta 1 solmuun 5 ovat:
|
For example, in the above graph, paths
|
||||||
|
from node 1 to node 5 are:
|
||||||
|
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item $1 \rightarrow 2 \rightarrow 5$ (pituus 2)
|
\item $1 \rightarrow 2 \rightarrow 5$ (length 2)
|
||||||
\item $1 \rightarrow 4 \rightarrow 5$ (pituus 2)
|
\item $1 \rightarrow 4 \rightarrow 5$ (length 2)
|
||||||
\item $1 \rightarrow 2 \rightarrow 4 \rightarrow 5$ (pituus 3)
|
\item $1 \rightarrow 2 \rightarrow 4 \rightarrow 5$ (length 3)
|
||||||
\item $1 \rightarrow 3 \rightarrow 4 \rightarrow 5$ (pituus 3)
|
\item $1 \rightarrow 3 \rightarrow 4 \rightarrow 5$ (length 3)
|
||||||
\item $1 \rightarrow 4 \rightarrow 2 \rightarrow 5$ (pituus 3)
|
\item $1 \rightarrow 4 \rightarrow 2 \rightarrow 5$ (length 3)
|
||||||
\item $1 \rightarrow 3 \rightarrow 4 \rightarrow 2 \rightarrow 5$ (pituus 4)
|
\item $1 \rightarrow 3 \rightarrow 4 \rightarrow 2 \rightarrow 5$ (length 4)
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\subsubsection{Yhtenäisyys}
|
\subsubsection{Connectivity}
|
||||||
|
|
||||||
\index{yhtenxinen verkko@yhtenäinen verkko}
|
\index{connected graph}
|
||||||
|
|
||||||
Verkko on \key{yhtenäinen}, jos siinä on polku
|
A graph is \key{connected}, if there is path
|
||||||
mistä tahansa solmusta mihin tahansa solmuun.
|
between any two nodes.
|
||||||
Esimerkiksi seuraava verkko on yhtenäinen:
|
For example, the following graph is connected:
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.9]
|
\begin{tikzpicture}[scale=0.9]
|
||||||
\node[draw, circle] (1) at (1,3) {$1$};
|
\node[draw, circle] (1) at (1,3) {$1$};
|
||||||
|
@ -87,8 +88,9 @@ Esimerkiksi seuraava verkko on yhtenäinen:
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
Seuraava verkko taas ei ole yhtenäinen,
|
The following graph is not connected
|
||||||
koska solmusta 4 ei pääse muihin verkon solmuihin.
|
because it is not possible to get to other
|
||||||
|
nodes from node 4.
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.9]
|
\begin{tikzpicture}[scale=0.9]
|
||||||
\node[draw, circle] (1) at (1,3) {$1$};
|
\node[draw, circle] (1) at (1,3) {$1$};
|
||||||
|
@ -98,17 +100,17 @@ koska solmusta 4 ei pääse muihin verkon solmuihin.
|
||||||
\path[draw,thick,-] (1) -- (2);
|
\path[draw,thick,-] (1) -- (2);
|
||||||
\path[draw,thick,-] (1) -- (3);
|
\path[draw,thick,-] (1) -- (3);
|
||||||
\path[draw,thick,-] (2) -- (3);
|
\path[draw,thick,-] (2) -- (3);
|
||||||
%\path[draw,thick,-] (3) -- (4);
|
|
||||||
%\path[draw,thick,-] (2) -- (4);
|
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
Verkon yhtenäiset osat muodostavat sen
|
\index{compomnent}
|
||||||
\key{komponentit}. \index{komponentti@komponentti}
|
|
||||||
Esimerkiksi seuraavassa verkossa on
|
The connected parts of a graph are
|
||||||
kolme komponenttia:
|
its \key{components}.
|
||||||
|
For example, the following graph
|
||||||
|
contains three components:
|
||||||
$\{1,\,2,\,3\}$,
|
$\{1,\,2,\,3\}$,
|
||||||
$\{4,\,5,\,6,\,7\}$ ja
|
$\{4,\,5,\,6,\,7\}$ and
|
||||||
$\{8\}$.
|
$\{8\}$.
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.8]
|
\begin{tikzpicture}[scale=0.8]
|
||||||
|
@ -133,13 +135,13 @@ $\{8\}$.
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
\index{puu@puu}
|
\index{tree}
|
||||||
|
|
||||||
\key{Puu} on yhtenäinen verkko,
|
A \key{tree} is a connected graph
|
||||||
jossa on $n$ solmua ja $n-1$ kaarta.
|
that contains $n$ nodes and $n-1$ edges.
|
||||||
Puussa minkä tahansa kahden solmun välillä
|
In a tree, there is a unique path
|
||||||
on yksikäsitteinen polku.
|
between any two nodes.
|
||||||
Esimerkiksi seuraava verkko on puu:
|
For example, the following graph is a tree:
|
||||||
|
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.9]
|
\begin{tikzpicture}[scale=0.9]
|
||||||
|
@ -158,14 +160,14 @@ Esimerkiksi seuraava verkko on puu:
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
\subsubsection{Kaarten suunnat}
|
\subsubsection{Edge directions}
|
||||||
|
|
||||||
\index{suunnattu verkko@suunnattu verkko}
|
\index{directed graph}
|
||||||
|
|
||||||
Verkko on \key{suunnattu},
|
A graph is \key{directed}
|
||||||
jos verkon kaaria pystyy
|
if the edges can be travelled only
|
||||||
kulkemaan vain niiden merkittyyn suuntaan.
|
in one direction.
|
||||||
Esimerkiki seuraava verkko on suunnattu:
|
For example, the following graph is directed:
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.9]
|
\begin{tikzpicture}[scale=0.9]
|
||||||
\node[draw, circle] (1) at (1,3) {$1$};
|
\node[draw, circle] (1) at (1,3) {$1$};
|
||||||
|
@ -182,30 +184,31 @@ Esimerkiki seuraava verkko on suunnattu:
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
Yllä olevassa verkossa on polku solmusta
|
The above graph contains a path from
|
||||||
3 solmuun 5, joka kulkee kaaria
|
node $3$ to $5$ using edges
|
||||||
$3 \rightarrow 1 \rightarrow 2 \rightarrow 5$.
|
$3 \rightarrow 1 \rightarrow 2 \rightarrow 5$.
|
||||||
Sen sijaan verkossa ei ole polkua
|
However, the graph doesn't contain
|
||||||
solmusta 5 solmuun 3.
|
a path from node $5$ to $3$.
|
||||||
|
|
||||||
|
\index{cycle}
|
||||||
|
\index{acyclic graph}
|
||||||
|
|
||||||
\index{sykli@sykli}
|
A \key{cycle} is a path whose first and
|
||||||
\index{syklitzn verkko@syklitön verkko}
|
last node is the same.
|
||||||
|
For example, the above graph contains
|
||||||
\key{Sykli} on polku, jonka ensimmäinen
|
a cycle
|
||||||
ja viimeinen solmu on sama.
|
|
||||||
Esimerkiksi yllä olevassa verkossa on sykli
|
|
||||||
$1 \rightarrow 2 \rightarrow 4 \rightarrow 1$.
|
$1 \rightarrow 2 \rightarrow 4 \rightarrow 1$.
|
||||||
Jos verkossa ei ole yhtään sykliä, se on \key{syklitön}.
|
If a graph doesn't contain any cycles,
|
||||||
|
it is called \key{acyclic}.
|
||||||
|
|
||||||
\subsubsection{Kaarten painot}
|
\subsubsection{Edge weights}
|
||||||
|
|
||||||
\index{painotettu verkko@painotettu verkko}
|
\index{weighted graph}
|
||||||
|
|
||||||
\key{Painotetussa} verkossa
|
In a \key{weighted} graph, each edge is assigned
|
||||||
jokaiseen kaareen liittyy \key{paino}.
|
a \key{weight}.
|
||||||
Usein painot kuvaavat kaarien pituuksia.
|
Often, the weights are interpreted as edge lengths.
|
||||||
Esimerkiksi seuraava verkko on painotettu:
|
For example, the following graph is weighted:
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.9]
|
\begin{tikzpicture}[scale=0.9]
|
||||||
\node[draw, circle] (1) at (1,3) {$1$};
|
\node[draw, circle] (1) at (1,3) {$1$};
|
||||||
|
@ -222,27 +225,27 @@ Esimerkiksi seuraava verkko on painotettu:
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
Nyt polun pituus on
|
Now the length of a path is the sum of
|
||||||
polulla olevien kaarten painojen summa.
|
edge weights.
|
||||||
Esimerkiksi yllä olevassa verkossa
|
For example, in the above graph
|
||||||
polun $1 \rightarrow 2 \rightarrow 5$
|
the length of path
|
||||||
pituus on $5+7=12$ ja polun
|
$1 \rightarrow 2 \rightarrow 5$
|
||||||
$1 \rightarrow 3 \rightarrow 4 \rightarrow 5$ pituus on $1+7+3=11$.
|
is $12$, and the length of path
|
||||||
Jälkimmäinen on lyhin polku solmusta 1 solmuun 5.
|
$1 \rightarrow 3 \rightarrow 4 \rightarrow 5$ is $11$.
|
||||||
|
The latter is the shortest path from node $1$ to node $5$.
|
||||||
|
|
||||||
\subsubsection{Naapurit ja asteet}
|
\subsubsection{Neighbors and degrees}
|
||||||
|
|
||||||
\index{naapuri@naapuri}
|
\index{neighbor}
|
||||||
\index{aste@aste}
|
\index{degree}
|
||||||
|
|
||||||
Kaksi solmua ovat \key{naapureita},
|
Two nodes are \key{neighbors} or \key{adjacent}
|
||||||
jos ne ovat verkossa
|
if there is a edge between them.
|
||||||
\key{vierekkäin} eli niiden välillä on kaari.
|
The \key{degree} of a node
|
||||||
Solmun \key{aste} on
|
is the number of its neighbors.
|
||||||
sen naapurien määrä.
|
For example, in the following graph,
|
||||||
Esimerkiksi seuraavassa verkossa
|
the neighbors of node 2 are 1, 4 and 5,
|
||||||
solmun 2 naapurit ovat 1, 4 ja 5,
|
so its degree is 3.
|
||||||
joten sen aste on 3.
|
|
||||||
|
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.9]
|
\begin{tikzpicture}[scale=0.9]
|
||||||
|
@ -262,31 +265,31 @@ joten sen aste on 3.
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
Verkon solmujen asteiden summa on aina $2m$,
|
The sum of degrees in a graph is always $2m$
|
||||||
missä $m$ on kaarten määrä.
|
where $m$ is the number of edges.
|
||||||
Tämä johtuu siitä, että jokainen kaari lisää
|
The reason for this is that each edge
|
||||||
kahden solmun astetta yhdellä.
|
increases the degree of two nodes by one.
|
||||||
Niinpä solmujen asteiden summa on aina parillinen.
|
Thus, the sum of degrees is always even.
|
||||||
|
|
||||||
\index{szznnollinen verkko@säännöllinen verkko}
|
\index{regular graph}
|
||||||
\index{tzydellinen verkko@täydellinen verkko}
|
\index{complete graph}
|
||||||
|
|
||||||
Verkko on \key{säännöllinen},
|
A graph is \key{regular} if the
|
||||||
jos jokaisen solmun aste on vakio $d$.
|
degree of every node is a constant $d$.
|
||||||
Verkko on \key{täydellinen},
|
A graph is \key{complete} if the
|
||||||
jos jokaisen solmun aste on $n-1$ eli
|
degree of every node is $n-1$, i.e.,
|
||||||
verkossa on kaikki mahdolliset kaaret
|
the graph contains all possible edges
|
||||||
solmujen välillä.
|
between the nodes.
|
||||||
|
|
||||||
\index{lzhtzaste@lähtöaste}
|
\index{indegree}
|
||||||
\index{tuloaste@tuloaste}
|
\index{outdegree}
|
||||||
|
|
||||||
Suunnatussa verkossa \key{lähtöaste}
|
In a directed graph, the \key{indegree}
|
||||||
on solmusta lähtevien kaarten määrä ja
|
and \key{outdegree} of a node is
|
||||||
\key{tuloaste} on solmuun tulevien
|
the number of edges that end and begin
|
||||||
kaarten määrä.
|
at the node, respectively.
|
||||||
Esimerkiksi seuraavassa verkossa solmun 2
|
For example, in the following graph,
|
||||||
lähtöaste on 1 ja tuloaste on 2.
|
node 2 has indegree 2 and outdegree 1.
|
||||||
|
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.9]
|
\begin{tikzpicture}[scale=0.9]
|
||||||
|
@ -305,21 +308,21 @@ lähtöaste on 1 ja tuloaste on 2.
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
\subsubsection{Väritykset}
|
\subsubsection{Colorings}
|
||||||
|
|
||||||
\index{vxritys@väritys}
|
\index{coloring}
|
||||||
\index{kaksijakoinen verkko@kaksijakoinen verkko}
|
\index{bipartite graph}
|
||||||
|
|
||||||
Verkon \key{värityksessä} jokaiselle solmulle valitaan
|
In a \key{coloring} of a graph,
|
||||||
tietty väri niin, että millään kahdella
|
each node is assigned a color so that
|
||||||
vierekkäisellä solmulla ei ole samaa väriä.
|
no adjacent nodes have the same color.
|
||||||
|
|
||||||
Verkko on \key{kaksijakoinen},
|
A graph is \key{bipartite} if
|
||||||
jos se on mahdollista värittää kahdella värillä.
|
it is possible to color it using two colors.
|
||||||
Osoittautuu, että verkko on kaksijakoinen tarkalleen silloin,
|
It turns out that a graph is bipartite
|
||||||
kun siinä ei ole sykliä, johon kuuluu
|
exactly when it doesn't contain a cycle
|
||||||
pariton määrä solmuja.
|
with odd number of edges.
|
||||||
Esimerkiksi verkko
|
For example, the graph
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.9]
|
\begin{tikzpicture}[scale=0.9]
|
||||||
\node[draw, circle] (1) at (1,3) {$2$};
|
\node[draw, circle] (1) at (1,3) {$2$};
|
||||||
|
@ -336,7 +339,7 @@ Esimerkiksi verkko
|
||||||
\path[draw,thick,-] (5) -- (6);
|
\path[draw,thick,-] (5) -- (6);
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
on kaksijakoinen, koska sen voi värittää seuraavasti:
|
is bipartite because we can color it as follows:
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.9]
|
\begin{tikzpicture}[scale=0.9]
|
||||||
\node[draw, circle, fill=blue!40] (1) at (1,3) {$2$};
|
\node[draw, circle, fill=blue!40] (1) at (1,3) {$2$};
|
||||||
|
@ -354,16 +357,16 @@ on kaksijakoinen, koska sen voi värittää seuraavasti:
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
|
|
||||||
\subsubsection{Yksinkertaisuus}
|
\subsubsection{Simplicity}
|
||||||
|
|
||||||
\index{yksinkertainen verkko@yksinkertainen verkko}
|
\index{simple graph}
|
||||||
|
|
||||||
Verkko on \key{yksinkertainen},
|
A graph is \key{simple}
|
||||||
jos mistään solmusta ei ole kaarta itseensä
|
if no edge begins and ends at the same node,
|
||||||
eikä minkään kahden solmun välillä ole
|
and there are no multiple
|
||||||
monta kaarta samaan suuntaan.
|
edges between two nodes.
|
||||||
Usein oletuksena on, että verkko on yksinkertainen.
|
Often we will assume that the graph is simple.
|
||||||
Esimerkiksi verkko
|
For example, the graph
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\begin{tikzpicture}[scale=0.9]
|
\begin{tikzpicture}[scale=0.9]
|
||||||
\node[draw, circle] (1) at (1,3) {$2$};
|
\node[draw, circle] (1) at (1,3) {$2$};
|
||||||
|
@ -386,8 +389,9 @@ Esimerkiksi verkko
|
||||||
\path[draw,thick,-] (5) edge [loop left] (5);
|
\path[draw,thick,-] (5) edge [loop left] (5);
|
||||||
\end{tikzpicture}
|
\end{tikzpicture}
|
||||||
\end{center}
|
\end{center}
|
||||||
\emph{ei} ole yksinkertainen, koska solmusta 4 on kaari itseensä
|
is \emph{not} simple because there is an edge that begins
|
||||||
ja solmujen 2 ja 3 välillä on kaksi kaarta.
|
and ends at node 4, and there are two edges
|
||||||
|
between nodes 2 and 3.
|
||||||
|
|
||||||
\section{Verkko muistissa}
|
\section{Verkko muistissa}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue