58131 Tietorakenteet ja algoritmit (syksy 2015) Harjoitus 10 (16.–20.11.2015) 1. Järjestä kuvan verkko topologisesti käyttäen luentomonisteessa sivulla 491 esitettyä menetelmää. Oleta, että solmut ovat vieruslistoissa aakkosjärjestyksessä. d c a b e f 2. (a) Todista, että jokaisessa syklittömässä suunnatussa verkossa (DAG) on olemassa solmu, johon ei tule kaarta mistään muusta solmusta. (b) Tämän perusteella voidaan tuottaa topologinen järjestys seuraavasti: Topo(V,E) if V tyhjä return etsi v ∈ V johon ei tule kaarta print(v) Topo(V−{v},E − {(v,u) | u ∈ V}) Mikä on menetelmän aikavaativuus? Onko tämä huonompi vai parempi kuin luennoilla esitetylle menetelmälle? 3. Muodosta allaolevan verkon vahvasti yhtenäiset komponentit käyttäen luentomonisteessa esitettyä algoritmia käyttäen. Oleta, että kaaret on talletettu vieruslistoihin aakkosjärjestyksessä. Mikä on pienin määrä lisättäviä kaaria, jolla alkuperäisestä verkosta saataisiin vahvasti yhtenäinen? a c b e f d 1 4. Suuntaamaton verkko G = (V, E) on esitetty vieruslistoina. Verkosta voidaan olettaa, että se on yhtenäinen. Ongelmana on päättää, voidaanko verkosta poistaa jokin kaari siten, että verkko säilyy yhtenäisenä. Jos voidaan, pitää lisäksi löytää yksi tällainen kaari. Esitä ongelmalle yksityiskohtainen ajassa O(|V | + |E|) toimiva algoritmi. Voisiko ongelman ratkaista peräti ajassa O(|V |)? 5. Tarkastellaan suuntaamatonta yhtenäistä verkkoa, jonka solmut kuvaavat tietokoneita ja kaaret niiden välisiä tietoliikenneyhteyksiä. Verkko on haavoittuva, jos siinä on solmu, jonka poistaminen verkosta rikkoo sen yhtenäisyyden. Toisin sanoen verkko on haavoittuva, jos yhden tietokoneen poistaminen verkosta voi estää kahden muun tietokoneen viestinnän. Esimerkiksi vasemmanpuoleinen on haavoittuva sillä solmun b poisto rikkoo yhtenäisyyden. Oikeanpuoleinen verkko taas ei ole haavoittuva. a---b---c \ / \ / d e a---b---c \ / \ / d---e Esitä algoritmi, joka tarkistaa, onko verkko haavoittuva. Verkko on tallennettu muistiin vieruslistaesityksenä. Määritä lisäksi algoritmisi aikavaativuus. 6. Ylimääräinen lisätehtävä Anna ajassa O(| V | + | E |) toimiva algoritmi, joka saa syötteksi suunnatun verkon G = (V, E) ja tutkii onko verkossa sellaista solmua v, johon on polku kaikista muista verkon solmuista. Perustele algoritmisi aikavaativuus. Vihje: Transpoosiverkko ja syvyyssuuntainen metsä. 7. Ylimääräinen lisätehtävä Tarkastellaan seuraavaa peliä: Pelilautana on suunnattu verkko G, jonka jokaisessa solmussa on yksi suklainen pääsiäismuna. Saat siirrellä pelinappulaasi verkon kaaria (p, q) pitkin eteenpäin valitsemastasi lähtösolmusta s määrättyyn maalisolmuun t. Kaaria saa kulkea vain niiden nuolten suuntaan eikä peliä saa enää jatkaa sen jälkeen, kun maalisolmu on saavutettu. Aina, kun nappulasi on solmussa, jossa on muna, saat munan itsellesi ja solmu tyhjentyy. Aikaisemmin tyhjennettyyn solmuun saa palata uudelleen (jos sinne pääsee kulkemalla kaaria oikeaan suuntaan), mutta tällöin solmusta ei enää saa uutta munaa. Miten lasket sen, mistä solmusta sinun kannattaa aloittaa peli, jotta saisit kerättyä mahdollisimman monta munaa? Algoritmia ei tarvitse kirjoittaa auki, vaan riittää esittää algoritmin toimintaidea. 2
© Copyright 2024