58131 Tietorakenteet Erilliskoe , ratkaisuja (Jyrki Kivinen)

Samankaltaiset tiedostot
58131 Tietorakenteet ja algoritmit Uusinta- ja erilliskoe malliratkaisut ja arvosteluperusteet

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

Algoritmi on periaatteellisella tasolla seuraava:

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.

Pienin virittävä puu (minimum spanning tree)

TKT20001 Tietorakenteet ja algoritmit Erilliskoe , malliratkaisut (Jyrki Kivinen)

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

Hakupuut. tässä luvussa tarkastelemme puita tiedon tallennusrakenteina

Tietorakenteet, laskuharjoitus 7, ratkaisuja

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

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

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

4. Joukkojen käsittely

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

Tarkennamme geneeristä painamiskorotusalgoritmia

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

Fibonacci-kasoilla voidaan toteuttaa samat operaatiot kuin binomikasoilla.

13 Lyhimmät painotetut polut

Algoritmit 2. Luento 2 Ke Timo Männikkö

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

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

Algoritmit 1. Luento 12 Ke Timo Männikkö

10. Painotetut graafit

Algoritmit 2. Luento 2 To Timo Männikkö

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

Algoritmit 2. Luento 7 Ti Timo Männikkö

Algoritmit 1. Luento 13 Ma Timo Männikkö

Verkon virittävät puut

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

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

Algoritmit 1. Luento 8 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

Algoritmit 2. Luento 14 Ke Timo Männikkö

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

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

Algoritmit 1. Luento 12 Ti Timo Männikkö

Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä

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

Algoritmit 1. Luento 13 Ti Timo Männikkö

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

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

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

Johdatus graafiteoriaan

lähtokohta: kahden O(h) korkuisen keon yhdistäminen uudella juurella vie O(h) operaatiota vrt. RemoveMinElem() keossa

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

8. Yhteenvetoa. abstrakti tietotyyppi: mitä datalle halutaan tehdä tietorakenne: miten se tehdään (talletusrakenne, operaatioden toteutus)

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

Algoritmit 1. Luento 7 Ti Timo Männikkö

10. Painotetut graafit

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

