31.01.2015 Views

Luento 9 - Verkot eli graafit

Luento 9 - Verkot eli graafit

Luento 9 - Verkot eli graafit

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

A274101 TIETORAKENTEET<br />

JA ALGORITMIT<br />

VERKOT ELI GRAAFIT<br />

Lähteet:<br />

Timo Harju, Opintomoniste<br />

Keijo Ruohonen, Graafiteoria (math.tut.fi/~ruohonen/GT.pdf)<br />

HISTORIAA<br />

<br />

<br />

<br />

<br />

<br />

<br />

Verkko- <strong>eli</strong> <strong>graafit</strong>eorian historia on saanut<br />

alkunsa Eulerin työstä v.1736<br />

Königsbergin (nyk. Kaliningrad) sillat:<br />

http://en.wikipedia.org/wiki/Seven_bridges_of_K%C3%B6nigsberg<br />

Kaupungin läpi virtaa joki, jossa on kaksi saarta<br />

Saaret on yhdistetty rantoihin 7 sillalla<br />

Voiko rannalta lähteä tietystä pisteestä, kulkea<br />

täsmälleen kerran jokaisen sillan yli ja palata<br />

lähtöpaikkaansa<br />

Euler ratkaisi ongelman 1736 ja kehitti samalla<br />

perustan verkkojen <strong>eli</strong> graafien teorialle<br />

8.11.2005 KyAMK - TiRak, syksy 2005 2<br />

HISTORIAA<br />

KÖNIGSBERGIN SILLAT -<br />

RATKAISU<br />

Yksinkertaistetaan kuvaa hieman<br />

N<br />

N<br />

K<br />

O<br />

K<br />

O<br />

S<br />

S<br />

8.11.2005 KyAMK - TiRak, syksy 2005 3<br />

8.11.2005 KyAMK - TiRak, syksy 2005 4


KÖNIGSBERGIN SILLAT -<br />

RATKAISU<br />

MÄÄRITELMIÄ<br />

Kaikista neljästä solmusta lähtee pariton<br />

määrä kaaria<br />

Oletetaan, että seurataan viivoja<br />

nostamatta kynää<br />

Valitaan yksi solmu tarkasteltavaksi –<br />

otetaan joku, josta lähtee 3 kaarta<br />

Kun 1. kerran saavut tähän solmuun, voit<br />

lähteä toista kaarta pitkin pois<br />

Tämän jälkeen solmuun voi vain saapua<br />

kerran<br />

Piirtäminen pitää päättää tähän solmuun<br />

Toinen vaihtoehto on aloittaa tästä<br />

solmusta, jolloin siinä voi vielä kerran<br />

käydä<br />

Solmu, josta lähtee pariton määrä kaaria<br />

voi ainoastaan aloittaa tai päättää ”reitin”<br />

K<br />

N<br />

S<br />

O<br />

Graafi koostuu pisteistä <strong>eli</strong><br />

solmuista (vertex) ja niitä<br />

yhdistävistä kaarista <strong>eli</strong> viivoista<br />

(edge)<br />

Formaalisti:<br />

Graafi (graph) on pari (V,E),<br />

missä V on pisteiden joukko ja E<br />

on pisteparien muodostama<br />

viivojen joukko.<br />

v 1<br />

v 2<br />

v 4<br />

v 3<br />

8.11.2005 KyAMK - TiRak, syksy 2005 5<br />

8.11.2005 KyAMK - TiRak, syksy 2005 6<br />

MÄÄRITELMIÄ<br />

MÄÄRITELMIÄ<br />

Viivat ovat pistepareja (u, v) = (v, u)<br />

Pisteet u ja v ovat viivan (u, v)<br />

päätepisteet<br />

Suunnatuilla graafeilla (u, v) ≠ (v, u)<br />

<strong>eli</strong> pisteparien järjestyksellä on<br />

merkitystä<br />

Solmujen lukumäärää merkitään<br />

|V|:llä ja viivojen määrää |E|:llä<br />

Viivoja voidaan merkitä myös E =<br />

{e 1 , e 2 , …, e n }<br />

v 2<br />

e 1<br />

e 2<br />

e 3<br />

e 4<br />

v 1<br />

v 3<br />

v 4<br />

<br />

<br />

<br />

<br />

<br />

<br />

Viivat voivat olla myös painotettuja:<br />

(u, v, c), missä c on paino<br />

Viivat, joilla on samat päätepisteet,<br />

ovat rinnakkaiset<br />

Viiva (v, v) on ns. silmukka<br />

Pisteet u ja v, joita yhdistää viiva<br />

ovat rinnakkaiset<br />

Pisteen v aste, merkitään d(v), on<br />

niiden viivojen lukumäärä, joiden<br />

päätepiste v on<br />

