58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe ratkaisuja (Jyrki Kivinen)

Samankaltaiset tiedostot
TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

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

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

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

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

Algoritmi on periaatteellisella tasolla seuraava:

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

58131 Tietorakenteet ja algoritmit (kevät 2016) Ensimmäinen välikoe, malliratkaisut

58131 Tietorakenteet (kevät 2008) 1. kurssikoe, ratkaisuja

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.

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

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

v 1 v 2 v 3 v 4 d lapsisolmua d 1 avainta lapsen v i alipuun avaimet k i 1 ja k i k 0 =, k d = Sisäsolmuissa vähint. yksi avain vähint.

Tietorakenteet, laskuharjoitus 7, ratkaisuja

(a) L on listan tunnussolmu, joten se ei voi olla null. Algoritmi lisäämiselle loppuun:

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Johdatus graafiteoriaan

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

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

Algoritmit 1. Luento 8 Ke Timo Männikkö

Algoritmit 1. Luento 13 Ti Timo Männikkö

Binäärihaun vertailujärjestys

4. Joukkojen käsittely

Datatähti 2019 loppu

Pienin virittävä puu (minimum spanning tree)

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

isomeerejä yhteensä yhdeksän kappaletta.

Luku 8. Aluekyselyt. 8.1 Summataulukko

Algoritmit 2. Luento 2 To Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

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

Algoritmit 1. Luento 13 Ma Timo Männikkö

Fibonacci-kasoilla voidaan toteuttaa samat operaatiot kuin binomikasoilla.

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

Algoritmit 1. Luento 7 Ti Timo Männikkö

Algoritmit 2. Luento 2 Ke Timo Männikkö

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

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

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

Algoritmien suunnittelu ja analyysi (kevät 2004) 1. välikoe, ratkaisuja

A TIETORAKENTEET JA ALGORITMIT

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

Algoritmit 1. Luento 14 Ke Timo Männikkö

b) Määritä myös seuraavat joukot ja anna kussakin tapauksessa lyhyt sanallinen perustelu.

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

Algoritmit 2. Luento 7 Ti Timo Männikkö

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

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

10. Painotetut graafit

Tietorakenteet, laskuharjoitus 6,

Algoritmit 2. Luento 5 Ti Timo Männikkö

= 5! 2 2!3! = = 10. Edelleen tästä joukosta voidaan valita kolme särmää yhteensä = 10! 3 3!7! = = 120

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

Koe ma 1.3 klo salissa A111, koeaika kuten tavallista 2h 30min

Algoritmit 2. Luento 5 Ti Timo Männikkö

b) Olkoon G vähintään kaksi solmua sisältävä puu. Sallitaan verkon G olevan

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

Tarkennamme geneeristä painamiskorotusalgoritmia

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

Näin ollen saadaan tulos rad(g) diam(g). Toisaalta huomataan, että verkon G kaikilla solmuilla x ja y pätee kolmioepäyhtälön nojalla havainto

5. Keko. Tietorakenne keko eli kasa (heap) on tehokas toteutus abstraktille tietotyypille prioriteettijono, jonka operaatiot ovat seuraavat:

Algoritmit 2. Luento 11 Ti Timo Männikkö

Kierros 4: Binäärihakupuut

B + -puut. Kerttu Pollari-Malmi

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

Ei-yhteydettömät kielet [Sipser luku 2.3]

Tietorakenteet, esimerkkivastauksia viikon 12 laskareihin

Lineaarialgebra ja matriisilaskenta I, HY Kurssikoe Ratkaisuehdotus. 1. (35 pistettä)

Verkon värittämistä hajautetuilla algoritmeilla

CS-A1140 Tietorakenteet ja algoritmit

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

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

13 Lyhimmät painotetut polut

Malliratkaisut Demot

6. Approksimointialgoritmit

Algoritmit 1. Luento 9 Ti Timo Männikkö

Malliratkaisut Demot

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

j(j 1) = n(n2 1) 3 + (k + 1)k = (k + 1)(k2 k + 3k) 3 = (k + 1)(k2 + 2k + 1 1)

v 8 v 9 v 5 C v 3 v 4

Algoritmit 2. Luento 6 To Timo Männikkö

