tehtävät

Transcription

tehtävät
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