9. Graafit. Termejä ja perusominaisuuksia

Samankaltaiset tiedostot
9. Graafit Graafin abstrakti tietotyyppi

Algoritmit 1. Luento 9 Ti Timo Männikkö

10. Painotetut graafit

A TIETORAKENTEET JA ALGORITMIT

Johdatus graafiteoriaan

Algoritmit 1. Luento 8 Ke Timo Männikkö

6.4. Järjestyssuhteet

Johdatus graafiteoriaan

0 v i v j / E, M ij = 1 v i v j E.

Algoritmi on periaatteellisella tasolla seuraava:

10. Painotetut graafit

2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

13 Lyhimmät painotetut polut

811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa1 : Leveys- ja syvyyshaku

Graafit ja verkot. Joukko solmuja ja joukko järjestämättömiä solmupareja. eli haaroja. Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria

TIE Tietorakenteet ja algoritmit 261

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Eräs keskeinen algoritmien suunnittelutekniikka on. Palauta ongelma johonkin tunnettuun verkko-ongelmaan.

Johdatus graafiteoriaan

Silmukkaoptimoinnista

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Rakenteellinen tasapaino ja transitiivisyys

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

Algoritmit 2. Luento 2 To Timo Männikkö

Miten käydä läpi puun alkiot (traversal)?

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:

Graafin virittävä puu 1 / 20

14. Luennon sisältö. Kuljetustehtävä. Verkkoteoria ja optimointi. esimerkki. verkkoteorian optimointitehtäviä verkon virittävä puu lyhimmät polut

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Algoritmit 2. Luento 2 Ke Timo Männikkö

3. Hakupuut. B-puu on hakupuun laji, joka sopii mm. tietokantasovelluksiin, joissa rakenne on talletettu kiintolevylle eikä keskusmuistiin.

Algoritmit 2. Luento 7 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit V Verkkojen algoritmeja Osa 2 : Kruskalin ja Dijkstran algoritmit

Algoritmit 1. Luento 7 Ti Timo Männikkö

Kysymys: Voidaanko graafi piirtää tasoon niin, että sen viivat eivät risteä muualla kuin pisteiden kohdalla?

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

8.5. Järjestyssuhteet 1 / 19

Algoritmit 2. Luento 6 To Timo Männikkö

Tietorakenteet ja algoritmit - syksy

Tietorakenteet ja algoritmit. Verkot. Ari Korhonen

PARITUS KAKSIJAKOISESSA

Olkoon seuraavaksi G 2 sellainen tasan n solmua sisältävä suunnattu verkko,

Algoritmit 1. Luento 13 Ma Timo Männikkö

Algoritmit 1. Luento 3 Ti Timo Männikkö

58131 Tietorakenteet ja algoritmit (kevät 2013) Kurssikoe 2, , vastauksia

Algoritmit 1. Luento 10 Ke Timo Männikkö

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

Pienin virittävä puu (minimum spanning tree)

Graafin 3-värittyvyyden tutkinta T Graafiteoria, projektityö (eksakti algoritmi), kevät 2005

Algoritmit 2. Luento 4 To Timo Männikkö

Pinot, jonot, yleisemmin sekvenssit: kokoelma peräkkäisiä alkioita (lineaarinen järjestys) Yleisempi tilanne: alkioiden hierarkia

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia

Kurssikoe on maanantaina Muista ilmoittautua kokeeseen viimeistään 10 päivää ennen koetta! Ilmoittautumisohjeet löytyvät kurssin kotisivuilla.

V. V. Vazirani: Approximation Algorithms, luvut 3-4 Matti Kääriäinen

A TIETORAKENTEET JA ALGORITMIT

Oikeasta tosi-epätosi -väittämästä saa pisteen, ja hyvästä perustelusta toisen.

58131 Tietorakenteet ja algoritmit (syksy 2015) Toinen välikoe, malliratkaisut

Algoritmit 1. Luento 13 Ti Timo Männikkö

58131 Tietorakenteet (kevät 2009) Harjoitus 11, ratkaisuja (Topi Musto)

Suunnatut, etumerkilliset ja arvotetut graafit Sosiaalisten verkostojen analysoinnin näkökulmalla

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit 2. Luento 6 Ke Timo Männikkö

Algoritmit 1. Luento 14 Ke Timo Männikkö

T : Max-flow / min-cut -ongelmat

verkkojen G ja H välinen isomorfismi. Nyt kuvaus f on bijektio, joka säilyttää kyseisissä verkoissa esiintyvät särmät, joten pari

Tieto- ja tallennusrakenteet

Tietorakenteet, esimerkkivastauksia viikon 12 laskareihin

Algoritmit 2. Luento 11 Ti Timo Männikkö

Königsbergin sillat. Königsberg 1700-luvulla. Leonhard Euler ( )

Algoritmit 2. Luento 4 Ke Timo Männikkö

Algoritmit 2. Luento 14 Ke Timo Männikkö

Algoritmit 1. Luento 4 Ke Timo Männikkö

Diskreetit rakenteet

useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Valitaan alkio x 1 A B ja merkitään A 1 = A { x 1 }. Perinnöllisyyden nojalla A 1 I.

Algoritmit 1. Luento 6 Ke Timo Männikkö

Malliratkaisut Demot

Algoritmit 1. Luento 12 Ke Timo Männikkö

Algoritmit 1. Luento 1 Ti Timo Männikkö

lähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa

v 8 v 9 v 5 C v 3 v 4

isomeerejä yhteensä yhdeksän kappaletta.

Algoritmit 1. Luento 12 Ti Timo Männikkö

T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet )

A TIETORAKENTEET JA ALGORITMIT

