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

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

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

Algoritmi on periaatteellisella tasolla seuraava:

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

Tarkennamme geneeristä painamiskorotusalgoritmia

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

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

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

Algoritmit 2. Luento 7 Ti Timo Männikkö

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

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

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

Algoritmit 1. Luento 8 Ke Timo Männikkö

Miten osoitetaan joukot samoiksi?

58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

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

Algoritmit 2. Luento 2 To Timo Männikkö

Algoritmit 1. Luento 13 Ma Timo Männikkö

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

Algoritmit 1. Luento 13 Ti Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmit 1. Luento 9 Ti Timo Männikkö

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

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

10. Painotetut graafit

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

isomeerejä yhteensä yhdeksän kappaletta.

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

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

13 Lyhimmät painotetut polut

58131 Tietorakenteet ja algoritmit (syksy 2015)

58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

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

Algoritmit 2. Luento 2 Ke Timo Männikkö

Pienin virittävä puu (minimum spanning tree)

ALGORITMIT 1 DEMOVASTAUKSET KEVÄT 2012

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

Algoritmit 1. Demot Timo Männikkö

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Äärellisten mallien teoria

Lyhin kahden solmun välinen polku

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

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmit 1. Luento 5 Ti Timo Männikkö

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

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.

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Algoritmit 1. Demot Timo Männikkö

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

811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu

On annettu jono lukuja tai muita alkioita, joiden välille on määritelty suuruusjärjestys. Tehtävänä on saattaa alkiot suuruusjärjestykseen.

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

1.4 Funktioiden kertaluokat

Matematiikassa väitelauseet ovat usein muotoa: jos P on totta, niin Q on totta.

Luku 8. Aluekyselyt. 8.1 Summataulukko

Algoritmit 2. Demot Timo Männikkö

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

1 sup- ja inf-esimerkkejä

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

Esimerkkejä polynomisista ja ei-polynomisista ongelmista

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

10. Painotetut graafit

Algoritmit 2. Luento 11 Ti Timo Männikkö

Algoritmit 1. Luento 10 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

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

1 Kertaus. Lineaarinen optimointitehtävä on muotoa:

Algoritmit 2. Luento 5 Ti Timo Männikkö

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

Algoritmit 1. Luento 1 Ti Timo Männikkö

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

Kannan vektorit siis virittävät aliavaruuden, ja lisäksi kanta on vapaa. Lauseesta 7.6 saadaan seuraava hyvin käyttökelpoinen tulos:

Diskreetin matematiikan perusteet Esimerkkiratkaisut 3 / vko 10

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

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

Fibonacci-kasoilla voidaan toteuttaa samat operaatiot kuin binomikasoilla.

Tietorakenteet ja algoritmit - syksy

Olkoon S(n) kutsun merge-sort(a, p, q) tilavaativuus kun p q + 1 = n. Oletetaan merge toteutetuksi vakiotyötilassa (ei-triviaalia mutta mahdollista).

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

Tietorakenteet, laskuharjoitus 2,

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten. Ratkaisuehdotelma

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Ensimmäinen induktioperiaate

Algoritmit 2. Luento 5 Ti Timo Männikkö

Johdatus verkkoteoriaan 4. luento

ICS-C2000 Tietojenkäsittelyteoria Kevät 2016

Tehtävä 4 : 2. b a+1 (mod 3)

Algoritmit 1. Luento 14 Ke Timo Männikkö

Diofantoksen yhtälön ratkaisut

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

Ensimmäinen induktioperiaate

Yhtenäisyydestä. Johdanto. Lähipisteavaruus. Tuomas Korppi

Algoritmit 2. Luento 10 To Timo Männikkö

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

Todistusmenetelmiä Miksi pitää todistaa?

Malliratkaisut Demot

Verkon värittämistä hajautetuilla algoritmeilla

Tietorakenteet, esimerkkivastauksia viikon 12 laskareihin

Transkriptio:

58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, 10..2014, vastauksia 1. [9 pistettä] (a) Todistetaan 2n 2 + n + 5 = O(n 2 ): Kun n 1 on 2n 2 + n + 5 2n 2 + n 2 +5n 2 = 8n 2. Eli voidaan valita vakioiksi n 0 = 1 ja d = 8. (b) Todistetaan 2n 2 + n + 5 = Ω(n 2 ): Kun n 1 on n 2 + n + 5 n 2. Eli voidaan valita vakioiksi n 0 = 1 ja d = 1. (c) Väite 3n 3 + n + 5 = O(n 2 ) ei pidä paikkaansa: Jos n 1, niin 3n 3 + n+5 > 3n 3. Nyt pitäisi olla olemassa vakiot d ja n 0 1, joille pätevät 3n 3 +n+5 dn 2, kun n n 0 ja silloin myös 3n 3 < dn 2, eli jakamlla n 2 saadaan 3n < d. Valitsemalla n = max{d,n 0 } saamme 3d < d, joka on ristiriita. 2. [10 pistettä] Käytetään apuosoittimia, jotka osoittavat kullakin hetkellä listan käsiteltävän solmun edeltäjään (prev) ja seuraajaan (seur). Algoritmin on toimittava myös tapauksissa, joissa alkioiden määrä on 0 tai 1 (jolloin ei tarvitse tehdä mitään). Reverse(L) if L NIL and L.next NIL edel = nil seur = L.next while seur NIL L.next = edel edel = L L = seur seur = L.next L.next=edel return L Algoiritmi käy läpi listan alusta loppuun suorittaen kullekin solmulle vakioaikaiset operiaatiot, eli aikavaativuus on O(n). Käytetään kaksi apumuuttujaa, joten tilavaativuus on O(1). 3. [11 pistettä] (a) [3 pistettä] Solmut esijärjestyksessä ovat 4, 2, 1, 3, 7,, 10, 9, 11; sisäjärjestyksessä 1, 2, 3, 4,, 7, 9, 10, 11; jälkijärjestyksessä 1, 3, 2,, 9, 11, 10, 7, 4.

(b) [8 pistettä] Lisätään alkio 12 LeftRotate(7) Lisätään alkio 8. RightLeftRotate(4) 4 2 7 1 3 10 9 11 \ 12 4 \ 9 12 4 \ 9 12 / 8 7 4 10 2 9 11 1 3 8 12

Poistetaan alkio 4. 7 10 / 2 9 11 1 3 8 12 RightRotate() 7 1 9 11 / 3 8 12 Tarkastellaan sitten mitä tapahtuisi jos operaatiot olisivat päinvastaisessa järjestyksessä. Ensin poistetaan 4, jolloin vaihdetaan sen paikalle seuraaja. LeftRotate(7) 2 7 \ 1 3 10 9 11 \ 9

Lisätään alkio 8. \ 9 / 8 RightLeftRotate(7) 1 3 8 11 7 9 Lisätään alkio 12 1 3 8 11 \ 7 9 12 Ei tarvitse tehdä mitään rotaatioita. 4. [12 pistettä] Tehtävät ovat olleet pajatehtävinä, tosin pajassa ei sallittu (a)- kohdassa samaa lukua moneen kertaan. (a) [4 pistettä] Oletetaan taulukon A sisältävän alkiot a 1,...,a n. Taulukko voidaan järjestää ajassa O(n log n) käyttäen kekojärjestämistä tai lomitusjärjestämistä. Asetetaan tämän jälkeen osoittimet i ja j taulukon alkuun ja loppuun. Jos näiden osoittamien alkioiden summa on pienempi kuin k, kasvatetaan osoitinta i yhdellä. Jos se on suurempi, pienennetään osoitinta j yhdellä. Silmukka suoritetaan n kertaa, mutta sen suorittaminen vie vakioajan, joten aikavaativuus on kokonaisuudessaan O(nlogn+n) = O(nlogn).