Piste, jonka aste on 1 on ns.<br />

loppupiste<br />

e 5<br />

e 6<br />

e 7<br />

8.11.2005 KyAMK - TiRak, syksy 2005 8<br />

v 2<br />

e 1<br />

e 2<br />

e 3<br />

e 4<br />

v 1<br />

v 3<br />

e 5<br />

e 6<br />

e 7<br />

v 4<br />

8.11.2005 KyAMK - TiRak, syksy 2005 7


MÄÄRITELMIÄ<br />

MÄÄRITELMIÄ<br />

<br />

<br />

<br />

<br />

<br />

Graafi, jossa ei ole lainkaan viivoja<br />

on tyhjä<br />

Graafi, jossa ei ole lainkaan pisteitä,<br />

on ns. nollagraafi<br />

Graafi, jossa on vain yksi piste, on<br />

triviaali<br />

Graafi on yksinkertainen, jos siinä ei<br />

ole rinnakkaisia viivoja, eikä<br />

silmukoita<br />

Graafi on yhtenäinen, jos sen<br />

jokaisesta pisteestä voidaan kulkea<br />

jokaiseen toiseen pisteeseen<br />

v 2<br />

e 1<br />

e 2<br />

e 3<br />

e 4<br />

v 1<br />

v 3<br />

v 4<br />

<br />

<br />

<br />

<br />

<br />

Graafissa G = (V, E) oleva pisteiden<br />

ja viivojen jono<br />

(v i0 ,e j0 ,v i1 ,e j1 ,v i2 ,…,e jk ,v ik ) on kulku,<br />

jos viivat (v i1 ,v i2 ), (v i2 ,v i3 ),…,(v i(k-<br />

1),v ik ) ∈ E<br />

Kulun pituus on k, v i0 on kulun<br />

alkupiste ja v ik kulun loppupiste<br />

Kulussa saavat samat pisteet ja<br />

viivat esiintyä useitakin kertoja<br />

Kulku on reitti, jos mikään viiva ei<br />

esiinny useita kertoja<br />

Reitti on polku, jos mikään piste ei<br />

esiinny kahta kertaa, päätepisteitä<br />

lukuun ottamatta<br />

e 5<br />

e 6<br />

e 7<br />

8.11.2005 KyAMK - TiRak, syksy 2005 10<br />

v 2<br />

e 1<br />

e 2<br />

e 3<br />

e 4<br />

v 1<br />

v 3<br />

e 5<br />

e 6<br />

e 7<br />

v 4<br />

8.11.2005 KyAMK - TiRak, syksy 2005 9<br />

MÄÄRITELMIÄ<br />

EULERIN POLKU JA HAMILTONIN<br />

PIIRI<br />

<br />

<br />

<br />

<br />

<br />

Polku, jonka alku- ja päätepiste ovat<br />

samat, on piiri<br />

Huom. myös polku (v, v) on piiri,<br />

jonka pituus on 1 ja sitä sanotaan<br />

silmukaksi<br />

Graafin pisteet u ja v ovat<br />

yhdistetyt, jos on olemassa u-vkulku<br />

Jos pisteet u ja v ovat yhdistetyt<br />

sekä pisteet v ja w ovat yhdistetyt,<br />

niin myös u ja w ovat yhdistetyt<br />

Toisin sanoen jos graafissa on u-vkulku<br />

sekä v-w-kulku, niin siinä on<br />

myös u-w-kulku<br />

v 2<br />

e 1<br />

e 2<br />

e 3<br />

e 4<br />

v 1<br />

v 3<br />

v 4<br />

<br />

<br />

<br />

<br />

Eulerin ”polku” (Euler path) – kulkee<br />

jokaisen viivan kautta täsmälleen<br />

kerran<br />

Graafissa, jossa on Eulerin polku voi<br />

olla korkeintaan kaksi pistettä, joista<br />

lähtee pariton määrä viivoja<br />

Lisäksi tällaisessa graafissa on aina<br />

vähintään yksi Eulerin polku<br />

Hamiltonin piiri kulkee jokaisen<br />

pisteen kautta ainoastaan kerran ja<br />

sen alku- ja loppupisteet ovat samat<br />

e 5<br />

e 6<br />

e 7<br />

8.11.2005 KyAMK - TiRak, syksy 2005 12<br />

v 2<br />

e 1<br />

e 2<br />

e 3<br />

v 1<br />

v 4<br />

e 4<br />

v 3<br />

e 5<br />

e 6<br />

e 7<br />

8.11.2005 KyAMK - TiRak, syksy 2005 11


SUUNNATUT GRAAFIT<br />

KÄYTÄNNÖN SOVELLUKSIA<br />

<br />

<br />

<br />

<br />

<br />

<br />