Valitsemalla sopivat alkiot joudutaan tämän määritelmän kanssa vaikeuksiin, jotka voidaan välttää rakentamalla joukko oppi aksiomaattisesti.

Algoritmit 1. Luento 5 Ti Timo Männikkö

8 Joukoista. 8.1 Määritelmiä

Algoritmit 2. Luento 3 Ti Timo Männikkö

Johdatus verkkoteoriaan 4. luento

Ratkaisu. Tulkitaan de Bruijnin jonon etsimiseksi aakkostossa S := {0, 1} sanapituudelle n = 4. Neljän pituisia sanoja on N = 2 n = 16 kpl.

AVL-puut. eräs tapa tasapainottaa binäärihakupuu siten, että korkeus on O(log n) kun puussa on n avainta

Induktiotodistus: Tapaus n = 0 selvä; ol. väite pätee kun n < m.

Tehtävän V.1 ratkaisuehdotus Tietorakenteet, syksy 2003

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Puiden karakterisointi

Algoritmit 2. Luento 13 Ti Timo Männikkö

Transkriptio:

9. raafit raafeilla eli verkoilla esitetään yhteystietoja. simerkkejä niistä ovat kaupunkikartan kadut ja tietoverkon tietokoneet. Tämä luku tarkastelee verkkojen perusasioita. 9.1. raafin abstrakti tietotyyppi bstraktissa mielessä graafi (graph) on yksinkertaisesti kärkien (vertices) eli solmujen (nodes) joukko V ja solmuparien eli kaarien eli särmien (arcs, edges) joukko. Termejä ja perusominaisuuksia raafin kaaret ovat joko suunnattuja (directed) tai suuntaamattomia (undirected). aari (u,v) on suunnattu solmusta u solmuun v, jos pari (u,v) on järjestetty u:n edeltäessä v:tä. os järjestystä ei ole määritelty, kaari on suuntaamaton, jolloin (u,v) on sama kuin (v,u). sim. 9.1. atsotaan graafia, joka kuvaa kurssin lähdeteoksen kirjoittajien yhteistyöntekijöitä tutkimuksessa. aaret ovat symmetrisiä (symmetric), sillä jos on tehnyt yhteistyötä B:n kanssa, niin asia on myös toisinpäin (kuva 9.1.). 9. luku 453 9. luku 454 Snoeyink arg Tollis os kaikki graafin kaaret ovat suuntaamattomia, puhutaan suuntaamattomasta graafista (undirected graph). Vastaavasti suunnatussa graafissa (directed graph, digraph) kaikki kaaret ovat suunnattuja. n myös sekamuotoisia (mixed) graafeja, joissa esiintyy molempia tyyppejä kaaria. Suuntaamaton kaari (u,v) voidaan korvata parilla suunnattuja (u,v) ja (v,u). oodrich Vitter Tamassia aaren yhdistämät kaksi solmua ovat sen päätesolmut tai kärjet (endpoints, end vertices). os se on suunnattu, toinen niistä on alku (origin) ja toinen loppu (destination). Chiang uva 9.1. raafi yhteistyöntekijöiden välillä. reparata aksi solmua ovat vierekkäisiä (adjacent), jos ne ovat saman kaaren päätesolmuja. aari on solmuun liittyvä tai kuuluva (incident), jos solmu on kaaren alku tai loppu. Solmun v ulkoaste outdeg(v) (outdegree) on siitä lähtevien suunnattujen kaarien lukumäärä ja sisäaste indeg(v) (in degree) siihen tulevien suunnattujen kaarien lukumäärä. Solmun v aste deg(v) (degree) on solmuun yhteydessä olevien kaarien määrä eli samalla sen vierekkäisten solmujen määrä. 9. luku 455 9. luku 456

sim. 9.2. entoreiteistä voidaan muodostaa graafi, jonka solmut viittaavat lentokenttiin ja kaaret ovat niihin liittyviä lentovuoroja (kuva 9.2.). aaret ovat luonnollisesti suunnattuja, koska lennolla on aina määrätty suunta lähtöpaikasta kohteeseen. aksi lentokenttää ovat vierekkäisiä graafissa, jos niiden välillä on lentovuoro. Solmun v sisäaste on kyseiselle lentokentälle saapuvat lennot ja sen ulkoaste siitä lähtevät lennot. raafin määritelmä viittaa kaarien osalta pikemmin niiden kokoelmaan kuin joukkoon sallien kahdella suuntaamattomalla kaarella olevan samat päätesolmut sekä kahdella suunnatulla kaarella olevan sama alkusolmu ja toisaalta sama loppusolmu. Tällaisia kaaria kutsutaan rinnakkaisiksi (parallel edges) tai monikaariksi (multiple edges). sim 9.2. voisi sisältää näitä, kun kahden lentokentän välillä olisi useita lentovuoroja eri aikoihin. räs toinen erikoistapaus on kaari, joka yhdistää solmun itseensä. Tästä käytetään nimitystä itseissilmukka (self loop). 9. luku 457 S X 49 U 877 U 120 TW 45 RD DW 411 D 335 1387 523 903 BS uva 9.2. simerkki suunnatusta graafista, joka esittää lentoreitistöä. aaren U 120 alku ja loppusolmu ovat X ja RD. X ja RD ovat täten vierekkäisiä. Solmun DW sisäaste on 3 ja ulkoaste 2. W 35 D 247 9. luku 458 Yleensä graafeissa ei ole rinnakkaisia kaaria tai itseissilmukoita, jotka ovat poikkeuksellisia. os niitä ei esiinny, graafin sanotaan olevan yksinkertainen (simple), mikä yksinkertaistaa graafien tietorakenteiden ja algoritmien esitystä. Tällöin yksinkertaisen graafin kaaret muodostavat solmuparien joukon (set) eikä vain kokoelmaa. Tässä luvussa oletetaan tilanteen olevan tämä ellei toisin mainita. sitettävien määritelmien laajentaminen erityistapausten huomioonottamiseksi olisi suoraviivaista, mutta jonkin verran työlästä. heiset ominaisuudet esittävät graafin kaarien ja solmujen määrien suhteet sekä solmujen asteet. ause 9.1. os graafissa on m kaarta, niin on deg( v ) = 2m. v erustelu: aari (u,v) lasketaan kahdesti esitetyssä summassa, kerran loppusolmunaan u ja toisen kerran loppusolmunaan v. äin ollen kaarien kokonaisvaikutus solmujen asteisiin on kaksi kertaa kaarien määrä. ause 9.2. os suunnatussa graafissa on m kaarta, niin on in deg( v ) = outdeg( v) = m. v v erustelu: Suunnatussa graafissa kaari (u,v) vaikuttaa yhden yksikön verran alkusolmun u ulkoasteeseen ja yhden yksikön verran loppusolmun v sisäasteeseen. iinpä kaarten kokonaisvaikutus solmujen ulkoasteisiin on yhtä kuin kaarten lukumäärä ja samoin on sisäasteilla. 9. luku 459 9. luku 460

