Suunnatut, suuntaamattomat ja yksinkertaiset
verkot eli graafit [-]
Suunnattu verkko on pari $[V,E]$ missä $V$ on joukko, jonka
alkiot ovat verkon solmut ja $E$ on joukon $V\times V$ osajoukko,
jonka alkiot ovat solmujen väliset (suunnatut) kaaret eli
linkit.
Suuntaamaton verkko (tai vain verkko) on pari
$[V,E]$ missä $V$ on joukko, jonka
alkiot ovat verkon solmut ja
$E\subseteq\set{\{a,b\}\mid a, b\in V}$ on verkon
solmujen välisten kaarien joukko.
Suuntamaton verkko $[V,E]$ on
yksinkertainen jos
$\{v,v\}=\{v\}\notin E$ kaikilla $v\in V$ ja suunnatun
verkon tapauksessa jos $[v,v]\notin E$ kaikilla
$v\in V$.
Jos verkon kahden solmun välillä on kaari niin nämä solmut
ovat toistensa naapureita ja kyseisen kaaren
päätesolmut jolloin siis yksinkertaisessa verkossa mikään solmu ei
ole oma naapurinsa.
Huom! [+]
Useimmiten $V$:n alkioiden lukumäärä on
positiivinen mutta äärellinen.
Verkkoihin eli graafeihin liittyvä sanasto on kaikkea muuta
kuin vakiintunut. Tässä verkko on esimerkiksi määritelty siten, että
kahden solmun välillä on
korkeintaan yksi kaari mutta usein tämä vaatimus
liitetään yksinkertaisen verkon määritelmään.
Määritelmiä [-]
Verkon $[V,E]$ polku (solmusta $v_0$
solmuun $v_n$) on jono $[v_0,v_1,\ldots,v_n]$
missä $n\geq 1$ ja on olemassa kaari solmujen $v_{j-1}$
ja $v_j$ välillä, (eli $\{ v_{j-1},v_j\}\in E$ tai
$[v_{j-1},v_j]\in E$) kun $1\leq j \leq n$.
Polun $[v_0,v_1,\ldots,v_n]$ pituus
on $n$.
Verkon $[V,E]$ sykli (tai kierros)
on sen polku $[v_0,v_1,\ldots,v_n]$ missä $v_n=v_0$.
Polku $[v_0,v_1,\ldots,v_n]$ on
yksinkertainen jos $v_j\neq v_k$ kun
$0\leq j < k \leq n$.
Sykli $[v_0,v_1,\ldots,v_n]$ on
yksinkertainen jos
$[v_0,v_1,\ldots,v_{n-1}]$ on yksinkertainen
ja suuntaamattomassa
verkossa $n\neq 2$.
Verkon $[V,E]$ Eulerin polku
(tai sykli) on sen polku (tai sykli) $[v_0,v_1,\ldots,v_n]$,
jossa $\cup_{j=1}^n \{v_{j-1},v_j\} =E$ ja
$\{v_{j-1},v_j\}\neq \{v_{k-1},v_k\}$ kun $1\leq j< k\leq n$
($ \cup_{j=1}^n [v_{j-1},v_j] =E$ ja $
[v_{j-1},v_j]\neq [v_{k-1},v_k]$ kun
$1\leq j< k\leq n$)
eli se käy läpi verkon kaikki kaaret täsmälleen kerran.
Verkon $[V,E]$ Hamiltonin
polku (tai sykli)
on sen yksinkertainen polku (tai sykli) $[v_0,v_1,\ldots,v_n]$,
jossa $\{v_0,\ldots,v_n\}=V$ eli se käy
läpi kaikki verkon solmut (syklitapauksessa paitsi
$v_0=v_n$) täsmälleen kerran.
Verkko on yhtenäinen jos jokaisesta
solmusta on polku jokaiseen toiseen solmuun.
Verkko on puu jos se on yksinkertainen
ja jokaisesta solmusta on täsmälleen yksi
yksinkertainen polku jokaiseen toiseen solmuun.
Verkko on metsä jos se on yksinkertainen
ja jokaisesta solmusta on korkeintaan yksi yksinkertainen
polku jokaiseen toiseen solmuun.
Verkko $[V,E]$ on kaksijakoinen
osilla $X$ ja $Y$ jos $V=X\cup Y$,
$X\cap Y=\emptyset$ ja
$E\subseteq \set{\{x,y\}\mid x\in X, y\in Y}$
(tai $E\subseteq X\times Y$).
Verkon $[V,E]$ pariutus on kaarien
osajoukko $M\subseteq E$ siten, että kahdella eri $M$:n
kaarella ei ole yhteisiä päätesolmuja, eli jos
$e_1=\{v_1,v_1'\}$ ja $e_2=\{v_2,v_2'\}$ niin
$e_1\cap e_2\neq \emptyset \leftrightarrow e_1=e_2$
(jos $[v_1,v_1']\in M$ ja $[v_2,v_2']\in M$
niin $\{v_1,v_1'\}\cap \{v_2,v_2'\}\neq \emptyset
\leftrightarrow [v_1,v_1']=[v_2,v_2']$).
Yksinkertaisen verkon $[V,E]$ solmujen
väritys on funktio $\omega:V\to K$ siten, että
$\omega(v_j)\neq \omega(v_k)$ jos $\{v_j,v_k\}\in E$
($[v_j,v_k]\in E$). Verkon
kromaattinen luku on pienin solmujen
väritykseen tarvittava värien lukumäärä.
Jos verkossa on ainakin yksi kaari niin kromaattinen
luku on vähintään $2$ ja jos verkossa on yksinkertainen
sykli jonka pituus on pariton, niin kromaattinen luku on
vähintään $3$.
Verkon $[V,E]$ aliverkko
on verkko $[V^*,E^*]$
siten, että $V^*\subseteq V$ ja $E^*\subseteq E$.
Yhtenäisen suuntaamattoman verkon [V,E]$ virittävä
puu on sen aliverkko $[V,E^*]$, joka on puu.
Esimerkki: Erityyppiset polut [+]
Alla oleva verkko on yksinkertainen ja yhtenäinen, eli mistään
solmusta ei ole kaari samaan solmuun ja
jokaisesta solmusta on polku jokaiseen toiseen solmuun.
Näytä esimerkkinä
Esimerkkejä: Puu, kaksijakoinen verkko ja
pariutus [+]
Ensimmäinen verkko (tai saman verkon ensimmäinen
yhtenäinen aliverkko) on puu ja toinen on
kaksijakoinen. Molemmissa verkoissa punaiset kaaret muodostavat
pariutuksen eikä näihin pariutuksiin voida lisätä yhtään kaarta
siten, että ne pysyvät pariutuksena.
Pari verkkoja koskevaa tulosta [+]
Verkko on kaksijakoinen jos ja vain jos sen
kromaattinen luku on korkeintaan 2.
Miksi? [+]
Jos kromaattinen luku on $0$ niin verkossa ei ole yhtään
solmua ja jos se on $1$ niin verkossa ei ole yhtään
kaarta joten näistä tapauksista ei tarvitse välittää.
Jos verkko $[X\cup Y,E]$ on kaksijakoinen niin voimme
värittää joukon $X$ solmut värillä $a$ ja joukon $Y$
solmut värillä $b$, josta seuraa, että kromaattinen
luku on korkeintaan $2$.
Jos kromaattinen luku on $2$ ja $\omega:V\to \{a,b\}$ on
solmujen väritys kahdella värillä niin voimme valita
$X=\set{v\in V\mid \omega(v)=a}$ ja $Y=\set{v\in V\mid
\omega(v)=b}$. Ehdosta $\{x,y\}\in E \to \omega(x)\neq
\omega (y)$ seuraa, nyt, että jos $\{x,y\}\in E$ eli
jos solmujen $x$ ja $y$ välillä on kaari, niin joko
$x\in X$ ja $y\in Y$ tai $x\in Y$ ja $y\in X$ josta
seuraa, että verkko on kaksijakoinen (koska
$\{x,y\}=\{y,x\}$).
Yhtenäisessä, yksinkertaisessa ja suuntaamattomassa
verkossa on Eulerin polku jos (ja vain jos) verkossa on
$0$ tai $2$ solmua, joilla on pariton määrä naapureita.
Miksi? [+]
Jos verkossa on Eulerin polku niin
verkon solmujen naapureita voimme laskea seuraavasti koska polussa
esiintyvät kaaret ovat erilaiset ja jokainen solmu esiintyy ainakin
kerran polussa: Jos solmu on polussa
ensimmäisenä tai viimeisenä niin lisäämme solmun
naapureiden lukumäärään
$1$ ja joka kerta kun solmu esiintyy muuten polussa lisäämme
naapureiden lukumäärään $2$. Tästä seuraa, että joko kyseessä on
Eulerin sykli jolloin kaikilla solmuilla on parillinen
määrä naapureita
tai sitten Eulerin polun ensimmäisellä ja viimeisellä solmulla on
pariton määrä naapureita ja muilla parillinen määrä.
Jos verkossa on kaksi solmua, joilla on pariton määrä
naapureita valitaan toinen niistä polun ensimmäiseksi solmuksi
$v_0$, muuten valitsemme polun ensimmäisen solmun
mielivaltaisesti. Sitten konstruoimme polun siten, että jos
polku $[v_0,\ldots,v_k]$ missä $k\geq 0$ on jo konstruoitu
niin mikäli on olemassa solmu $v_{k+1}$ siten, että
$\{v_k,v_{k+1}\}\in E$ mutta $\{v_k,v_{k+1}\}\notin
\set{\{v_{j-1},v_j\}\mid 1\leq j\leq k}$ niin uusi polku on
$[v_0,\ldots,v_k,v_{k+1}]$ ja muuten konstruktio on valmis
mutta tämä ei tarkoita, että olisimme saaneet aikaiseksi
Eulerin polun).
Tällä tavalla saamme alla olevassa verkossa esimerkiksi polun
$[2,3,6,8,7,5,8]$ (mutta tämä ei suinkaan ole ainoa
mahdollisuus):
Jos kaarien joukosta poistamme ne kaaret, joiden läpi olemme
jo käyneet polussa, niin jäljellä on verkko, joiden kaikilla
solmuilla on parillinen määrä naapureita. Ja jos jäljellä on
kaareja voimme näistä, samalla tavalla kuin edellä, muodostaa syklin,
jossa käymme saman kaaren läpi korkeintaan
kerran ja jonka lähtösolmu on jo konstruoidulla polulla.
Edellä olevassa esimerkissä saamme tällä tavalla syklin
$[2,1,3,5,6,4,2]$:
Tällaisen syklin voimme yhdistää jo aikaisemmin muodostettuun
polkuun niin, että saamme polun, joka edelleen täyttää ehdon, että
käymme jokaisen kaaren läpi korkeintaan kerran. Jos esimerkissä
yhdistämme polut solmun $2$ kohdalla
saamme polun $[2,1,3,5,6,4,2,3,6,8,7,5,8]$.
Näin voimme jatkaa kunnes kaareja ei enää ole
jäljellä ja silloin meillä on Eulerin polku.
Olkoon $[X\cup Y,E]$ kaksijakoinen (suuntaamaton) verkko, jonka
osat ovat $X$ ja $Y$. Silloin
on olemassa pariutus $M$ siten, että jokainen $x\in X$ on
jonkin $M$:n kaaren päätepiste eli $M$ on
ns. kaksijakoisen verkon täydellinen pariutus
jos ja vain jos
jokaisella $A\subseteq X$ pätee, että
$A$:n alkioiden lukumäärä
$\card{A}$ on
pienempi tai yhtäsuuri kuin $A$:n alkioiden naapureiden lukumäärä eli
$\card {A}\leq \card {n(A)}$ missä
$n(A)\!=\!\set{y\in Y\mid \{x,y\}\in E,\, x\in A}.$
Miksi? [+]
Jos $M$ on kaksijakoisen verkon täydellinen pariutus
niin
$\card{A}\leq \card{n(A)}$ kaikilla $A\subseteq X$ koska
$x\in A \mapsto y\in n(A)$ kun
$\{x,y\}\in M$ on injektio pariutuksen määritelmän nojalla.
Seuraavaksi osoitamme, että jos $\card{A}\leq
\card{n(A)}$ kaikilla $A\subset
X$ niin on olemassa kaksijakoisen verkon täydellinen
pariutus. Näin on varmasti jos
$\card{X}=1$ ja oletamme nyt, että väite pätee myös kun
$1\leq \card{X}\leq k$ ja $k\geq 1$.
Jos
$\card{X}=k+1$ niin valitsemme solmun $a\in X$ ja mikäli
mahdollista
valitsemme osajoukon $\hat X \subset
X\setminus \{a\}$ siten, että
$\card{n(\hat X)} = \card{\hat X}>0$.
Näin ollen meillä on kaksi tapausta riippuen siitä löytyykö tällainen
joukko vai onko niin, että $\card{n(\hat X)} \geq \card{\hat X}+1$
kaikilla $\hat X \subseteq X\setminus \{a\}$ joilla $\hat X\neq
\emptyset$.
Jos pystymme
osoittamaan, että molemmissa tapauksissa löytyy kaksijakoisen
verkon täydellinen pariutus,
niin väite seuraa induktioperiaatteen nojalla.
Jos $\card{n(\hat X)} = \card{\hat X}>0$ ja
$\hat X
\subset
X\setminus \{a\}$ niin induktio-oletuksen nojalla on olemassa
kaksijakoisen verkon täydellinen pariutus $M_1$ verkossa
$G_1=[\hat X\cup n(\hat
X),\hat E]$ missä $\hat E= \set{\{x,y\}\in E\mid x\in \hat
X}$. Mutta oletus "$\card{A}\leq \card{n(A)}$ kaikilla
$A\subseteq X$" pätee myös verkossa
koska jos tämä ehto ei ole
voimassa jollakin joukolla $A\subseteq X\setminus \hat X$
niin se ei voi
olla voimassa verkossa $G$ joukolla $A\cup \hat X$ koska $\card{n(\hat
X)}=\card{\hat X}$. Induktio-oletuksesta seuraa taas, että verkossa
$G_2$ on täydellinen pariutus $M_2$ ja $M_1\cup M_2$ on täydellinen
pariutus verkossa $G$.
Oletamme seuraavaksi, että $\card{n(\hat X)} \geq
\card{\hat X}+1$
kaikilla $\hat X \subseteq X\setminus \{a\}$ joilla $\hat X\neq
\emptyset$. Koska $1= \card{\{a\}} \leq \card{n(\{a\})}$
niin löytyy $b\in Y$
siten, että $\{a,b\}\in E$ ja voimme valita $M_1=\{\{a,b\}\}$. Ehto
"$\card{A}\leq \card{n(A)}$ kaikilla $A\subseteq X$" on voimassa
verkossa
koska korkeintaan yksi naapuri on
poistettu. Induktio-oletuksen nojalla verkossa $G_2$ on
kaksijakoisen verkon
täydellinen pariutus $M_2$ ja $M_1\cup M_2$ on
kaksijakoisen verkon $G$ täydellinen pariutus.
Naapurimatriisi [-]
Jos $[V,E]$ on verkko, jossa on $m$ solmua
$V=\{v_1,\ldots v_m\}$ niin sen naapurimatriisi
on $m\times m$-matriisi
\[
A(j,k)=\begin{cases} 1,& \{v_j,v_k\}\in E,\quad
{\small \text{( $[v_j,v_k]\in
E$)}},\\
0 ,& \{v_j,v_k\}\notin E,\quad {\small\text{($[v_j,v_k]\notin
E$)}}.\end{cases}
\]
Jos $n\geq 1$ niin $(A^n)(j,k)$ on $n$-pituisten polkujen lukumäärä
solmusta $v_j$ solmuun $v_k$.
Suuntaamattoman verkon naapurimatriisi on symmetrinen eli
$A=A^{\textrm{T}}$.
Verkko on yksinkertainen jos ja vain
jokainen naapurimatriisin
lävistäjäalkio on $0$.
voimme kirjoittaa A=[0,1,1,0,0; 1,0,1,0,0; 1,1,0,1,1; 0,0,1,0,1; 0,0,1,1,0]
tai
A=[0 1 1 0 0; 1 0 1 0 0; 1 1 0 1 1; 0 0 1 0 1; 0 0 1 1 0]
ja matriisit $A^2$ sekä $A^3$ voimme laskea
komennoilla A^2 ja A^3.
Huom! [+]
Jos verkon kaareille annetaan numeroarvoja eli määritellään
funktio $w:E\to \R$, esimerkiksi
kuvaamaan solmujen välisiä "etäisyyksiä" niin kannattaa vaihtaa
$A$:n määritelmäksi
$A(j,k)=w(\{v_j,v_k\})$ jos $\{v_j,v_k\}\in E$ ja esimerkiksi
$+\infty$ muuten eli yleistetyn ''naapurimatriisin''
alkioiksi voidaan
$1$:n ja $0$:n sijasta
ottaa melkein mitä vaan.
Isomorfiset verkot [-]
Verkot $[V,E]$ ja $[V',E']$ ovat isomorfiset jos on olemassa bijektio
$\psi: V\to V'$ siten, että $\{\psi(a),\psi(b)\}\in E' \leftrightarrow
\{a,b\}\in E$ (ja suunnatussa tapauksessa
$[\psi(a),\psi(b)]\in E' \leftrightarrow
[a,b]\in E$) eli ''naapurit kuvautuvat
naapureille''.
Esimerkki: Isomorfiset verkot?
[+]
Ovatko alla olevat verkot isomorfiset?
Vastaus [+]
Molemmissa verkoissa on $4$ solmua, joilla
on $3$ naapuria ja $2$ joilla on $2$ naapuria, mutta tästä emme
voi päätellä etteivät verkot olisivat isomorfiset. Sensijaan
vasemmanpuoleisessa verkossa ei ole yhtään sykliä, jonka pituus
olisi $3$ mutta sellaisia on oikeanpuoleisessa verkossa. Tästä
seuraa, etteivät verkot voi olla isomorfiset.
Entä alla olevat verkot?
Vastaus [+]
Molemmissa verkoissa on kaksi solmua, joilla on kolme
naapuria, eli solmut $2$ ja $4$ ja solmut $c$ ja $e$. Jos verkot ovat
isomorfiset niin isomorfismi voisi olla sellainen, että $\psi(2)=c$
ja $\psi(4)=e$ (tai päinvastoin). Koska solmu $1$ on sekä solmun $2$
ja solmun $4$ naapuri ja samoin solmu $d$ on sekä solmun $c$ että
solmun $e$ naapuri täytyy olla $\psi(1)=d$. Jäljellä olevista
solmuista solmu $3$ on solmun $2$ muttei solmun $4$ naapuri ja solmu
$b$ on solmun $c$ muttei solmun $e$ naapuri, joten $\psi(3)=b$
jolloin täytyy olla $\psi(5)=a$. Näin määritelty funktio $\psi$ on
isomorfismi ja verkot ovat isomorfiset.
Esimerkki: Montako suuntaamatonta,
ei-isomorfista verkkoa löytyy, joissa on $3$ solmua
ja $4$ kaarta? [+]
Jos vaadimme, että verkko on yksinkertainen niin ei
löydy yhtään koska yksinkertaisessa verkossa, jossa on $3$ solmua on
korkeintaan $3$ kaarta.
Naapurimatriisissa
on $3$ riviä ja saraketta ja koska verkko on suuntaamaton niin tämä
matriisi on symmetrinen, eli tiedämme mikä se on jos tunnemme alkiot
rivillä $i$ ja sarakkeella $j$ kun $1\leq i\leq j\leq 3$. Koska
verkossa on $4$ kaarta niin $4$ näistä $6$:sta alkiosta ovat $1$ ja
muut $0$. Näin ollen vaihtoehtojen lukumäärä on $\binom 64=
15$ mutta osa näistä verkoista ovat tietenkin isomorfisia
keskenään.
Koska kysymys on ei-isomorfisten verkkojen
lukumäärästä, niin voimme tehdä kaikista vaihtoehdoista
luettelon:
Ensiksi toteamme kuten edellä että ainakin yksi solmu on oma
naapurinsa joten meillä on vaihtoehdot että $1$, $2$ tai $3$
solmua ovat oma naapurinsa. Ensimmäisessä vaihtoehdossa eri solmujen
välillä on oltava $3$ kaarta, toisessa $2$ kaarta ja viimeisessä
$1$ kaari.
Jos $1$ tai $3$ solmua ovat oma naapurinsa niin molemmissa
tapauksissa meillä on vain
yksi vaihtoehto ja ne ovat
Jos $2$ solmua ovat oma naapurinsa niin meillä on
kaksi ei-isomorfista verkkoa ja ne ovat:
Näin ollen on olemassa $4$ ei-isomorfista verkkoa,
joissa on $3$ solmua ja $4$ kaarta.
Entä miten tämä kysymys ratkaistaan Pólyan lauseen avulla?
Vastaus [+]
Jos solmujen joukko on $\{1,2,3\}$ niin tämän joukon
permutaatiot ovat $(1)$, $(1\; 2)$, $(1\; 3)$, $(2\; 3)$, $(1\;2\;3)$
ja $(1\;3\;2)$.
Jotta voimme nähdä miten solmujen permutaatiot
toimivat verkoilla esitämme verkot naapurimatriiseina missä emme
välitä lävistäjän alapuolella olevista alkioista: $\begin{bmatrix} a
& b &c \\ & d & e \\ & & f\end{bmatrix}$.
Lisäksi näemme, että verkko jossa on $4$ kaarta on
tällaisen matriisin
''väritys'' ykkösillä ja nollilla siten, että neljästä alkiosta
tehdään $1$ ja kahdesta $0$.
Vaatimus, että naapurit pysyvät naapureina antaa
homomorfismin $\psi$ solmujen permutaatioista joukon $\{a,b,c,d,e,f\}$
permutaatioden ryhmään ja tämä homomorfismi on seuraava:
\begin{align*}
\psi((1))&=(a),\\ \psi((1\; 2))&= (a\;d)(c\;e),\\
\psi((1\;3))&=
(a\;f)(b\; e)),\\
\psi((2\; 3)&=(d\; f)(b\; c),\\
\psi((1\;2\;3))&=(a\;d\;f)(b\;e\;c),\\
\psi((1\;3\;2))&=(a\;f\;d)(b\;c\;e).
\end{align*}
Pólyan lauseen mukaan termin $y^4n^2$
kerroin lauseekkeessa
on ei-isomorfisten verkkojen, joissa on
$3$ solmua ja $4$ kaarta, lukumäärä
ja tämä kerroin on
 
Ahne väritysalgoritmi [-]
Yksinkertainen, mutta ei välttämättä optimaalinen tapa solmujen
värityksen löytämiseksi on seuraava ahne
algoritmi:
Aseta solmut johonkin järjestykseen:
$[v_1,v_2,\ldots,v_n]$.
Aseta värit johonkin järjestykseen:
$[c_1,c_2,\ldots,c_r]$.
Väritä ensimmäinen solmu ensimmäisellä värillä,
eli $\omega(v_1)=c_1$.
Jos solmut $v_1,\ldots ,v_k$ on väritetty niin väritä
solmu $v_{k+1}$ ensimmäisellä käytettävissä olevalla
värillä siten, että ehto ettei naapureita väritetä samalla
värillä toteutuu, eli $\omega(v_{k+1}) = c_j$ missä
Riippuen valitusta solmujen järjestyksestä tämä algoritmi
voi käyttää enemmän värejä kuin kromaattisen luvun mukainen
minimimäärä, mutta on aina mahdollista valita järjestys siten
että minimi saavutetaan.
Miksi ? [+]
Tämä väite, että on mahdollista valita järjestys siten
että minimi saavutetaan, pätee jos $\card{V}=1$.
Oletamme seuraavaksi, että väite pätee verkon solmujen
lukumäärä on korkeintaan $k$
ja olkoon $[V,E]$ verkko missä
$\card{V}=k+1$ ja tämän verkon kromaattinen luku on
$m\geq 1$.
Jos $m=1$ niin $\card{E}=0$ ja ahne väritysalgoritmi käyttää
aina myös
vain yhden värin.
Jos $m>1$ niin on olemassa solmujen väritys, joka käyttää
$m$ väriä, eli funktio $\omega:V\to \{c_1,c_2, \ldots, c_m\}$
siten, että $\set{v\in V\mid \omega(v)=c_j}\neq \emptyset$
kaikilla $j=1,2\ldots,m$ (ja $\omega(v)\neq \omega(v')$ jos
$\{v,v'\}\in E$). Nyt muodostamme aliverkon $[V^*,E^*]$
siten, että $V^*=\set{v\in V\mid \omega(v)\neq c_m}$ ja
$E^*\!=\!\set{\!\{v,v'\}\!\in\! E\!\mid\! \omega(v)\neq c_m,
\omega(v')\neq c_n}.$
Nyt $\card{V^*}\leq k$ ja ja verkon $[V^*,E^*]$ kromaattinen
luku on korkeintaan $m-1$. Induktio-oletuksen nojalla voimme
järjestää verkon $[V^*,E^*]$
solmut siten, että ahne väritysalgoritmi käyttää tähän
verkkoon korkeintaan $m-1$
väriä. Joukon $V\setminus
V^*$ solmut eivät ole toistensa naapureita joten jos
lisäämme joukon $V^*$ solmujen jonon loppuun joukon $V\setminus
V^*$ solmut mielivaltaisessa järjestyksessä niin silloin ahne
väritysalgoritmi käyttää (korkeintaan, mutta kromaattisen
luvun takia täsmälleen) $m$ väriä verkon $[V,E]$ solmujen
vätittämiseen.
Induktioperiaatteen nojalla väite, että on mahdollista
valita solmujen järjestys siten
että minimi saavutetaan ahneen väritysalgoritmin avulla pätee
siis aina kun $\card{V}<\infty$.
Esimerkki: Ahne väritys [+]
Tehtävänä on määrittää jokin alla olevan verkon solmujen väritys:
Ahneen väritysalgoritmin mukaisesti toimimme seuraavalla tavalla:
Järjestämme solmut ja värit jollain tavalla ja käymme läpi solmut
järjestyksessä ja annamme jokaiselle solmulle ensimmäisen mahdollisen
värin joka siis ei ole sama kuin sen jollekin naapurille jo
annettu väri. Tässä tapauksessa värien järjestykseksi otetaan
punainen, sininen, vihreä, keltainen.
Koska jokaisella solmulla tässä verkossa on kolme naapuria niin
ahne väritysalgoritmi käyttää korkeintaan neljä väriä. Toisaalta,
koska verkossa on kaareja, niin kromaattinen luku on vähintään
$2$.
Riippuen valitusta solmujen järjestyksesestä
ahne väritysalgoritmi
käyttää joko $2$, $3$ tai $4$ väriä:
Dynaaminen optimointi ja verkot [-]
Olkoon $[V,E]$ yksinkertainen ja yhtenäinen
(suuntaamaton) verkko, jossa jokaiselle
kaarelle $\{v_j,v_k\}$ on annettu paino
$w(\{v_j,v_k\})\geq 0$ (ja $w(\{v_j,v_k\})=\infty$ jos
$\{v_j,v_k\}\notin E$). Jos tehtävänä on löytää
polku $[v_0,v_1,\ldots,v_n]$ tietystä solmusta
$v_0$ johonkin toiseen solmuun $v_n$ siten, että $\sum_{j=1}^n
w(\{v_{j-1},v_j\})$ on mahdollisimman pieni voidaan menetellä
seuraavalla tavalla:
Huomaa, että funktio $s$ toteuttaa dynaamisen
optimoinnin periaatetta:
$\displaystyle
s(v) = \min_{v'\in V}(s(v')+w(\{v',v\})$.
Määritä optimaliset arvot $s(v)$ seuraavalla tavalla:
Valitse $V_0=\{v_0\}$ ja $s(v_0)=0$.
Jos optimaaliset arvot $s(v)$ on määritetty
kun $v\in V_j$ niin laske $V_j$:n solmujen
naapureille
testiarvot $t(v)=\min_{v'\in V_j}(s(v')+w(\{v',v\})$,
$v\in V\setminus V_j$.
Valitse $V_{j+1}=V_j\cup \{v\}$ ja $s(v)=t(v)$ jos $v\in
V\setminus V_j$ ja
$t(v)= \min_{v'\in V\setminus V_j} t(v')$.
Miksi dynaaminen optimointi toimii kun haemme
"minimietäisyyksiä"? [+]
Määrittelemme funktion $s$ kaavalla $ s(v)= \min\{\sum_{j=1}^k
w(\{v_{j-1},v_j\}\mid
[ v_0, v_1,\ldots,v_k]$ on polku solmusta
$ v_0$ solmuun $ v_k=v\}$
kun $v\neq v_0$ ja $s(v_0)=0$.
Valitsemme $V_0=\{v_0\}$,
$V_{-1}=\emptyset$ ja
määrittelemme testiarvot
$t_0(v)=\infty$ kaikilla $v\in V\setminus \{v_0\}$. Jos $j\geq
0$ ja tunnemme funktion $s$ arvot
joukon $V_j$ solmuissa ja testifunktion $t_j(v)=\min_{v'\in
V_{j-1}}(s(v')+w(\{v',v\})$ arvot
kaikissa muissa solmuissa niin meidän pitää laskea uusi
testifunktio ja lisätä
joukkoon $V_{j}$ seuraava piste.
Koska määrittelemme
$t_{j+1}(v)=\min_{v'\in
V_j}(s(v')+w(\{v',v\})$, $v\in V\setminus V_j$, niin
$t_{j+1}(v)=t_j(v)$ jos $v$ ei ole viimeksi lisätyn solmun $v_j$
naapuri joten meidän täytyy ainoastaan laskea $t_{j+1}(v)=
\min\{t_j(v),s(v_j)+ w(\{v_j,v\})\}$ kun $v\in V\setminus V_j$
on $v_j$:n naapuri. Sitten valitsemme solmun $v_{j+1}$ joukosta
$V\setminus V_j$ siten että $t_{j+1}(v_{j+1}) = \min_{v\in
V\setminus V_j} t_{j+1}(v)$.
Nyt joko $s(v_{j+1})= t_{j+1}(v_{j+1})$ ja induktioaskel toimii tai
$s(v_{j+1}) < t_{j+1}(v_{j+1})$ ja meidän pitää osoittaa, että
jälkimmäinen vaihtoehto johtaa ristiriitaan.
Jos $s(v_{j+1}) < t_{j+1}(v_{j+1})$ niin on olemassa polku
$[\tilde v_0,\tilde v_1, \ldots ,\tilde v_k]$ siten että $\tilde
v_0=v_0$, $\tilde v_k=v_{j+1}$ ja $\sum_{i=1}^{k}
w(\{\tilde v_{i-1},\tilde v_i\}) < t_{j+1}(v_{j+1})$.
Silloin on olemassa suurin indeksi $i_0 < k$ siten, että
$\tilde v_{i_0} \in V_j$ jolloin siis $\tilde v_{i_0+1}\in
V\setminus V_j$ ja funktion $t_{j+1}$ määritelmästä ja oletuksesta
$w(e)\geq 0$ seuraa, että
joka on ristiriita. Näin ollen $s(v_{j+1}) = t_{j+1}(v_{j+1})$,
voimme valita $V_{j+1}= V_j\cup\{v_{j+1}\}$ ja induktio toimii.
Huomaa, että tässä päättelyssä on oleellista, että $w(e)\geq 0$
kaikilla $e\in E$.
Miten hankalaa on "minimietäisyyksien"
löytäminen verkossa? [+]
Oletamme, että $G=[V,E]$ on yhtenäinen verkko, jossa jokaiselle
kaarelle $e\in E$ on annettu paino $w(e)\geq 0$
(ja $w(\{v_j,v_k\})=\infty$ jos
$\{v_j,v_k\}\notin E$) ja tehtävänä on löytää polku $[v_0,v_1,\ldots,v_k]$
kahden annetun solmun $v_*$ ja $v_{**}$ välillä siten, että $\sum_{j=1}^k
w(\{v_{j-1},v_j\})$ on mahdollisimman pieni.
Jos $\card{V}=n$ ja kaikkien solmujen välillä on kaari
niin on olemassa $\sum_{j=2}^n\frac {(n-2)!}{(n-j)!} \geq (n-2)!$ eri
vaihtoehtoa mutta yleensä vaihtoehtojen lukumäärä on kuitenkin paljon
pienempi.
Jos käytämme dynaamista optimointia ja olemme
laskeneet optimiarvon $j$:hen solmuun niin meidän
pitää laskea korkeintaan $n-j$ uutta testiarvoa
käyttäen korkeintaan $(n-j)$
yhteenlaskua ja yhtä monta vertailua ja sitten
valita pienin mikä
vaatii korkeintaan $n-j-1$ vertailua.
Näin ollen meidän pitää laskea korkeintaan
$ \sum_{j=1}^{n-1}(n-j)= \tfrac 12 n(n-1)$ yhteenlaskua ja tehdä
$\sum_{j=1}^{n-1}(n-j+n-j-1)= (n-1)^2$ vertailua. Yhteenlaskujen ja
vertailujen lukumäärät ovat siis joukossa $O(n^2)$.
Minimaalinen virittävä puu [-]
Minimaalinen virittävä puu,
ahne algoritmi I (Prim) [+]
Jos $[V,E]$ on yksinkertainen ja yhtenäinen (suuntaamaton)
verkko ja jokaiselle kaarelle $\{v_j,v_k\}$
on annettu paino $w(\{v_j,v_k\})$ (ja
$w(\{v_j,v_k\})=\infty$ jos $\{v_j,v_k\}\notin E$)
niin minimaalinen virittävä puu on verkko
$[V,E_T]$ missä $E_T\subseteq E$ (eli aliverkko) joka on puu ja
sellainen, että $\sum_{\{v_j,v_k\}\in E_T}w(\{v_j,v_k\})$
on mahdollisimman pieni.
Minimaalinen virittävä puu voidaan konstruoida
esimerkiksi seuraavalla ahneella algoritmilla:
Valitse $T_1=[\{v_1\},\emptyset]$ missä $v_1$
on $V$:n mielivaltainen alkio.
Jos $T_{m} =[V_m,E_m]$ on valittu ja $V_m\neq V$
niin valitse $v_j\in V_{m}$ ja $v_k\in V\setminus V_m$
siten, että $w(\{v_j,v_k\})$ on mahdollisimman pieni jolloin
$T_{m+1}=[V_{m}\cup\{v_k\},E_m\cup\{\{v_j,v_k\}\}]$, eli
verkon $T_m$ solmuihin lisätään solmu $v_k$ ja
kaareihin solmujen $v_j$ ja $v_k$ välinen kaari.
Miksi tämä algoritmi antaa optimin? [+]
Olkoon $[V,E]$ yksinkertainen ja yhtenäinen verkko, jossa
jokaiselle kaarelle
$\{v_j,v_k\}$ on annettu paino $w(\{v_j,v_k\})$ ja $T_*=[V,E_*]$
on puu siten, että $w(T_*)=\sum_{e\in E_*} w(e)$ on mahdollisimman
pieni.
Jos $E_*=E_n$ niin tämä algoritmi on
optimaalinen ja jos $E_*\neq E_n$ niin on olemassa suurin luku $m$,
$1\leq m < n$ siten, että $E_m\subseteq E_*$.
Olkoon
$\{x,y\}\in E_{m+1}\setminus E_m$ missä $x\in V_m$ ja $y\in
V_{m+1}\setminus V_m$ jolloin siis $\{x,y\}\notin E_*$.
On olemassa polku
verkossa $T_*$ solmusta $x$ solmuun $y$ (koska $T_*$ on puu). Tähän polkuun sisältyy kaari $\{a,b\}$ siten,
että $a\in
V_m$ ja $b\in V\setminus V_{m}$. Jos nyt vaihdamme $T_*$:n kaaren
$\{a,b\}$ kaareksi
$\{x,y\}$ niin uusi verkko $T_{**}$ on myös puu.
Lisäksi algoritmin mukainen
$\{x,y\}$:n valinta takaa että $w(T_{**})\leq w(T_*)$.
Tästä seuraa, että meillä on optimaalinen puu
$T_{**}=[V,E_{**}]$ siten, että
$E_{m+1}\subset
E_{**}$. Koska voimme tarvittaessa toistaa edellistä päättelyä
niin voimme osoittaa,
että $T_n$ on verkon $[V,E]$ optimaalinen virittävä puu.
Minimaalinen virittävä puu,
ahne algoritmi II (Kruskal) [+]
Jos $[V,E]$ on yksinkertainen ja yhtenäinen
(suuntaamaton)
verkko ja jokaiselle kaarelle $\{v_j,v_k\}$
on annettu paino $w(\{v_j,v_k\})$ (ja
$w(\{v_j,v_k\})=\infty$ jos
$\{v_j,v_k\}\notin E$) niin minimaalinen virittävä puu
voidaan konstruoida myös seuraavalla ahneella algoritmilla:
Valitse $E_1=\emptyset$.
Jos $m\geq 1$ ja $[V,E_m]$ ei ole
puu niin valitse $e\in E\setminus E_m$
siten, että $w(e)$ on mahdollisimman
pieni ja verkko $[V,E_{m+1}]$, missä
$E_{m+1}=E_m\cup \{e\}$, on
metsä.
Miksi tämäkin algoritmi antaa optimin?
[+]
Olkoon $[V,E]$ on yksinkertainen ja yhtenäinen verkko, jossa jokaiselle
kaarelle $\{v_j,v_k\}$
on annettu paino $w(\{v_j,v_k\})$ ja $T_*=[V,E_*]$
on puu siten, että $w(T_*)=\sum_{e\in E_*} w(e)$ on
mahdollisimman
pieni.
Kruskalin ahneella algoritmilla konstruoimme metsät
$F_j=[V,E_j]$, $j=1,\ldots, n$. Jos $F_n$ ei ole puu niin on
olemassa solmut $a$
ja $b$ niin ettei niiden välillä ole polku verkossa $F_n$. Mutta
verkossa $[V,E]$ on olemassa polku $[v_0,v_1,\ldots,v_k]$ missä
$v_0=a$ ja $v_k=b$. Olkoon $j$
pienin luku, siten, että solmujen $v_{j-1}$ ja $v_j$ välillä ei ole
polku verkossa $F_n$ eikä erityisesti $\{v_{j-1},v_j\}\in
E_n$. (Jos sellainen pari ei löydy niin solmujen $a$
ja $b$ välillä on polku.) Nyt voimme lisätä kaaren $\{v_{j-1},v_j\}$
joukkoon $E_n$ siten että $[V,E_n\cup\{\{v_{j-1},v_j\}\}$ edelleen on
metsä koska muuten solmujen $v_{j-1}$ ja $v_j$ välillä olisi jo
kaari verkossa $F_n$. Näin ollen algoritmi antaa varmasti tulokseksi puun.
Jos $E_*=E_{n}$ niin tämä algoritmi on
optimaalinen ja jos $E_*\neq E_n$ niin on olemassa suurin luku $m$,
$1\leq m < n$ siten, että $E_m\subseteq E_*$ jolloin siis
$\{x,y\}\notin E_*$ jos $\{x,y\}\in
E_{m+1}\setminus E_m$.
Puussa $T_*$ on polku solmusta $x$ solmuun $y$.
Koska $F_n$ on puu ja $\{x,y\}\notin E_*$ niin tähän polkuun
sisältyy kaari $\{a,b\}$ siten, että
$\{a,b\}\notin E_n$. Jos $E_{**}= (E_{*}\cup\{x,y\})\setminus
\{a,b\}$ niin $[V,E_{**}]$ on myös puu ja koska $T_*$ on
optimaalinen niin pätee $w(\{x,y\})\geq w(\{a,b\})$. Koska
otimme kaaren $\{x,y\}$ mukaan joukkoon $E_{m+1}$, vaikka $\{a,b\}$
olisi ollut mahdollinen valinta koska $E_m\cup\{\{a,b\}\} \subseteq E_*$
josta seuraa, että myös $[V,E_m\cup\{\{a,b\}\}]$ on metsä, niin täytyy olla
$w(\{x,y\})= w(\{a,b\})$ eli $T_{**}$ on myös optimaalinen
puu ja $E_{m+1} \subseteq
E_{**}$. Koska voimme tarvittaessa toistaa edellistä päättelyä
niin voimme osoittaa, että $F_n$ on verkon $[V,E]$
minimaalinen virittävä puu.