(p j b (i, j) + p i b (j, i)) (p j b (i, j) + p i (1 b (i, j)) p i. tähän. Palaamme sanakirjaongelmaan vielä tasoitetun analyysin yhteydessä.

Algoritmit 2. Luento 9 Ti Timo Männikkö

1.1 Tavallinen binäärihakupuu

14 Tasapainotetut puurakenteet

10. Painotetut graafit

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

58131 Tietorakenteet (kevät 2009) Harjoitus 9, ratkaisuja (Antti Laaksonen)

Algoritmit 2. Luento 10 To Timo Männikkö

Tehtävä 8 : 1. Tehtävä 8 : 2

Miten osoitetaan joukot samoiksi?

Algoritmit 2. Luento 6 Ke Timo Männikkö

Luku 4. Tietorakenteet funktio-ohjelmoinnissa. 4.1 Äärelliset kuvaukset

Tietorakenteet ja algoritmit Hakurakenteet Ari Korhonen

58131 Tietorakenteet (kevät 2009) Harjoitus 6, ratkaisuja (Antti Laaksonen)

Pikalajittelu: valitaan ns. pivot-alkio esim. pivot = oikeanpuoleisin

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

Transkriptio:

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe 12.9.2018 ratkaisuja (Jyrki Kivinen) 1. [10 pistettä] Iso-O-merkintä. (a) Pitääkö paikkansa, että n 3 + 5 = O(n 3 )? Ratkaisu: Pitää paikkansa. Pitää osoittaa, että joillain d ja n 0 pätee n 3 +5 dn 3, kun n n 0. Kun n 2, pätee n 3 8 > 5 ja siis n 3 + 5 < 5n 3. Voidaan siis valita d = 5 ja n 0 = 2. (b) Pitääkö paikkansa, että n = O(log 2 n)? Ratkaisu: Ei pidä paikkaansa. Tarkastellaan aluksi suhdetta n/ log 2 n, kun n = m k joillain m, k 1. Tällöin tunnettujen ominaisuuksien perusteella n log 2 n = mk/2 k log 2 m = mk/2 1 k m log 2 m mk/2 1. k Erityisesti valitsemalla k = ja n = m jollain m 1 nähdään, että ja siis n log 2 n m/2 1 = n1/ log 2 n n 1/ n. Tehdään nyt vastaoletus, että n = O(log 2 n) pätee. Siis joillain d > 0 ja n 0 1 pätee n d log 2 n, kun n n 0. Valitaan n = m, missä m = max { n 0, d }+1. Nyt n > n 0 ja n 1/ / > d. Soveltamalla edellä johdettua epäyhtälöä nähdään, että d log 2 n d n < n n 1/ vastoin oletusta; ristiriita. Pisteytys: Kummastakin kohdasta on voinut saada 5 pistettä. Tässä on nimenomaan haettu täsmällisiä todistuksia, joten intuitiivisista luonnehdinnoista ei ole saanut pisteitä. Kohdassa (b) on saanut vedota mihin tahansa yleisesti tunnettuihin logaritmifunktion ominaisuuksiin, kunhan se on tehty täsmällisesti; epämääräinen viittaaminen sen kasvunopeuteen ei kelpaa. 2. [8 pistettä] Pikajärjestäminen. Selitä, miten pikajärjestäminen toimii ja mikä sen aikavaativuus on pahimmassa tapauksessa ja keskimäärin. Sopiva pituus tekstille on korkeintaan 2 konseptisivua. Mitään todistuksia ei tarvitse esittää. Ratkaisu: Katso luentomateriaalia. Pisteytys: Tehtävä oli yleisesti osattu erittäin hyvin. Selkeistä yksittäisistä virheistä algoritmin kuvauksessa tai aikavaativuudessa on vähennetty pari pistettä.

3. [12 pistettä] Binääripuut ja hakupuut. (a) Esitä yksityiskohtaisena pseudokoodina algoritmi, joka tarkastaa, toteuttavatko syötteenä annetun puun avaimet binäärihakupuuehdon. Syötteenä annetun puun jokaisessa solmussa on kokonaislukuarvoinen avain, ja se on toteutettu samanlaisena linkitettynä rakenteena kuin binääripuut yleensäkin. Puun tasapainoisuuteen ei tarvitse kiinnittää huomiota. Algoritmin aikavaativuuden tulee olla lineaarinen puun kokoon nähden. Ratkaisu: Kirjoitetaan proseduuri onhakupuu(p, ala, yla), joka saa argumenttina osoittimen p puun solmuun ja kokonaislukuarvoiset ala- ja ylärajan. Proseduuri palauttaa true, jos solmusta p alkava alipuu toteuttaa hakupuuehdon ja sen avaimet ovat välillä [ala, yla]. Haluttu ongelma ratkaistaan kutsulla onhakupuu(t. root, ala, yla), missä ala ja yla ovat rajat avainten mahdolliselle arvoalueelle. onhakupuu(p, ala, yla) if p. key < ala or p. key > yla if not onhakupuu(p. left, ala, p. key 1) if not onhakupuu(p. right, p. key +1, yla) return true Pisteytys: Maksimi (a)-kohdasta oli 6 pistettä. Tyypillinen virhe oli, että hakupuuehdon tarkastamisessa verrattiin solmua vain sen lapsiin eikä otettu huomioon, että myös esim. solmun x vasemman lapsen kaikissa jälkeläissä pitää olla pienempi avain kuin x:ssä. Tällainen algoritmi siis virheellisesti hyväksyy esim. puun 6 / 5 \ 8 Tällaisesta ratkaisusta, jos se on muuten selkeästi esitetty ja osoittaa binääripuiden rakenteen hallintaa, on saanut pistettä. (b) Selitä, miten tasapainottamattoman binäärihakupuun poisto-operaatio (Delete) toimii. Yksityiskohtaista pseudokoodia ei tarvitse esittää, voit esittää algoritmin toimintaperiaatteen kuvien ja esimerkkien avulla. Selityksestä pitää kuitenkin käydä ilmi tärkeimmät erilaiset tapaukset ja niiden käsittely. Myös mahdolliset apuproseduurit pitää selittää samalla tarkkuustasolla. Ratkaisu: katso luentomateriaalia. Pisteytys: Maksimi (b)-kohdasta oli 6 pistettä. Kun tehtävänannossa pyydettiin selittämään mahdolliset apuproseduurit, tällä tarkoitettiin erityisesti kaksilapsisen avaimen poistossa tarvittavaa seuraavan avaimen etsimistä; sen puuttumisesta on vähennetty 1 piste. Kaksilapsisen solmun tapauksen muista osista on saanut 2 pistettä, ja loput 3 pistettä yleisperiaatteen ja helpompien lapsettoman ja yksilapsisen tapauksen käsittelystä.

. [6 pistettä] Esitä, miten AVL-puun tasapainotus tapahtuu avaimen lisäyksen jälkeen. Sopiva esitystapa on muutama kuva ja niihin liittyvä lyhyt selitys mahdollisista tilanteista ja niiden käsittelemisestä. Ratkaisu: katso luentomateriaalia. Pisteytys: Täysien pisteiden saamiseksi on pitänyt esittää kaikki eri tavat tehdä kiertoja ja selittää, miten niiden välillä valitaan. Osapisteitä on saanut, jos kuitenkin on jollain tasolla selitetty kiertoja ja annettu ainakin yksi kunnollinen esimerkki. 5. [12 pistettä] Väritetty verkko. Tarkastellaan tilannetta, jossa suunnatun verkon jokaiseen kaareen liittyy väri, joka on joko punainen tai sininen. Muuten kaarilla ei ole painoja. Sanomme verkon polkua sallituksi, jos polulla ei missään kohdassa ole peräkkäin kolmea punaista kaarta. Siis aina viimeistään kahden peräkkäisen punaisen kaaren jälkeen pitää tulla sininen kaari tai polun pitää päättyä. (a) Jos kaarten väreistä ei tarvitse välittää, niin tunnetusti kahden solmun välinen lyhin polku ei käy missään solmussa useammin kuin kerran. Entä jos tarkastelemmekin lyhimpiä sallittuja polkua väritetyssä verkossa? Anna esimerkki väritetystä verkosta, jossa kahden solmun välinen lyhin sallittu polku käy samassa solmussa kahdesti. Ratkaisu: Allaolevassa verkossa lyhin sallittu polku a e on (a, b, c, d, c, e), joka käy solmussa c kahdesti: a b c e d Pisteytys: Tämä oli yleensä osattu erittäin hyvin. (b) Esitä tehokas algoritmi, joka saa syötteenä suunnatun väritetyn verkon G ja sen kaksi solmua s ja t ja palauttaa lyhimmän sallitun polun solmusta s solmuun t. Mikä on algoritmisi aikavaativuus? Algoritmista riittää esittää toimintaperiaate yleisellä tasolla. Voit käyttää apuna mitä tahansa kurssilla esitettyjä algoritmeja, niiden tunnettuja aikavaativuuksia jne. Ratkaisu: Olkoon verkossa G solmujen joukko V ja kaarten joukko E. Muodostetaan uusi verkko G, jonka solmujen joukko on V = V { 0, 1, 2 }. Siis jokaista alkuperäisen verkon solmua v kohti uuteen verkkoon tulee kolme solmua (v, 0), (v, 1) ja (v, 2). Verkko G on tavallinen suunnattu painottamaton verkko, siis erityisesti kaarille ei tule mitään värejä. Ajatuksena on, että luvut 0, 1 ja 2 vastaavat sitä, kuinka monta punaista kaarta on kuljettu edellisen sinisen kaaren jälkeen. Siis jos verkossa G on punainen kaari (u, v), niin verkkoon G laitetaan

kaaret ((v, 0), (u, 1)) ja ((v, 1), (u, 2)). Solmusta (v, 2) ei lähde kaarta, koska se vastaisi kolmatta peräkkäistä punaista kaarta eikä siis olisi sallittu. Vastaavasti jos verkossa G on sininen kaari (u, v), niin verkkoon G tulee kaari ((v, p), (u, 0)) kaikilla p = 0, 1, 2. Nyt (v 1,..., v k ) on sallittu polku väritetyssä verkossa G, jos ja vain jos joillain p i verkossa G on polku ((v 1, p 1 ),..., (v k, p k )). Saadaan seuraava algoritmi: i. Muodosta edellä kuvattu verkko G. ii. Suorita verkossa G leveyssuuntainen haku alkaen solmusta (s, 0). iii. Leveyssuuntaisen haun perusteella valitse lyhin solmusta (s, 0) alkava polku, joka päättyy johonkin solmuista (t, 0), (t, 1) tai (t, 2). Olkoon tämä polku ((v 1, p 1 ),..., (v k, p k )). iv. Nyt (v 1,..., v k ) on haluttu verkon G polku. Selvästi verkon G muodostaminen vie ajan O( V + E ). Leveyssuuntainen haku vie ajan O( V + E ) = O( V + E ). Siis koko algoritmin aikavaativuus on O( V + E ). Pisteytys: Tämä oli tarkoitettu haastavaksi tehtäväksi, jossa vaaditaan tunnetun algoritmin muuntamista uuden ongelman ratkaisemiseksi. Niinpä pisteitä ei ole saanut ratkaisuista, joissa on vain vedottu leveyssuuntaiseen hakuun tai Dijkstran algoritmiin selittämättä, miten niitä pitää tätä ongelmaa varten muokata. 6. [12 pistettä] Ilmoita kustakin seuraavista väitteistä, pitääkö se paikkansa. Perustele vastauksesi täsmällisesti. Kaikissa kohdissa oletetaan, että G on painotettu suuntaamaton verkko, jonka kaikilla kaarilla on eri paino. (a) Jos kahden solmun s ja t välinen lyhin polku sisältää kaaren e, niin kaari e sisältyy myös verkon G pienimpään virittävään puuhun. Ratkaisu: Väite ei pidä paikkaansa. Intuitiivisesti pienimpään virittävään puuhun valitaan kaaret siten, että koko verkon yhdistämisestä aihetuva kokonaiskustannus pysyy pienenä. Vaikka jokin kaari olisi kuinka hyvä kahden annetun solmun yhdistämisessä, se voi jäädä pois puusta, jos siitä ei ole hyötyä puun muiden osien kanssa. Täsmällisesti väite osoitetaan epätodeksi vastaesimerkillä. Esim. allaolevassa verkossa solmujen b ja c välinen lyhin polku koostuu yhdestä kaaresta, joka kuitenkaan ei kuulu pienimpään virittävään puuhun: a 2 3 b c (b) Jos e on jonkin verkon G syklin kaarista painoltaan pienin, niin se kuuluu verkon G pienimpään virittävään puuhun.

Ratkaisu: Väite ei pidä paikkaansa. Intuitiivisesti verkossa voi olla vaikka millaisia hyvin painavista kaarista koostuvia syklejä, eikä niiden perusteella voi suoraan tehdä mitään päätelmiä siitä, mitä kaaria pienimpään virittävään puuhun tulee. Vastaesimerkiksi sopii esim. seuraava verkko, jossa syklin (b, c, d, b) pienin kaari (b, c) ei kuulu pienimpään virittävään puuhun: a 2 3 b c 6 5 d (c) Jos e on jonkin verkon G syklin kaarista painoltaan suurin, niin se ei kuulu verkon G pienimpään virittävään puuhun. Ratkaisu: Väite pitää paikkansa. Todistus: Olkoon T jokin virittävä puu, joka sisältää kaaren e, ja S sykli, jonka painavin solmu e on. Kun kaari e poistetaan puusta, syntyvässä verkossa (V, T { e }) on kaksi yhtenäistä komponenttia. Koska poistettu kaari e yhdistää nämä kaksi komponenttia, syklissä S on ainakin yksi toinen kaari e, joka yhdistää näitä komponentteja. Siis (V, (T { e }) { e }) on virittävä puu. Koska oletuksen mukaan e oli syklin S kaarista painavin ja verkossa kaikilla kaarilla on eri paino, tämä uusi virittävä puu on kustannukseltaan alkuperäistä puuta pienempi. Olemme siis päätelleet, että mikään kaaren e sisältävä virittävä puu ei voi olla pienin. Arvostelusta: Tehtävässä oli tarkoitus testata sellaista puihin ja verkkoihin liittyvää täsmällistä päättelyä, jota on kurssilla esitetty pienempien virittävien puiden yhteydessä. Sen takia kovin epämääräisistä perusteluista ei ole saanut pisteitä. Itse asiassa virheellisissä ratkaisuissa varsin usein oli jo väitteen paikkansapitävyys arvioitu väärin.