ause 9.3. lkoon yksinkertainen graafi, jossa on n solmua ja m kaarta. os on suuntaamaton, niin on m n(n 1)/2, ja jos on suunnattu, niin on m n(n 1). erustelu: Suuntaamattomassa graafissa ei millään kahdella kaarella voi olla samoja päätesolmuja eikä ole itseissilmukoita. Tällöin graafin solmun maksimiaste on n 1. Täten lauseen 9.1. mukaan on 2m n(n 1). Suunnatussa graafissa ei millään kahdella kaarella voi olla samaa alkusolmua ja samaa loppusolmua eikä ole itseissilmukoita. Tällöin graafin solmun maksimisisäaste on n 1. auseen 9.2. mukaan on m n(n 1). auseen 9.3. tulema on esitettävissä myös muodossa, että n solmuisella yksinkertaisella graafilla on (n 2 ) kaarta. raafin polku (path) on vuorottelevien solmujen ja kaarien sekvenssi, joka alkaa solmusta ja päättyy solmuun siten, että jokainen kaari liittyy edeltäjä ja seuraajasolmuunsa. Sykli (cycle) on polku, joka alkaa ja loppuu samaan solmuun. olku on yksinkertainen (simple), jos sen solmut ovat erillisiä. Sykli on yksinkertainen (simple), jos sen solmut ovat erillisiä ensimmäistä ja viimeistä lukuunottamatta. Suunnatulla polulla (directed path) kaikki kaaret ovat suunnattuja ja kuljetaan läpi niiden suunnissa, ja suunnatusssa syklissä (directed cycle) määritellään samoin. sim. 9.2. tapauksessa (BS, W 35,, 1387, DW) on suunnattu yksinkertainen polku ja (X, U 120, RD, U 877, DW, 49, X) on suunnattu yksinkertainen sykli. raafin aligraafi (subgraph) on graafi, jonka solmut ja kaaret ovat graafin solmujen ja kaarten osajoukkoja. sim. 9.2. tapauksessa solmut BS, ja sekä kaaret 903 ja D 247 muodostavat aligraafin. Virittävä aligraafi (spanning subgraph) on graafin aligraafi, joka käsittää :n kaikki solmut. raafi on yhdistetty (connected), jos minkä tahansa solmuparin välillä on polku. os graafi ei ole yhdistetty, sen maksimaalisia yhdistettyjä aligraafeja kutsutaan :n yhdistetyiksi komponenteiksi (connected components). 9. luku 461 9. luku 462 etsä (forest) on syklitön graafi. uu (tree) on yhdistetty metsä eli yhdistetty syklitön graafi. Tämä puun määritelmä on hieman erilainen kuin luvussa 4, koska graafin tilanteessa ei määritelty juurta. äiden erottamiseksi toisistaan voidaan luvun 4 puu nimetä juurelliseksi puuksi (rooted tree). etsän yhdistetyt komponentit ovat (vapaita) puita. raafin virittävä puu (spanning tree) on virittävä aligraafi, joka on (vapaa) puu. m. määritteiden ominaisuuksia luetellaan seuraavassa. ause 9.4. un suuntaamattomassa graafissa on n solmua ja m kaarta, niin mainittavat ominaisuudet ovat (perustelu voi olla harjoituksena): os on yhdistetty, niin on m n 1. os on puu, niin on m = n 1. os on metsä, niin on m n 1. raafin metodit bstraktissa tietotyypissä graafin paikat (positions) ovat sen solmut ja kaaret. raafin alkiot voidaan näin ollen tallettaa joko solmuihin tai kaariin (tai molempiin). raafi nähdään paikkasäiliönä (luku 4), jolloin graafin abstrakti tietotyyppi tukee metodeja size(), ismpty(), elements(), positions(), replace(p,o) ja swap(p,q), missä p ja q viittaavat paikkoihin ja o alkioon. raafit ovat hyvin monipuolisia rakenteita johtuen niiden erilaisista rakenneosista, solmuista ja kaarista. raafien metodit jaotellaan kolmeen ryhmään: yleismetodit, suunnattuja kaaria käsittelevät metodit ja graafien päivitys ja muuntamismetodit. lkoot v solmu, e kaari ja o solmuun tai kaareen talletettu alkio. Seuraavassa esitetään esimerkinomaisesti vain muutamia metodeja, joita voi kehittää lisää monia kymmeniä. yöskään niiden virheenkäsittelyä ei tarkastella. 9. luku 463 9. luku 464

