A274101 TIETORAKENTEET JA ALGORITMIT VERKOT ELI GRAAFIT Lähteet: Timo Harju, Opintomoniste Keijo Ruohonen, Graafiteoria (math.tut.fi/~ruohonen/gt.pdf) HISTORIAA Verkko- eli graafiteorian historia on saanut alkunsa Eulerin työstä v.176 Königsbergin (nyk. Kaliningrad) sillat: http://en.wikipedia.org/wiki/seven_bridges_of_k%c%b6nigsberg Kaupungin läpi virtaa joki, jossa on kaksi saarta Saaret on yhdistetty rantoihin 7 sillalla Voiko rannalta lähteä tietystä pisteestä, kulkea täsmälleen kerran jokaisen sillan yli ja palata lähtöpaikkaansa? Euler ratkaisi ongelman 176 ja kehitti samalla perustan verkkojen eli graafien teorialle 8.11.2005 KyAMK - TiRak, syksy 2005 2 HISTORIAA KÖNIGSBERGIN SILLAT - RATKAISU Yksinkertaistetaan kuvaa hieman N N K O K O S S 8.11.2005 KyAMK - TiRak, syksy 2005 8.11.2005 KyAMK - TiRak, syksy 2005 4
KÖNIGSBERGIN SILLAT - RATKAISU Kaikista neljästä solmusta lähtee pariton määrä kaaria Oletetaan, että seurataan viivoja nostamatta kynää Valitaan yksi solmu tarkasteltavaksi otetaan joku, josta lähte kaarta Kun 1. kerran saavut tähän solmuun, voit lähteä toista kaarta pitkin pois Tämän jälkeen solmuun voi vain saapua kerran Piirtäminen pitää päättää tähän solmuun Toinen vaihtoehto on aloittaa tästä solmusta, jolloin siinä voi vielä kerran käydä Solmu, josta lähtee pariton määrä kaaria voi ainoastaan aloittaa tai päättää reitin K N S O Graafi koostuu pisteistä eli solmuista (vertex) ja niitä yhdistävistä kaarista eli viivoista (edge) Formaalisti: Graafi (graph) on pari (V,E), missä V on pisteiden joukko ja E on pisteparien muodostama viivojen joukko. 8.11.2005 KyAMK - TiRak, syksy 2005 5 8.11.2005 KyAMK - TiRak, syksy 2005 6 Viivat ovat pistepareja (u, v) = (v, u) Pisteet u ja v ovat viivan (u, v) päätepisteet Suunnatuilla graafeilla (u, v) (v, u) eli pisteparien järjestyksellä on merkitystä Solmujen lukumäärää merkitään V :llä ja viivojen määrää E :llä Viivoja voidaan merkitä myös E = {,,, e n } Viivat voivat olla myös painotettuja: (u, v, c), missä c on paino Viivat, joilla on samat päätepisteet, ovat rinnakkaiset Viiva (v, v) on ns. silmukka Pisteet u ja v, joita yhdistää viiva ovat rinnakkaiset Pisteen v aste, merkitään d(v), on niiden viivojen lukumäärä, joiden päätepiste v on Piste, jonka aste on 1 on ns. loppupiste 8.11.2005 KyAMK - TiRak, syksy 2005 7 8.11.2005 KyAMK - TiRak, syksy 2005 8
Graafi, jossa ei ole lainkaan viivoja on tyhjä Graafi, jossa ei ole lainkaan pisteitä, on ns. nollagraafi Graafi, jossa on vain yksi piste, on triviaali Graafi on yksinkertainen, jos siinä ei ole rinnakkaisia viivoja, eikä silmukoita Graafi on yhtenäinen, jos sen jokaisesta pisteestä voidaan kulkea jokaiseen toiseen pisteeseen Graafissa G = (V, E) oleva pisteiden ja viivojen jono (v i0,e j0,v i1,e j1,v i2,,e jk,v ik ) on kulku, jos viivat (v i1,v i2 ), (v i2,v i ),,(v i(k- 1),v ik ) E Kulun pituus on k, v i0 on kulun alkupiste ja v ik kulun loppupiste Kulussa saavat samat pisteet ja viivat esiintyä useitakin kertoja Kulku on reitti, jos mikään viiva ei esiinny useita kertoja Reitti on polku, jos mikään piste ei esiinny kahta kertaa, päätepisteitä lukuun ottamatta 8.11.2005 KyAMK - TiRak, syksy 2005 9 8.11.2005 KyAMK - TiRak, syksy 2005 10 EULERIN POLKU JA HAMILTONIN PIIRI Polku, jonka alku- ja päätepiste ovat samat, on piiri Huom. myös polku (v, v) on piiri, jonka pituus on 1 ja sitä sanotaan silmukaksi Graafin pisteet u ja v ovat yhdistetyt, jos on olemassa u-vkulku Jos pisteet u ja v ovat yhdistetyt sekä pisteet v ja w ovat yhdistetyt, niin myös u ja w ovat yhdistetyt Toisin sanoen jos graafissa on u-vkulku sekä v-w-kulku, niin siinä on myös u-w-kulku Eulerin polku (Euler path) kulkee jokaisen viivan kautta täsmälleen kerran Graafissa, jossa on Eulerin polku voi olla korkeintaan kaksi pistettä, joista lähtee pariton määrä viivoja Lisäksi tällaisessa graafissa on aina vähintään yksi Eulerin polku Hamiltonin piiri kulkee jokaisen pisteen kautta ainoastaan kerran ja sen alku- ja loppupisteet ovat samat 8.11.2005 KyAMK - TiRak, syksy 2005 11 8.11.2005 KyAMK - TiRak, syksy 2005 12
SUUNNATUT GRAAFIT KÄYTÄNNÖN SOVELLUKSIA Suunnattu graafi on vahvasti yhtenäinen (strongly connected), jos sen jokaisesta pisteestä on polku kaikkiin muihin pisteisiin Suunnattu graafi on heikosti yhtenäinen (weakly connected), jos se ei ole vahvasti yhtenäinen mutta olisi suuntaamattomana yhtenäinen Suunnatun graafin pisteen v tuloaste (in-degree) on v:hen päättyvien viivojen (u, v) lukumäärä Solmun v lähtöaste (out-degree) on puolestaan v:stä lähtevien viivojen (v, w) lukumäärä Suunnatun graafin suunnattua piiriä sanotaan sykliksi (cycle) Suunnattu graafi on syklitön (acyclic), jos siinä ei ole yhtään sykliä, muutoin syklinen (cyclic) Useimmat käytännön ongelmia mallintavat graafit ovat painotettuja. Useimmiten ne lisäksi ovat suunnattuja, mutta eivät aina. Lentokenttäverkko Solmu (u, v, c): u on lähtökenttä, v on tulokenttä ja c voi olla välimatka, lentoaika tms. Liikennevirta Solmu (u, v, c): u on mistä, v on minne ja c voi olla tien pituus, kapasiteetti, suurin sallittu nopeus tms. 8.11.2005 KyAMK - TiRak, syksy 2005 1 8.11.2005 KyAMK - TiRak, syksy 2005 14 GRAAFIN ESITTÄMISTAPOJA Miten graafia ei kannata esittää? Graafi tulisi esittää niin, että sitä voidaan käsitellä ohjelmallisesti Ei välttämättä ole helppoa ja itsestään selvää Seuraavassa käsitellään paria tuttua tietorakennetta Ovatko ne käyttökelpoisia graafin esittämiseen? GRAAFIN ESITTÄMISTAPOJA 1. Voitaisiin ajatella, että graafi olisi kätevä esittää binääripuun tapaan: linkitetty rakenne jokainen piste sisältää kentät kaikille mahdollisille viivoille Kritiikkiä: Pisteisiin liittyvien viivojen määrä voi vaihdella Jokaisessa pisteessä tulee varata tilaa viivoille pahimman tapauksen mukaisesti Toinen ongelma on solmujen tavoittaminen: Mistä ja miten etenemällä jokin tietty solmu löytyy? 8.11.2005 KyAMK - TiRak, syksy 2005 15 8.11.2005 KyAMK - TiRak, syksy 2005 16
GRAAFIN ESITTÄMISTAPOJA 2. Pisteestä lähtevien viivojen määrää ei haluta rajoittaa Viivat voitaisiin esittää myös linkitettyinä listoina Kritiikkiä: Rakenne on varsin raskastekoinen Solmujen tavoittaminen ei ole yhtään helpompaa kuin edellisessä menetelmässä GRAAFIN SIVULUETTELO Sivuluettelossa nimen mukaisesti luetellaan verkon sivut eli viivat Luettelon alkiot ovat joko pareja (painottamaton) tai kolmikoita (painotettu) Suuntaamattomassa graafissa jokainen sivu esiintyy kahteen kertaan Toisaalta, jos tiedetään, että graafi on suuntaamaton, ja sivu (u, v) sisältyy graafiin, sivua (v, u) ei tarvitse ilmoittaa, koska sen tiedetään automaattisesti olevan mukana 8.11.2005 KyAMK - TiRak, syksy 2005 17 8.11.2005 KyAMK - TiRak, syksy 2005 18 GRAAFIN SIVULUETTELO NAAPURUUSMATRIISI 1 5 Ohessa on eräs graafi sekä suuntaamattomana että suunnattuna ja molemmissa tapauksissa sivuluettelo Suunnattuun graafiin on lisäksi liitetty painot Samaa graafia käytetään esimerkkinä myös jatkossa Sivuluettelo 1, 2, 1 1,, 2 1, 4 4, 1 2, 1 4, 5 2, 5, 4 2 4 Painottamaton Painotettu 1, 2 1, 2, 1, 1,, 7 1, 4 1, 4, 5 2, 2,, 4 4, 5 4, 5, 2 8.11.2005 KyAMK - TiRak, syksy 2005 19 7 1 5 4 5 2 2 4 Naapuruusmatriisi eli vierusmatriisi on V x V - neliömatriisi: Matriisissa on graafin pisteiden määrän verran sekä sarakkeita että rivejä. Painottamattomalla graafilla rivin u sarakkeen v alkio on 1, jos viiva (u, v) sisältyy graafiin, ja 0 muulloin Painotetulla graafilla viivaa (u, v, c) vastaava matriisin alkion arvo on viivan paino c Puuttuvia viivoja vastaavat matriisin alkiot tulee olla sellaisia, että niitä ei voi sekoittaa viivojen painoihin (esim. -1, -99, tms.) Suuntaamatonta graafia vastaava matriisi on symmetrinen (eli A T = A): Jos viiva (u, v) sisältyy graafiin, niin myös viiva (v, u) sisältyy ko. graafiin. 8.11.2005 KyAMK - TiRak, syksy 2005 20
NAAPURUUSMATRIISI Esimerkki Suuntaamaton verkko Suunnattu verkko 1 2 4 5 1 2 4 5 1 0 1 1 1 0 1 0 1 1 1 0 2 1 0 1 0 0 2 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 4 1 0 0 0 1 4 0 0 0 0 1 5 0 0 0 1 0 5 0 0 0 0 0 Naapuruusmatriisin tilavaatimus on O( V 2 ) käyttökelpoinen esitysmuoto tiheillä (dense) graafeilla, joissa on paljon viivoja Harvojen (sparse) graafien esittämiseen soveltuu paremmin seuraavassa esitettävä naapuruuslista NAAPURUUSLISTA Naapuruuslistassa kutakin pistettä vastaa listan tunnussolu Kyseisestä pisteestä lähtevät viivat tallennetaan tunnussolusta lähtevään linkitettyyn listaan Suuntaamattomille graafeille jokainen listasolu esiintyy kahdessa eri listassa Painottaman graafin listasolu sisältää verkon pisteen numeron sekä linkin seuraavaan soluun Painotetun graafin listasolu sisältää lisäkentän, johon talletetaan viivan paino 8.11.2005 KyAMK - TiRak, syksy 2005 21 8.11.2005 KyAMK - TiRak, syksy 2005 22 NAAPURUUSLISTA Esimerkki Suunnatun graafin naapuruuslista: 1 2 4 2 4 5 5 Tämän esitystavan tilavaatimus on O( V + E ). GRAAFIN PISTEEN TIEDOT KÄYTÄNNÖSSÄ Graafin pisteiden nimet ovat harvoin numeroita Yleensä pisteet sisältävät merkkijonoja, esim. kaupunkien nimiä Numerointi on kuitenkin varsin oleellinen sekä naapuruusmatriisi- että naapuruuslistaesityksessä Tällöin voidaan menetellä seuraavasti: Kun graafia luettaessa vastaan tulee aiemmin esiintymätön piste, annetaan sille seuraava järjestysnumero Pisteen nimi talletetaan sopivaan hakurakenteeseen (esim. binääripuu, hajautustaulu) Kun nimeä tarvitaan, haku on nopeaa (esim. tietyn pisteen esiintyminen, tulostukset, ) 8.11.2005 KyAMK - TiRak, syksy 2005 2 8.11.2005 KyAMK - TiRak, syksy 2005 24