(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ä.

Tietorakenteet, laskuharjoitus 6,

Luku 8. Aluekyselyt. 8.1 Summataulukko

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

Algoritmit 2. Luento 6 Ke Timo Männikkö

Lyhin kahden solmun välinen polku

Algoritmit 2. Luento 6 To Timo Männikkö

811312A Tietorakenteet ja algoritmit II Perustietorakenteet

Algoritmit 1. Luento 9 Ti Timo Männikkö

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

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

811312A Tietorakenteet ja algoritmit, , Harjoitus 7, ratkaisu

811312A Tietorakenteet ja algoritmit Kertausta kurssin alkuosasta

private TreeMap<String, Opiskelija> nimella; private TreeMap<String, Opiskelija> numerolla;

1.1 Tavallinen binäärihakupuu

Algoritmit 1. Luento 5 Ti Timo Männikkö

Algoritmit 1. Luento 4 Ke Timo Männikkö

811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta

Algoritmit 1. Luento 14 Ke Timo Männikkö

Tietorakenteet, esimerkkivastauksia viikon 12 laskareihin

Kokeessa saa olla mukana A4:n kokoinen kaksipuoleinen kynällä tehty, itse kirjoitettu lunttilappu

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

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

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

T : Max-flow / min-cut -ongelmat

ja λ 2 = 2x 1r 0 x 2 + 2x 1r 0 x 2

811312A Tietorakenteet ja algoritmit, , Harjoitus 5, Ratkaisu

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Algoritmit 2. Luento 5 Ti Timo Männikkö

Algoritmit 2. Luento 5 Ti Timo Männikkö

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.

Algoritmit 2. Demot Timo Männikkö

Algoritmit 2. Demot Timo Männikkö

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

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

TIE Tietorakenteet ja algoritmit 25

Tietorakenteet ja algoritmit - syksy

TIE Tietorakenteet ja algoritmit 261

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

4 Tehokkuus ja algoritmien suunnittelu

Algoritmit 2. Luento 3 Ti Timo Männikkö

Algoritmit 2. Luento 10 To Timo Männikkö

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

Algoritmit 2. Luento 3 Ti Timo Männikkö

isomeerejä yhteensä yhdeksän kappaletta.

Algoritmit 2. Luento 11 Ti Timo Männikkö

Algoritmit 2. Luento 11 Ti Timo Männikkö

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

Tietorakenteet, esimerkkivastauksia viikon 12 laskareihin

Transkriptio:

58131 Tietorakenteet Erilliskoe 11.11.2008, ratkaisuja (Jyrki Kivinen) 1. (a) Koska halutaan DELETEMAX mahdollisimman nopeaksi, käytetään järjestettyä linkitettyä listaa, jossa suurin alkio on listan kärjessä. Muutuja Q osoittaa listan ensimmäistä alkiota. DELETEMAX(Q) value key[q] Q next[q] return value INSERT(Q, k, x) Lisätään data x avaimella k p new node key[p] k data[p] x if Q = NIL or k key[q] then next[p] Q Q p else r Q s next[r] while s NIL and k < key[s] next[r] p next[p] s INCREASEKEY(Q, k, v) Kasvata avain k arvoon v if Q NIL and v > k then r NIL s Q while s NIL and key[s] > v p r solmu jonka jälkeen v tulee while s NIL and key[s] > k if s NIL and key[s] = k then Avain k löytyi key[s] v if r NIL and key[r] < v then next[r] next[s] if p = NIL then next[s] Q Q s else next[s] next[p] next[p] s Selvästi DELETEMAX toimii vakioajassa. Proseduurit INSERT ja INCREASEKEY käyvät pahimmmassa tapauksessa koko listan läpi, joten aikavaativuudet ovat O(n), missä n on alkioiden lukumäärä. (b) Jos avaimet lisätän järjestyksessä pienimmästä suurimpaan, niin lisäys kohdistuu aina listan kärkeen, jolloin aikavaativuus on O(1) per operaatio. Koko operaatiojonon aikavaativuus on siis O(n).

(c) Jos avaimet lisätään järjestyksessä suurimmasta pienimpään, niin lisäykset kohdistuvat aina listan häntään, joten aikavaativuus lisäystä kohti on O(k), missä k on listan alkioiden lukumäärä lisäyshetkellä. Aikavaativuudeksi saadaan siis O(1 + 2 + 3 +... + n) = O(n 2 ). Arvostelu: Aikavaativuustarkasteluista yhteensä on saanut maksimissaan 4 pistettä ja pseudokoodeista 6 pistettä. Jos toteutuksessa on käytetty apuproseduureja (esim. DELETE listoille) kuvaamatta niitä, on vähennetty 2 pistettä. Jos prioriteettijonon operaatioita on selvästi tulkittu väärin, on vähennetty 2 3 pistettä. 2. (a) 20 5 10 15 20 25 30 35 45 50 55 65 70 75 85 90 95 100 (b) Lisätään 12: 12 20 5 10 12 15 20 25 30 35 45 50 55 65 70 75 85 90 95 100 Lisätään 92: 12 20 92 5 10 12 15 20 25 30 35 45 50 55 65 70 75 85 90 92 95 100 2

Lisätään 52: 12 20 52 92 5 10 12 15 20 25 30 35 65 70 75 85 90 92 95 100 45 50 52 55 (c) Poistetaan avaimet 15, 20, 35,, 55,, 30 ja 50. Ensimmäiset kuusi poistoa eivät aiheuta puun rakenteeseen muutoksia: 20 5 10 25 30 45 50 65 70 75 85 90 95 100 Viides poisto (30) aiheuttaa kahden lehden yhdistämisen: 5 10 25 45 50 65 70 75 85 90 95 100 Kuudes poisto (50) jättäisi yhdelle sisäsolmulle vain yhden lapsen: 5 10 25 45 65 70 75 85 90 95 100 3

Sisäsolmujen yhdistäminen jättäisi juurelle vain yhden lapsen, joten se poistetaan tarpeettomana: 5 10 25 45 65 70 75 85 90 95 100 Pisteytys: Kohta (a) 4 pistettä, kohdat (b) ja (c) kumpikin 3 pistettä. Selvästi yleisin virhe oli muistaa B + -puun määritelmä väärin siten, että sisäsolmujen viitta-arvojen suurimmaksi lukumääräksi oli asetettu 4, kun sen pitää siis tässä olla suurin lasten lukumäärä. Tällainen virhetulkinta teki (a)-kohdan turhan helpoksi ja tuhosi kokonaan (c)-kohdan, joten siitä on vähennetty yhteensä 4 pistettä. Toinen yleinen virhe oli laittaa sisäsolmuihin yksi viitta-arvo liikaa. 3. Pikajärjestäminen on selitetty kevään 2008 luentokalvoilla. 3 363. Pisteytys: Algoritmin perusajatuksen selittämisestä on voinut saada 5 pistettä. Keskeiset kohdat ovat jakoalkion rooli ja taulukon jakaminen osataulukoiksi, jotka järjestetään rekursiivisesti. Aika- ja tilavaativuuden esittämisestä O-merkinnällä on saanut 3 pistettä, mihin on edellytetty aikavaativuudesta sekä pahin että keskimääräinen tapaus. Loput 2 pistettä on saanut esittämällä pari muuta huomiota, esim. pienet vakiokertoimet, mikä on pahin tapaus. 4. Tehtävänä on siis löytää suunnatusta syklittömästä verkosta G = (V, E) pisin polku annetusta lähtösolmusta u annettuun maalisolmuun t. Tämä on samantapainen ongelma kuin luentomateriaalissa esitetty kriittiset työvaiheet (s. 431 434). Lasketaan siis jokaiselle solmulle v V lukuarvo pituus[v], joka on pisimmän polun pituus solmusta v solmuun t. Lisäksi talletetaan muuttujaan polku[v] kyseisen polun ensimmäinen solmu. Jos polkua v t ei ole, merkitään pituus[v] = 1. Algoritmi perustuu havaintoon pituus[u] = max {pituus[v] + 1 (u,v) E } (paitsi jos polkua ei ole). Koska verkko on syklitön, pituus-arvot voidaan laskea tämän mukaan noudattaen verkon käänteistä topologista järjestystä, eikä kehämääritelmiä synny. Tämä voidaan helposti toteuttaa syvyyssuuntaisen läpikäynnin yhteydessä: PISINPOLKU(V, E, s, t) for v V do pituus[v] 1 vierailtu[v] FALSE pituus[t] 0 polku[t] NIL vierailtu[t] TRUE VIERAILE(s) v s while v NIL do PRINT(v) v polku[v] VIERAILE(u) vierailtu[u] TRUE for v L[u] do if not vierailtu[v] then VIERAILE(v) if pituus[v] 1 and pituus[u] < pituus[v] + 1 then pituus[u] pituus[v] + 1 polku[u] v 4

Arvostelu: Tehtävä oli tarkoitettukin hieman vaikeammaksi soveltavaksi tehtäväksi. Pari pistettä on voinut saada esittämällä asiaan liittyviä huomioita tai jollain tapaa järjellisiä ratkaisuyrityksiä, mutta enempiin pisteisiin on vaadittu oikeilla jäljillä oleva ratkaisuidea. Jos ratkaisu noudattaa edellä esitettyä perusideaa, mutta toteutus perustuu tehottomaan rekursioon, on vähennetty 2 pistettä. (Edellä esitetyn palautuskaavan evaluoiminen naiivilla rekursiolla johtaa pahimmillaan eksponentiaaliseen aikavaativuuteen, koska samaan solmuun voidaan päästä useita eri reittejä pitkin.) 5. Kurssilla on käsitelty Kruskalin algoritmi (kevään 2008 luennot, s. 509 alkaen) ja Primin algoritmi (s. 518). Esimerkin lisäksi toivottiin suunnilleen seuraavan tasoista sanallista kuvausta: Kruskal: Algorimin idea on käydä kaaret läpi painon mukaan kasvavassa järjestyksessä. Vuorossa oleva kaari lisätään virittävään puuhun, paitsi jos tämä loisi syklin. Algoritmi pysähtyy, kun puussa on V 1 kaarta. Aputietorakenteeksi tarvitaan ensinnäkin keko, johon ensin viedään kaikki kaaret ja josta sitten kaaria poimitaan operaatiolla DELETE-MIN yksi kerrallaan. Vaihtoehtoisesti, ja hieman tehottomammin, voidaan ensin järjestää kaikki kaaret aputaulukkoon. Lisäksi pitää voida testata, aiheuttaisiko kaaren (u, v) lisääminen syklin. Tätä varten pidetään yllä tietorakennetta, jossa on tähän mennessä muodostetun virittävän metsän yhtenäiset komponentit. Operaatiot ovat seuraavat: FIND(u) palauttaa sen komponentin nimen, johon solmu u kuuluu. Komponentin nimenä on jokin tietty siihen kuuluva solmu. Jos FIND(u) = FIND(v), kaarta (u, v) ei saa lisätä, koska tästä aiheutuisi sykli. Jos kaari (u,v) lisätään, yhdistetää solmujen u ja v komponentit suorittamalla UNION(x,y), missä x = FIND(u) ja y = FIND(v). Prim: Virittävää puuta rakennetaan mielivaltaisesta lähtösolmusta alkaen liittämällä puuhun aina se solmu, joka voidaan liittää pienimmällä kustannuksella. Aputietorakenteeksi otetaan taas keko, jossa tällä kertaa kuitenkin on solmuja, ei kaaria. Solmun u avaimena on pienin sellaisen kaaren (u,v) paino, jolla v on jo liitetty puuhun. Liittämisvuorossa oleva solmu saadaan operaatiolla DELETE-MIN. Lisäksi solmua u liitettäessä pitää pienentää kaikkia sellaisia solmujen v avaimia, jotka ovat enemmän kuin w(u, v). Tämä tapahtuu operaatiolla DECREASE-KEY(v, w(u, v)). Edellä esitetyn mukaisista ratkaisuista on saanut 9 pistettä algoritmin idean kuvauksesta ja 6 pistettä tietorakenteiden kuvauksesta. Tietorakenteilla tarkoitetaan tässä oleellisesti hahmotelmaa siitä, miten algoritmisesti voidaan toteuttaa sellaiset asiat, jotka esimerkissä näkee suoraan kuvasta (syklin toteaminen jne.). 5