find-two-terms(a, n, k) A = sort(a) // kekojärjestäminen tai lomitusjärjestäminen return find-terms(a, n, k) find-terms(a, n, k) i = 1 j = n while i j sum = A[i] + A[j] if sum = k return true if sum < k i = i + 1 if sum > k j = j - 1 return false Oikeellisuustodistusta ei pyydetty, mutta osoitamme että ratkaisu on oikea. Jos algoritmi ylipäänsä palauttaa arvon true, selvästi tämän tuottama pari täyttää ehdot. Pitää vielä osoittaa, että algoritmi todella löytää kelvollisen parin, jos sellainen on olemassa. Oletetaan siis, että joillakin i ja j pätee A[i ]+A[j ] = k. Voidaan valita i j. Osoitetaan, että silmukka pitää voimassa invariantin i i ja j j. Ennen silmukkaan tuloa tämä selvästi pätee. Oletetaan nyt, että silmukassa ehdot i i ja j j pätevät. Jos sum = k, algoritmi päättyy oikeaan tulokseen. Jos sum < k, niin oletuksesta j j seuraa taulukon järjestyksen nojalla A[j ] A[j]. Siis A[i] = sum A[j] < k A[j] koska sum < k k A[j ] koska A[j] A[j ] = A[i ] koska A[i ]+A[j ] = k. Taulukon järjestyksen nojalla siis i < i, joten ehto i i pysyy voimassa myös sijoituksen i = i+1 jälkeen. Tapaus sum > k käsitellään vastaavasti. Siis invariantti i i j j pysyy voimassa. Erityisesti siis aina i j eli while-lauseen ehto ei koskaan tule epätodeksi. Silmukka ei kuitenkaan voi pyöriä ikuisesti, sillä erotus j i pienenee joka iteraatiolla eikä koskaan mene nollan alapuolelle. Siis algoritmin suoritus pysähtyy return-lauseeseen silmukan sisällä, jolloin palautettava tulos on oikea.

(b) [4 pistettä] Hyödynnetään taas funktiota find-terms kutsumalla sitä erikseen jokaisen taulukon A alkion kohdalla. Sen aikavaativuus oli O(n), ja sitä kutsutaan silmukassa n kertaa, mutta järjestäminen tarvitsee suorittaa vain kerran. Siksi algoritmin kokonaisaikavaativuus ono(n 2 +nlogn) = O(n 2 ). find-three-terms(a, n, k) A = sort(a) // kekojärjestäminen tai lomitusjärjestäminen for i = 1 to n find-terms(a,n,k-a[i]) return false (c) [4 pistettä] Muodostetaan kaikki n 2 kahden luvun summaa taulukkoon B ajassa O(n 2 ). Nyt voidaan taas käyttää funktiota find-two-terms. KoskaB sisältään 2 alkiota, kuluu aikaao(n 2 logn 2 ) = O(n 2 2 logn) = O(n 2 logn). find-four-terms(a, n, k) for i = 1 to n for j = 1 to n B[n*(j-1)+i] = A[i]+A[j] find-two-terms(b,n*n,k) 5. [8 pistettä] (a) Dijkstra etsii lyhimmät polut tietystä solmusta verkossa. Dijkstan algoritmissa ei saa olle negatiivisia kaarenpainoja. Dijkstra soveltuu sekä suunnatuille että suuntaamattomille verkoille (b) Floyd-Warshall etsii lyhimmät polut kaikista solmuista kaikkiin solmuihin verkossa. (c) Ensin kaikkien solmujen etäisyydet ovat, paitsi a:n joka on 0. Valitaan solmu a ja päivitetään etäisyydet: b 14 ja f 2. Jäljellä olevista solmuista pienin etäisyysarvio on f:llä eli 2 joten valitaan se seuraavaksi ja päivitetään etäisyys e 7 (a:n etäisyyttä ei päivitetä). Jäljellä olevista pienin on e ja päivitetään b 12, d 9. Jäljellä olevista pienin on d ja päivitetään c 10. Jäljellä olevista pienin on c ja päivitetään b 11. Jäljellä on vain b ja olemme valmiit. Lopulliset etäisyydet ovat: b 11, c 10, d 9, e 7, f 2.

. [10 pistettä] Ehdotettu ratkaisumenetelmä toimii oikein. Todistus: Olkoon (V, T) jokin pienin virittävä puu ja p maksimipainoltaan pienin polku s t puun kaaria pitkin. Tehdään vastaoletus, että verkossa on olemassa maksimipainoltaan pienempi polku p solmusta s solmuun t. Valitaan polun p painavin kaari; olkoon se e. Tarkastellaan verkkoa (V,T {e}). Verkossa on kaksi komponenttia, joista toinen sisältää solmun s ja toinen solmun t. Polku p sisältää ainakin yhden kaaren e, joka yhdistää näitä komponentteja. Siis (V,T {e } {e}) on virittävä puu. Oletuksen mukaan kaikki polun p kaaret ovat kevyempiä kuin e. Erityisesti tämä koskee kaarta e, joten w(t {e } {e}) = w(t)+w(e ) w(e) < w(t). Siis verkolla on pienempikin virittävä puu kuin (V,T); ristiriita.