58131 Tietorakenteet ja algoritmit, erilliskoe 15.9.2015 Tentissä saa olla mukana käsin kirjoitettu yksi A4-kokoinen "lunttilappu", jonka molemmilla puolilla saa olla tekstiä. Kirjoita jokaisen vastauspaperin yläkulmaan kurssin nimi, kokeen päivämäärä, nimi, nimikirjoitus ja opiskelijanumero. Tässä kokeessa ei ole tarpeen kirjoittaa jokaista tehtävää erilliselle konseptipaperille. Tehtävissä, joissa pyydetään algoritmia, voit käyttää luentojen (Cormenin) tyyppistä pseudokoodia tai muita ymmärrettäviä pseudokoodityylejä, tai oikeata ohjelmointikieltä, esim. Javaa. Jos käytät oikeata ohjelmointikieltä, selitä erityisen hyvin, mitä ohjelmassasi tapahtuu, äläkä käytä mitään kielen erikoista piirrettä tai valmiita kirjastoja. Tehtävissä, joissa todetaan, että voit olettaa tunnetuksi luennoilla esitetyt algoritmit, sinun ei tarvitse kirjoittaa auki pseudokoodia esimerkiksi Kruskalin algoritmille, kunhan on selvää, mitä algoritmia käytät. Näissä tehtävissä saat myös olettaa tunnetuksi, mitä tiedetään luennoilla esitettyjen algoritmien aika- ja tilavaativuuksista. Vastaukset on aina perusteltava. Esimerkiksi jos kysytään algoritmin aikavaativuutta, ei riitä todeta aikavaativuutta ilman selitystä. Ellei muuta sanota, saa aika- ja tilavaativuudet esittää O-muotoisina, mutta tarkoitus on antaa mahdollisimman tiukkoja pahimman tapauksen vaativuuksia. 1. [12 pistettä] Vastaa lyhyesti (muutamalla rivillä) seuraaviin kysymyksiin. (a) Mitä tarkoittaa, että järjestämisalgoritmi on vakaa (englanniksi ”stable”)? (b) Mainitse kaksi kurssilla esitettyä tehokasta tietorakennetta joukko-operaatioiden insert, delete ja search toteuttamiseksi. Mitkä ovat näiden operaatioiden aikavaativuudet mainitsemillasi tietorakenteilla? (c) Mikä on avoin hajautus (englanniksi ”open addressing”)? (d) Mitkä ovat maksimikeon kekoehdot? (e) Mitä tarkoitetaan suunnatun verkon vahvasti yhtenäisellä komponentilla? (f ) Millainen on ahne algoritmi? 2. [12 pistettä] Syötteenä on annettu binääripuu, jonka kuhunkin solmuun on talletettu yksi kokonaisluku mutta josta muuten ei voi tehdä mitään oletuksia. Esitä tehokas algoritmi, joka tarkastaa, toteuttaako annettu binääripuu hakupuuehdon. Mikä on algoritmisi aikavaativuus? 3. [12 pistettä] Esitä tehokas algoritmi, jolla k järjestettyä listaa voidaan lomittaa yhdeksi järjestetyksi listaksi. Täysien pisteiden saamiseksi algoritmin tulisi toimia ajassa O(n log k), missä n on listojen yhteispituus. Voit käyttää apuna mitä tahansa kurssilla esitettyjä tietorakenteita ja niihin liittyviä aikavaativuuksia. Käännä! 4. [12 pistettä] (a) [4 pistettä] Tarkastele seuraavaa AVL-puuta. Lisää siihen avaimet 17 ja 13 yksitellen ja tässä järjestyksessä. Piirrä askel askeleelta, miten puu muuttuu. 11 / \ 21 / \ 15 20 \ 19 5 \ 8 (b) [4 pistettä] Tarkastele samaa puuta kuin edellisessä kohdassa (siis ennen lisäyksiä). Poista siitä avaimet 5 ja 21 yksitellen ja tässä järjestyksessä. Piirrä askel askeleelta, miten puu muuttuu. (c) [4 pistettä] Tarkastele seuraavaa minimikekoa A puunmuotoisena. Suorita heapdel-min(A) ja sen jälkeen heap-insert(1). Piirrä askel askeleelta, miten puu muuttuu. 2 / \ 3 7 / \ / 6 13 10 5. [12 pistettä] Tässä tehtävässä ei tarvitse esittää varsinaista ratkaisualgoritmia, vaan esittää ratkaisun idea. (a) [6 pistettä] Oletamme, että painotetussa verkossa ei ole negatiivisia painoja. Dijkstran algoritmilla voi etsiä verkosta kahden solmun välisen polun, jossa kaarten painojen summa on pienin. Entä jos tehtävänä on löytää polku, jossa kaarten painojen tulo on pienin? Mitä muutoksia Dijkstran algoritmiin vaaditaan tässä tapauksessa? (b) [6 pistettä] Rautatieverkosto on esitetty suuntaamattoma verkkona G = (V, E), jonka solmuina on kaikki rautatieliikennepaikat ja kaarina niiden väliset ratayhteydet. Kutakin ratayhteyttä (u, v) meneville kuljetuksille on asetettu maksimipaino w(u, v). Tehtävänä on määrittää suurin paino, jolle voidaan taata rautatiekuljetus minkä tahansa kahden liikennepaikan välillä. Miten ratkaisisit ongelman soveltamalla kurssilla esitettyjä verkko-ongelmia ja niiden tunnettuja ratkaisualgoritmeja? Vastauksestasi tulee ilmetä selvästi, mitkä ovat käyttämäsi tunnetun verkkoalgoritmin syötteet ja tulosteet, miten niitä pitää mahdollisesti muokata tässä annetun ongelman ratkaisemiseksi sekä mikä on lopullisen algoritmisi aikavaativuus. Sen sijaan sinun ei tarvitse selittää kurssilla esitettyjen algoritmien toimintaa. Onnea kokeeseen!
© Copyright 2024