Yleismetodeissa ei piitata kaarien suunnista. e antavat globaalia tietoa graafista. numvertices(): edges(): alauttaa :n solmujen lukumäärän. alauttaa :n kaarien luettelon. Seuraavantyyppisissä yleismetodeissa on solmuja ja kaaria argumentteina. degrees(v): alauttaa solmun v asteen. endvertices(e): alauttaa kaaren e päätesolmut. aredjacent(v,w): alauttaa totuusarvon sen mukaan, ovatko v ja w vierekkäisiä solmuja. un otetaan huomioon kaarien suuntia, monia erilaisia metodeja on esitettävissä. indjacentvertices(v): alauttaa luettelon kaikista solmulle v vierekkäisistä solmuista, jotka tulevat suunnattuja kaaria myöten v:hen. destination(e): alauttaa suunnatun kaaren e loppusolmun. äivitysmetodeilla voidaan lisätä tai poistaa kaaria ja solmuja. insertdge(v,w,o): isää ja palauttaa suuntaamattoman kaaren solmujen v ja w välistä sekä tallettaa alkion o tähän paikkaan. removevertex(v): oistaa solmun v ja kaikki siihen liittyvät kaaret. uten mainittu, tässä esitettiin ainoastaan muutamia esimerkkejä lukuisista mahdollisista graafimetodeista. (e luetellaan tätä täydellisimmin myöhemmissä taulukoissa.) indegree(v): alauttaa solmun v sisäasteen. 9. luku 465 9. luku 466 9.2. raafien tietorakennetoteutukset raafin abstrakti tietotyyppi toteutetaan yleensä yhtenä kolmesta vaihtoehdosta. ämä rakenteet ovat kaarilista (edge list), vierekkyyslista (adjacency list) ja vierekkyysmatriisi (adjacency matrix). un näistä kaksi ensimmäistä sisältävät pelkästään tiedon jostakin solmusta ja kaaresta, niiden tarvitsema muistitila on (n+m), missä n on solmujen ja m kaarien lukumäärät. olmas rakennevaihtoehto tarvitsee tilaa (n 2 ), koska siinä varataan tilaa jokaiselle solmuparille riippumatta siitä, onko niiden välillä kaarta vai ei. aarilistarakenne aarilista on yksinkertaisin, mutta ei tehokkain graafin esitysmuoto. Solmu v tallettaa alkion o, mikä on eksplisiittisesti esitetty toteutuksen solmuoliossa. aikki solmuoliot talletetaan säiliöön V, joka on tavallisesti sekvenssi tai sanakirja. os sovelletaan järjestettyä sekvenssiä, solmuille annetaan järjestysnumero. Sanakirjan tapauksessa ne merkitään avaimilla. Solmun v solmuoliolla, jossa on alkio o talletettuna, on seuraavat tiedot sisältävät muuttujat : viittaus alkioon o solmuun liittyvien suuntaamattomien kaarien määrä, sisäaste ja ulkoaste viittaus solmuolion paikkaan säiliössä V lkion o sisältävä kaari e esitetään eksplisiittisesti kaarioliolla. aarioliot talletetaan säiliöön, joka on sekvenssi tai sanakirja. aarioliolla on seuraavat muuttujat: 9. luku 467 9. luku 468

viittaus alkioon o Boolen muuttuja sille, onko kaari e suuntaamaton tai suunnattu viittaukset säiliön V solmuolioihin, jotka liittyvät kaaren e päätesolmuihin (e suuntaamaton) tai sen alku ja loppusolmuun (e suunnattu) viittaus kaariolion paikkaan säiliössä aarilistasta on kuvassa 9.3. kaavamainen esitys. aarilistasta puhutaan, koska sen toteutus on usein sekvenssi (listana). aarilistarakenteen pääpiirre on suora haku kaarista näihin liittyviin solmuihin. Tämä tuottaa yksinkertaisia algoritmeja kaarien käsittelyyn. Sen sijaan käänteinen toiminto, solmuun liittyvien kaarien saanti, vaatii täydellisen haun kaarien säiliössä. äin ollen mm. metodi incidentdges(v) toimii ajassa, joka on suhteessa kaarien määrään (eikä solmujen). Taulukossa 9.1. on lueteltu tärkeimpien metodien suoritusajat, joiden perusteluja ei tässä tarkastella. S X 49 U 877 U 120 TW 45 RD D 335 DW 411 (a) 1387 523 903 uva 9.3. (alku) (a) Suunnattu graafi kuvasta 9.2. BS W 35 D 247 9. luku 469 9. luku 470 W 35 : D 247 49 D 335 1387 523 411 U 120 903 U 877 TW 45 V: BS X DW RD S (b) uva 9.3. (loppu) (b) raafin kaavamainen esitys kaarilistana. Selvyyden vuoksi viittaukset on tässä merkitty olioiden nimillä (eikä merkitty viittauksia nuolien yhteyteen). 9. luku 471 Taulukko 9.1. raafimetodien suoritusajat, kun toteutus on kaarilistana, missä V ja on toteutettu kahteen suuntaan linkitettyjen listojen sekvensseinä. Tilavaatimus on (n+m), missä n on solmujen lukumäärä ja m kaarien lukumäärä. operaatio size, ismpty, replacelement, swap numvertice, numdges vertices edges, directeddges, undirecteddges elements, positions endvertices, opposite, origin, destination, isdirected, degree, indegree, outdegree incidentdges, inncidentdges, outncidentdges, adjacentvertices, indjacentvertices, outdjacentvertices, aredjacent insertvertex, insertdge, insertdirecteddge, removedge, makeundirected, reversedirection, setdirectionrom, setdirectionto removevertex suoritusaika (n) (m) (n+m) (m) (m) 9. luku 472