Suunnattu graafi on vahvasti yhtenäinen (strongly<br />

connected), jos sen jokaisesta pisteestä on polku<br />

kaikkiin muihin pisteisiin<br />

Suunnattu graafi on heikosti yhtenäinen (weakly<br />

connected), jos se ei ole vahvasti yhtenäinen<br />

mutta olisi suuntaamattomana yhtenäinen<br />

Suunnatun graafin pisteen v tuloaste (in-degree)<br />

on v:hen päättyvien viivojen (u, v) lukumäärä<br />

Solmun v lähtöaste (out-degree) on puolestaan<br />

v:stä lähtevien viivojen (v, w) lukumäärä<br />

Suunnatun graafin suunnattua piiriä sanotaan<br />

sykliksi (cycle)<br />

Suunnattu graafi on syklitön (acyclic), jos siinä ei<br />

ole yhtään sykliä, muutoin syklinen (cyclic)<br />

Useimmat käytännön ongelmia mallintavat <strong>graafit</strong><br />

ovat painotettuja. Useimmiten ne lisäksi ovat<br />

suunnattuja, mutta eivät aina.<br />

Lentokenttäverkko<br />

Solmu (u, v, c): u on lähtökenttä, v on tulokenttä<br />

ja c voi olla välimatka, lentoaika tms.<br />

Liikennevirta<br />

Solmu (u, v, c): u on mistä, v on minne ja c voi<br />

olla tien pituus, kapasiteetti, suurin sallittu nopeus<br />

tms.<br />

8.11.2005 KyAMK - TiRak, syksy 2005 13<br />

8.11.2005 KyAMK - TiRak, syksy 2005 14<br />

GRAAFIN ESITTÄMISTAPOJA<br />

Miten graafia ei kannata esittää<br />

Graafi tulisi esittää niin, että sitä<br />

voidaan käsitellä ohjelmallisesti<br />

Ei välttämättä ole helppoa ja itsestään<br />

selvää<br />

Seuraavassa käsitellään paria tuttua<br />

tietorakennetta<br />

Ovatko ne käyttökelpoisia graafin<br />

esittämiseen<br />

GRAAFIN ESITTÄMISTAPOJA<br />

1. Voitaisiin ajatella, että graafi olisi kätevä<br />

esittää binääripuun tapaan:<br />

linkitetty rakenne<br />

jokainen piste sisältää kentät kaikille mahdollisille<br />

viivoille<br />

Kritiikkiä:<br />

Pisteisiin liittyvien viivojen määrä voi vaihdella<br />

Jokaisessa pisteessä tulee varata tilaa viivoille<br />

pahimman tapauksen mukaisesti<br />

Toinen ongelma on solmujen tavoittaminen:<br />

Mistä ja miten etenemällä jokin tietty solmu<br />

löytyy<br />

8.11.2005 KyAMK - TiRak, syksy 2005 15<br />

8.11.2005 KyAMK - TiRak, syksy 2005 16


GRAAFIN ESITTÄMISTAPOJA<br />

2. Pisteestä lähtevien viivojen<br />

määrää ei haluta rajoittaa<br />

Viivat voitaisiin esittää myös<br />

linkitettyinä listoina<br />

Kritiikkiä:<br />

Rakenne on varsin raskastekoinen<br />

Solmujen tavoittaminen ei ole<br />

yhtään helpompaa kuin edellisessä<br />

menetelmässä<br />

GRAAFIN SIVULUETTELO<br />

Sivuluettelossa nimen mukaisesti<br />

luetellaan verkon sivut <strong>eli</strong> viivat<br />

Luettelon alkiot ovat joko pareja<br />

(painottamaton) tai kolmikoita<br />

(painotettu)<br />

Suuntaamattomassa graafissa jokainen<br />

sivu esiintyy kahteen kertaan<br />

Toisaalta, jos tiedetään, että graafi on<br />

suuntaamaton, ja sivu (u, v) sisältyy<br />

graafiin, sivua (v, u) ei tarvitse ilmoittaa,<br />

koska sen tiedetään automaattisesti<br />

olevan mukana<br />

8.11.2005 KyAMK - TiRak, syksy 2005 17<br />

8.11.2005 KyAMK - TiRak, syksy 2005 18<br />

GRAAFIN SIVULUETTELO<br />

NAAPURUUSMATRIISI<br />

1<br />

3<br />

5<br />

<br />

<br />

<br />

Ohessa on eräs graafi sekä suuntaamattomana että suunnattuna ja<br />

molemmissa tapauksissa sivuluettelo<br />

Suunnattuun graafiin on lisäksi liitetty painot<br />

Samaa graafia käytetään esimerkkinä myös jatkossa<br />

Sivuluettelo<br />

1, 2 3, 1<br />

