Terminology

This commit is contained in:
Antti H S Laaksonen 2017-01-07 16:34:11 +02:00
parent a999258ce3
commit ad051fb5c3
1 changed files with 146 additions and 142 deletions

View File

@ -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}