Vierekkyyslistarakenne raafin vierekkyyslistarakenne laajentaa kaarilistaa lisäten tietoa, joka tukee solmuun liittyvien kaarien suoraa saantia. un kaarilista katsoo kaari solmu suhdetta ainoastaan kaarien näkökulmasta, vierekkyyslista katsoo sitä molempien komponenttien näkökulmasta. Tämä symmetrinen lähestymistapa mahdollistaa graafin abstraktin tietotyypin solmumetodien toteuttamisen paljon nopeammiksi kuin kaarilistan yhteydessä, vaikka näiden muistitilankäyttö on samaa luokkaa suhteessa solmujen ja kaarien määriin. Vierekkyyslista sisältää seuraavat piirteet: kaikki kaarilistan rakenneosat ja lisäksi Solmun v solmuolio käsittää viittauksen säiliöön (v), joka sisältää solmuun v liittyvien kaarien oliot. aaren (u,v) kaariolio käsittää viittaukset kaaren paikkoihin säiliöissä (u) ja (v). 9. luku 473 Solmun v säiliö (v) toteutetaan yleensä sekvenssinä, mutta myös mm. sanakirja tai prioriteettijono tulevat kysymykseen kontekstista riippuen. un vierekkyyslistaa vielä hieman muunnetaan, saadaan mukaan mahdollisuus, että voi olla sekä suuntaamattomia että suunnattuja kaaria. äytetään kolmea säiliötä in (v), out (v) ja un (v), jotka sisältävät viittaukset kaariolioihin ja nämä ovat suunnattuja tulevia, suunnattuja lähteviä tai suuntaamattomia kaaria solmuun v liittyen. uvassa 9.4. on edeltävän lentoreitistöesimerkin kuvaus vierekkyyslistana. Siinä on lisätty edeltävään verrattuna vierekkyysrakenteet jokaista graafin solmua varten. ukana ei ole suuntaamattomien kaarien säiliöitä, koska suuntaamattomia kaaria ei ollut mukana esimerkissä. Vierekkyysrakenteiden avulla voidaan nopeuttaa useiden graafimetodien toimintaa. 9. luku 474 in W 35 out W 35 D 247 : D 247 49 D 335 1387 523 411 U 120 903 U 877 TW 45 in V: 49 411 BS X DW RD S out U120 in 1387 U 877 523 out D 335 49 in W 35 uva 9.4. Vierekkyyslistan kaavamainen esitys lentoreitistön tapauksesssa. out 1387 903 TW 45 in D 247 903 out 523 411 9. luku 475 in U 120 D 335 out U 877 in TW 45 out Taulukko 9.2. raafimetodien suoritusajat, kun graafi on toteutettu vierekkyyslistana, jossa sekä säiliöt V ja että vierekkyysrakennesäiliöt on toteutettu sekvensseinä ja nämä kahteen suuntaan linkitettyinä listoina. Tilavaatimus on (n+m), missä n on solmujen lukumäärä ja m kaarien lukumäärä. operaatio suoritusaika size, ismpty, replacelement, swap numvertice, numdges vertices edges, directeddges, undirecteddges elements, positions endvertices, opposite, origin, destination, isdirected, degree, indegree, outdegree incidentdges(v), inncidentdges(v), outncidentdges(v), adjacentvertices(v), indjacentvertices(v), outdjacentvertices(v) aredjacent(u,v) insertvertex, insertdge, insertdirecteddge, removedge, makeundirected, reversedirection, setdirectionrom, setdirectionto removevertex(v) (n) (m) (n+m) (deg(v)) (min(deg(u),deg(v))) (deg(v)) 9. luku 476

Vierekkyysmatriisirakenne uten vierekkyyslista, myös graafin vierekkyysmatriisirakenne laajentaa kaarirakennetta lisäkomponentilla. yt lisätään kaarilistan lisäksi matriisi (taulukko), josta saadaan määrättyä solmuparien vierekkäisyysominaisuus vakioajassa. uutamien metodien nopeutus aiheuttaa toisaalta aiempaa suuremman tilavaatimuksen. Tulkitaan solmut nyt kokonaislukuina joukosta {0, 1,, n 1} ja kaaret tällaisten kokonaislukujen pareina. Viittaukset kaariin voidaan nyt tallettaa kaksiulotteisen n n taulukon alkioihin. Vierekkyysmatriisiesitys laajentaa kaarilistaa seuraavasti (kuva 9.5.): Taulukon alkio [i,j] käsittää viittauksen kaariolioon e, joka menee solmusta i solmuun j. ikäli tämä on suuntaamaton, e talletetaan sekä alkioon [i,j] että [j,i]. un kahden solmun välillä ei ole kaarta, jätetään vastavaat alkiot tyhjiksi. Vaikka jotkut metodit nyt ovat nopeampia kuin edeltävien rakenteiden yhteydessä, muutamien muiden suoritusaika kasvaa, koska esim. solmumetodien tilanteissa on käytävä läpi kokonainen rivi tai sarake taulukosta. isäksi muistitilavaatimus kasvaa kertaluokkaan (n 2 ). yös mikä tahansa solmun lisäys tai poisto vaatii nyt koko taulukon läpikäynnin, joka on (n 2 ). Solmun v olio tallettaa erillisen kokonaislukuavaimen väliltä 0, 1,, n 1. Se on solmun v indeksi (index). äytetään kuitenkin yksinkertaisuuden vuoksi nimitystä solmu i indeksin sijasta. 9. luku 477 9. luku 478 0 1 2 3 4 5 6 BS DW X RD S (a) 0 1 2 3 4 5 6 0 W 35 D 247 1 49 D 335 2 1387 903 3 U 120 4 523 411 5 U 877 6 TW 45 (b) uva 9.5. Vierekkyysmatriisi: (a) graafin solmujen indeksit ja (b) taulukko. 9. luku 479 Taulukko 9.3. raafimetodien suoritusajat, kun graafi on toteutettu vierekkyysmatriisina. Tilavaatimus on (n 2 ), missä n on solmujen lukumäärä. aarien määrä on m. operaatio suoritusaika size, ismpty, replacelement, swap numvertice, numdges vertices (n) edges, directeddges, undirecteddges (m) elements, positions (n+m) endvertices, opposite, origin, destination, isdirected, degree, indegree, outdegree incidentdges, inncidentdges, (n) outncidentdges, adjacentvertices, indjacentvertices, outdjacentvertices aredjacent insertdge, insertdirecteddge, removedge, makeundirected, reversedirection, setdirectionrom, setdirectionto insertvertex, removevertex (n 2 ) 9. luku 480