1, 3 3, 2<br />

1, 4 4, 1<br />

2, 1 4, 5<br />

2, 3 5, 4<br />

2<br />

4<br />

Painottamaton Painotettu<br />

1, 2 1, 2, 3<br />

1, 3 1, 3, 7<br />

1, 4 1, 4, 5<br />

2, 3 2, 3, 4<br />

4, 5 4, 5, 2<br />

8.11.2005 KyAMK - TiRak, syksy 2005 19<br />

7<br />

1<br />

3<br />

5<br />

3<br />

4 5<br />

2<br />

2<br />

4<br />

Naapuruusmatriisi <strong>eli</strong> vierusmatriisi on |V| x |V| -<br />

n<strong>eli</strong>ömatriisi:<br />

Matriisissa on graafin pisteiden määrän verran sekä<br />

sarakkeita että rivejä.<br />

Painottamattomalla graafilla rivin u sarakkeen v alkio<br />

on 1, jos viiva (u, v) sisältyy graafiin, ja 0 muulloin<br />

Painotetulla graafilla viivaa (u, v, c) vastaava matriisin<br />

alkion arvo on viivan paino c<br />

Puuttuvia viivoja vastaavat matriisin alkiot tulee olla<br />

sellaisia, että niitä ei voi sekoittaa viivojen painoihin<br />

(esim. -1, -99, tms.)<br />

Suuntaamatonta graafia vastaava matriisi on<br />

symmetrinen (<strong>eli</strong> A T = A):<br />

Jos viiva (u, v) sisältyy graafiin, niin myös viiva (v, u)<br />

sisältyy ko. graafiin.<br />

8.11.2005 KyAMK - TiRak, syksy 2005 20


NAAPURUUSMATRIISI<br />

Esimerkki<br />

Suuntaamaton verkko Suunnattu verkko<br />

1 2 3 4 5 1 2 3 4 5<br />

1| 0 1 1 1 0 1| 0 1 1 1 0<br />

2| 1 0 1 0 0 2| 0 0 1 0 0<br />

3| 1 1 0 0 0 3| 0 0 0 0 0<br />

4| 1 0 0 0 1 4| 0 0 0 0 1<br />

5| 0 0 0 1 0 5| 0 0 0 0 0<br />

Naapuruusmatriisin tilavaatimus on O( |V| 2 )<br />

käyttökelpoinen esitysmuoto tiheillä (dense) graafeilla,<br />

joissa on paljon viivoja<br />

Harvojen (sparse) graafien esittämiseen soveltuu<br />

paremmin seuraavassa esitettävä naapuruuslista<br />

NAAPURUUSLISTA<br />

Naapuruuslistassa kutakin pistettä vastaa<br />

listan tunnussolu<br />

Kyseisestä pisteestä lähtevät viivat<br />

tallennetaan tunnussolusta lähtevään<br />

linkitettyyn listaan<br />

Suuntaamattomille graafeille jokainen<br />

listasolu esiintyy kahdessa eri listassa<br />

Painottaman graafin listasolu sisältää<br />

verkon pisteen numeron sekä linkin<br />

seuraavaan soluun<br />

Painotetun graafin listasolu sisältää<br />

lisäkentän, johon talletetaan viivan paino<br />

8.11.2005 KyAMK - TiRak, syksy 2005 21<br />

8.11.2005 KyAMK - TiRak, syksy 2005 22<br />

NAAPURUUSLISTA<br />

GRAAFIN PISTEEN TIEDOT<br />

KÄYTÄNNÖSSÄ<br />

Esimerkki<br />

Suunnatun graafin naapuruuslista:<br />

1234<br />

23<br />

3<br />

45<br />

5<br />

Tämän esitystavan tilavaatimus on O( |V| + |E| ).<br />

<br />

<br />

<br />

<br />

Graafin pisteiden nimet ovat harvoin numeroita<br />

Yleensä pisteet sisältävät merkkijonoja, esim.<br />

kaupunkien nimiä<br />

Numerointi on kuitenkin varsin oleellinen sekä<br />

naapuruusmatriisi- että naapuruuslistaesityksessä<br />

Tällöin voidaan menetellä seuraavasti:<br />

Kun graafia luettaessa vastaan tulee aiemmin<br />

esiintymätön piste, annetaan sille seuraava<br />

järjestysnumero<br />

Pisteen nimi talletetaan sopivaan hakurakenteeseen<br />

(esim. binääripuu, hajautustaulu)<br />

Kun nimeä tarvitaan, haku on nopeaa (esim. tietyn<br />

pisteen esiintyminen, tulostukset, …)<br />

8.11.2005 KyAMK - TiRak, syksy 2005 23<br />

8.11.2005 KyAMK - TiRak, syksy 2005 24

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!