9.3. raafin kulkeminen ulkeminen (traversal) on järjestelmällinen tapa käydä graafi läpi tutkien kaikki solmut ja kaaret. ulkeminen on tehokasta, kun se suoritetaan ajassa, joka on lineaarisessa suhteessa solmujen ja kaarien määrään. Tässä tarkastellaan suuntaamattomien graafien kulkemista. deltävää toimenpidettä toistetaan, kunnes tullaan umpikujaan eli solmuun, jonka kaikki viereiset solmut on aiemmin käyty. Tällöin peräännytään tultua reittiä takaisinpäin, kunnes löydetään sellainen käymätön kaari ja siis solmu, jolla on käymätön viereinen solmu. Tästä jatketaan taas eteenpäin käymättömiä solmuja edellisin ohjein. rosessi loppuu, kun lopulta peräännytään alkusolmuun s. Syvyyshaku nsimmäinen tarkasteltava menetelmä on syvyyshaku (depth first search), jota kuvan 9.6. tilanteet esittävät. loitetaan graafin määrätystä alkusolmusta s, joka kiinnitetään merkitsemällä se käydyksi. Solmu s on nyt nykyinen solmu u. raafi käydään läpi ottamalla (mielivaltaisesti valittu) kaari (u,v). os tämä johtaa jo käytyyn solmuun v jossakin tilanteessa, palataan solmuun u. os toisaalta solmu v oli käymätön, mennään siihen ja merkitään se nykyiseksi ja käydyksi solmuksi. 9. luku 481 Syvyyshakua voidaan kuvata esittämällä kaaret sen mukaan, mihin suuntaan ne kuljetaan. aaret, joiden päästä saadaan uusi, ennenkäymätön solmu, ovat löytökaaria (discovery edges, tree edges), ja kaaret, joiden kautta tullaan aiemmin käytyihin, ovat perääntymiskaaria (back edges) (kuva 9.6.). dellisten avulla saadaan haussa uusia solmuja ja jälkimmäisillä peräännytään. öytökaarista saadaan tarvittaessa myös virittävä puu. oodissa 9.1. on syvyyshakualgoritmin pseudokoodi. Siinä oletetaan olevan mukana mekanismi, jolla selvitetään, onko solmussa tai kaaressa käyty. 9. luku 482 (a) (b) (c) (d) uva 9.6. (alku) simerkki syvyyshausta. öytökaaret on merkitty yhtenäisillä viivoilla ja perääntymiskaaret katkoviivoilla: (a) syötegraafi ja (b) löytökaarien polku aina solmuun asti, kunnes kohdataan perääntymiskaari (B,). 9. luku 483 uva 9.6. (jatkoa) (c) Solmun saavuttaminen, joka on umpikuja, ja (d) erääntymisen jälkeen solmuun C, josta on edetty kaaren (C,) kautta jälleen umpikujaan, solmuun. 9. luku 484

(e) (f) lgorithm DS(v): nput: solmu v graafista utput: kaaret merkittyinä löytö ja perääntymiskaarina for jokaiselle solmuun v liittyvälle kaarelle e do if kaari e on käymätön then olkoon w kaaren e toinen päätesolmu if solmu w on käymätön then merkitse e löytökaareksi kutsu rekursiivisesti algoritmia DS(w) else merkitse e perääntymiskaareksi uva 9.6. (loppu) (e) erääntymisen jälkeen solmuun ja (f) perääntymisen jälkeen solmuun. oodi 9.1. Syvyyshakualgoritmi. 9. luku 485 9. luku 486 Syvyyshakuun liittyy monia seikkoja, joista mainitaan esimerkkinä se, että kun perääntymiskaaret yhdistävät aina solmun v aiemmin käytyyn solmuun u, ne muodostavat syklin graafissa. Seuraava lause esittää muutamia ominaisuuksia. ause 9.5. lkoon suuntaamaton graafi, jossa syvyyshaku aloitetaan solmusta s. Silloin ovat ominaisuudet: uljettaessa graafi käydään kaikki solmut läpi solmun s yhdistetyssä komponentissa. öytökaaret muodostavat s:n yhdistetyn komponentin virittävän puun. erustelu jätetään väliin, mutta se on esitettävissä vastaväitetodistusta käyttäen. yksinkertaista Syvyyshaku on suoritusajaltaan tehokas, kun solmussa tehtävät toimenpiteet (testi ja merkintä) ovat suoritettavissa vakioajassa. 9. luku 487 lgoritmia kutsutaan täsmälleen kerran jokaista solmua kohti, ja jokainen kaari tutkitaan kahdesti, kerran sen kummastakin päätesolmusta käsin. uutamin edellytyksin solmun testin ja merkinnän vakioaika, solmu ja kaarimetodien vakiollinen suoritusaika (vierekkyyslista, mutta ei matriisi) ja systemaattinen menettely käydä solmuun liittyvät kaaret ainoastaan kerran kussakin (vierekkyyslista) saadaan syvyyshaulle tehokas suoritus aikaan. ause 9.6. lkoon graafi n solmuineen ja m kaarineen. Syvyyshaku toimii siinä ajassa (n+m). isäksi on olemassa syvyyshakuun perustuvia algoritmeja, jotka toimivat ajassa (n+m) ongelmille: Sen tutkiminen, onko yhdistetty. Virittävän puun laskeminen, kunhan on yhdistetty. :n yhdistettyjen komponenttien laskeminen. ahden solmun välisen polun etsiminen tai selvittäminen, ettei sitä ole. ahdollisen syklin laskeminen. 9. luku 488

eveyshaku 0 0 1 Syvyyshaun tapaan leveyshaku (breadth first search) kulkee graafin yhdistetyn komponentin täysin läpi. eveyshaku etenee konservatiivisesti tasoittain graafia (kuva 9.7.), kun taas sysyyshaussa sukellettiin syvyyksiin. lkoon aloitussolmu s tasona 0. Se on aluksi kiintopisteenä, josta käydään seuraava taso 1 läpi eli solmun s vierekkäiset solmut. Solmuun tultaessa se merkitään käydyksi. Seuraavaksi käydään tason 1 solmujen vierekkäiset solmut läpi, ja tämä on taso 2. äin jatketaan tasolta i tasolle i+1, kunnes kaikki solmut ja kaaret on käyty läpi. eveyshaun kauniina piirteenä on, että jokainen solmu käydään läpi ja merkitään (nimetään, leimataan) lyhimmän polun mielessä eli minimimäärällä kaaria aloitussolmusta lukien. os solmu v sijaitsee leveyshaun tasolla i, sen lyhimmän polun pituus solmusta s on i. 9. luku 489 (a) uva 9.7. (alku) simerkki leveyshausta, jossa solmuihin liittyvät kaaret tutkitaan aakkosjärjestyksessä vierekkäisistä solmuista. öytökaaret on merkitty yhtenäisillä nuolilla ja vastakkaiskaaret (ei vielä tässä) katkoviivoilla. (a) raafi aloitusvaiheessa ja (b) tason 1 käsittely. (b) 9. luku 490 0 1 2 0 1 2 3 0 1 2 3 0 1 2 3 4 4 5 (c) (d) (e) (f) uva 9.7. (jatkoa) (c) Tason 2 käsittely ja (d) tason 3 käsittely. uva 9.7. (loppu) (e) Tason 4 ja (f) tason 5 käsittelyt. 9. luku 491 9. luku 492

Syvyyshaun tapaan leveyshaussa merkitään kaaret kahdella tyypillä. Uusiin solmuihin johtavat ovat jälleen löytökaaria, mutta aiemmin käytyihin johtavat ovat vastakkaiskaaria (cross edges) (kuva 9.7.(f)) erotuksena syvyyshakuun, sillä nämä eivät yhdistä solmua edeltäjiinsä. eveyshaun pseudokoodiesitys on koodina 9.2. Se tarvitsee lisätilaa kaarien ja solmujen merkitsemiseen ja tasoihin liitettävien säiliöiden tallettamiseen. lgoritmi ei ole rekursiivinen. eveyshaulla on monia ominaisuuksia, joita selostetaan seuraavasti. ause 9.7. lkoon suuntaamaton graafi, jossa leveyshaku aloitetaan solmusta s. Silloin ovat ominaisuudet: raafissa käydään läpi kaikki solmut s:n yhdistetyssä komponentissa. öytökaaret muodostavat s:n yhdistetyn komponentin virittävän puun T, jota kutsutaan leveyshakupuuksi. eveyshakupuun T polku solmusta s solmuun v tasolle i käsittää i kaarta ja mikä tahansa muu polku niiden välillä on ainakin yhtä pitkä. os (u,v) ei ole T:ssä, u:n ja v:n tasonumerot eroavat enintään yhdellä. 9. luku 493 lgorithm BS(s): alustetaan säiliö 0 sisältämään solmu s i 0 while i ei ole tyhjä do luodaan tyhjä säiliö i+1 for jokaiselle solmulle v säiliöstä i do for jokaiselle solmuun v liittyvälle kaarelle e do if kaari e on käymätön then olkoon w kaaren e toinen päätesolmu if solmu w on käymätön then merkitään e löytökaareksi lisätään w säiliöön i+1 else merkitään e vastakkaiskaareksi i i + 1 oodi 9.2. eveyshakualgoritmi. 9. luku 494 ause 9.8. lkoon graafi n solmuineen ja m kaarineen. eveyshaku graafissa vaatii ajan (m+n). n myös muita samassa ajassa toimivia, leveyshakuun perustuvia algoritmeja: Sen tutkiminen, onko yhdistetty. :n virittävän puun laskeminen, kunhan on yhdistetty. :n yhdistettyjen komponenttien laskeminen. :n mille tahansa solmulle v lyhimmän polun laskeminen aloitussolmusta s. umpaa tulisi käyttää näistä menetelmistä, riippuu sovelluksesta. sim. lyhimmän polun laskennassa leveyshaku on syvyyshakua parempi. Syvyyshaku on puolestaan soveliaampi vastattaessa monimutkaisiin yhteyskysymyksiin, kuten voidaanko jokainen graafin solmupari yhdistää kahdella erillisellä polulla. ämä tulokset pätevät kuitenkin vain suuntaamattomille graafeille, joten seuraavaksi tarkastellaan suunnattuja. 9. luku 495 9.4. Suunnatut graafit raafi on suunnattu, jos sen kaaret ovat suunnattuja. Saavutettavuus Saavutettavuuden (reachability) tärkeässä käsitteessä on kysymys siitä, mihin suunnatussa graafissa päästään kulkemaan. ulkeminen graafissa tapahtuu luonnollisesti kaarien määrätyissä suunnissa, mikä vaikuttaa itse prosessiin. Solmuilla u ja v sanotaan u:n saavuttavan v:n (ja v on saavutettavissa u:sta), jos on olemassa suunnattu polku u:sta v:hen. Suunnattu graafi on vahvasti yhdistetty (strongly connected), jos mille tahansa sen solmuparille u ja v edellinen saavuttaa jälkimmäisen ja päinvastoin. :n suunnattu sykli (directed cycle) on sellainen, jossa kaikki sen kaaret käydään suuntiensa mukaan läpi. on syklitön (acyclic), jos siinä ei ole yhtään suunnattua sykliä (kuva 9.8.). 9. luku 496

BS BS RD RD S S DW DW X X (a) (b) uva 9.8. (alku) simerkkejä saavutettavuudesta suunnatussa graafissa: (a) suunnattu polku lentokentältä BS kentälle X. 9. luku 497 uva 9.8. (jatkoa) (b) Suunnattu sykli (RD,, DW, X, RD). 9. luku 498 BS BS RD RD S S DW DW X X (c) uva 9.8. (jatkoa) (c) Solmusta RD saavutettavien solmujen ja kaarien aligraafi käsittää muut paitsi solmut ja BS. (d) uva 9.8. (loppu) (d) atkoviivoilla merkityt kaaret poistamalla saadaan syklitön suunnattu graafi. 9. luku 499 9. luku 500

Suunnatun graafin transitiivinen sulkeuma (transitive closure) * käsittää :n solmut ja kaaret (u,v), joille on olemassa suunnattu polku solmusta u solmuun v graafissa. * määritellään siis niin, että otetaan ja lisätään sellaiset kaaret (u,v), joissa v on saavutettavissa solmusta u (eikä : ssä ollut jo kyseisiä kaaria). Saavutettavuutta koskevia mielenkiintoisia kysymyksiä ovat suunnatun graafin tapauksessa seuraavat: nko solmu v saavutettavissa solmusta u? aikkien sellaisten solmujen etsiminen, jotka ovat saavutettavissa solmusta s käsin. nko vahvasti yhdistetty? nko syklitön? :n transitiivisen sulkeuman laskeminen. Suunnatun graafin kulkeminen uten suuntaamattomilla graafeilla, suunnatuillakin käytetään samankaltaisia kulkemisalgoritmeja. inoa ero on, että nyt on otettava huomioon kaarien suunnat. Seuraavaksi esitetään rekursiivinen suunnattu syvyyshakualgoritmi koodina 9.3. Sen käytöstä on esimerkki kuvassa 9.9. lgorithm DirectedDS(v): merkitään solmu v käydyksi for jokaiselle solmun v lähtevälle kaarelle (v,w) do if solmussa w ei ole käyty then kutsu rekursiivisesti algoritmia DirectedDS(w) oodi 9.3. Suunnatun syvyyshaun algoritmi. 9. luku 501 9. luku 502 1 BS BS RD 7 RD 5 2 S S DW DW 3 X X 4 6 (a) (b) uva 9.9. (alku) simerkki suunnatun graafin syvyyshausta: (a) välivaihe, jossa saavutetaan ensi kertaa aiemmin käyty solmu (DW). uva 9.9.(loppu) (b) äättynyt suunnatun graafin syvyyshaku, jossa on solmujen käyntijärjestys merkitty numeroin. 9. luku 503 9. luku 504

Suunnatun graafin syvyyshakualgoritmi toimii suuntaamattoman tapaan ajassa (n+m), missä n on solmujen ja m kaarien määrä. uutamat suunnattuihin graafeihin liittyvät ongelmat, kuten sen selvittäminen, onko graafi vahvasti yhdistetty, tai transitiivisen sulkeuman laskeminen, vaativat ajan (n(n+m)). 3 C 1 D 2 B 2 C 1 D 4 B Suunnatut syklittömät graafit 6 4 5 3 5 6 Suunnattuja syklittömiä graafeja (directed acyclic graph, D) tarvitaan monissa sovelluksissa. simerkkinä on ava kielisen ohjelman luokkien välinen periytyminen. 7 8 8 7 lkoon suunnattu syklitön graafi, jossa on n solmua. Sen topologinen järjestys (topological ordering) on solmujen järjestys v 1,, v n, missä jokaiselle kaarelle (v i,v j ) on i<j. Topologinen järjestys merkitsee, että mikä tahansa :n suunnattu polku käy solmut läpi kasvavassa järjestyksessä. uvassa 9.10. on kaksi esimerkkiä näistä. Topologinen järjestys lasketaan topologisen lajittelun (topological sorting) algoritmilla, mutta sitä ei esitetä tässä. 9. luku 505 9 (a) uva 9.10. aksi topologista järjestystä samasta suunnatusta syklittömästä graafista. ärjestysnumero on merkitty solmun viereen. 9. luku 506 9 (b)